From 10b85fd638db07325823fcb28113795f48cda7f3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 7 Sep 2023 06:35:53 +0000 Subject: [PATCH 001/371] chore(front): lock file maintenance Part-of: --- front/yarn.lock | 729 ++++++++++++++++++++++++------------------------ 1 file changed, 365 insertions(+), 364 deletions(-) diff --git a/front/yarn.lock b/front/yarn.lock index 1e98ea3ee..bbe655065 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -34,12 +34,12 @@ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.22.10" + "@babel/highlight" "^7.22.13" chalk "^2.4.2" "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": @@ -48,32 +48,32 @@ integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@^7.11.1": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.11.tgz#8033acaa2aa24c3f814edaaa057f3ce0ba559c24" - integrity sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4" + integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.11" - "@babel/parser" "^7.22.11" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.11" - "@babel/types" "^7.22.11" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.15" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.15" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" - integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== +"@babel/generator@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== dependencies: - "@babel/types" "^7.22.10" + "@babel/types" "^7.22.15" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -86,32 +86,32 @@ "@babel/types" "^7.22.5" "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" - integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/types" "^7.22.10" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" browserslist "^4.21.9" lru-cache "^5.1.1" semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" - integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" + integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -119,9 +119,9 @@ semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" @@ -158,30 +158,30 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" + integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== +"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082" + integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ== dependencies: "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-simple-access" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.15" "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" @@ -239,15 +239,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" + integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== "@babel/helper-wrap-function@^7.22.9": version "7.22.10" @@ -258,44 +258,44 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.10" -"@babel/helpers@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.11.tgz#b02f5d5f2d7abc21ab59eeed80de410ba70b056a" - integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg== +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.11" - "@babel/types" "^7.22.11" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== +"@babel/highlight@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== dependencies: "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.16.4", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.11", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.11.tgz#becf8ee33aad2a35ed5607f521fe6e72a615f905" - integrity sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g== +"@babel/parser@^7.16.4", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7": + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" - integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" + integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" - integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" + integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -436,10 +436,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.10": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz#dbe3b1ff5a52e2e5edc4b19a60d325a675ed2649" - integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw== +"@babel/plugin-transform-async-generator-functions@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" + integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -462,10 +462,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" - integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== +"@babel/plugin-transform-block-scoping@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" + integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -477,7 +477,7 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.5": +"@babel/plugin-transform-class-static-block@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== @@ -486,18 +486,18 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" - integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== +"@babel/plugin-transform-classes@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" + integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" @@ -509,10 +509,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" - integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== +"@babel/plugin-transform-destructuring@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" + integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -531,7 +531,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.5": +"@babel/plugin-transform-dynamic-import@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== @@ -547,7 +547,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.5": +"@babel/plugin-transform-export-namespace-from@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== @@ -555,10 +555,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" - integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== +"@babel/plugin-transform-for-of@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" + integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -571,7 +571,7 @@ "@babel/helper-function-name" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.5": +"@babel/plugin-transform-json-strings@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== @@ -586,7 +586,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.5": +"@babel/plugin-transform-logical-assignment-operators@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== @@ -609,16 +609,16 @@ "@babel/helper-module-transforms" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz#d7991d3abad199c03b68ee66a64f216c47ffdfae" - integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== +"@babel/plugin-transform-modules-commonjs@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" + integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== dependencies: - "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-module-transforms" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.5": +"@babel/plugin-transform-modules-systemjs@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== @@ -651,7 +651,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== @@ -659,7 +659,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.5": +"@babel/plugin-transform-numeric-separator@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== @@ -667,16 +667,16 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz#dbbb06ce783cd994a8f430d8cefa553e9b42ca62" - integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw== +"@babel/plugin-transform-object-rest-spread@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" + integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.15" "@babel/plugin-transform-object-super@^7.22.5": version "7.22.5" @@ -686,7 +686,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.5" -"@babel/plugin-transform-optional-catch-binding@^7.22.5": +"@babel/plugin-transform-optional-catch-binding@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== @@ -694,19 +694,19 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.11.tgz#062f0071f777aa06b31332cd90318d6b76444b74" - integrity sha512-7X2vGqH2ZKu7Imx0C+o5OysRwtF/wzdCAqmcD1N1v2Ww8CtOSC+p+VoV76skm47DLvBZ8kBFic+egqxM9S/p4g== +"@babel/plugin-transform-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" + integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" - integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== +"@babel/plugin-transform-parameters@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" + integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -718,7 +718,7 @@ "@babel/helper-create-class-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.5": +"@babel/plugin-transform-private-property-in-object@^7.22.11": version "7.22.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== @@ -818,16 +818,16 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" - integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.15.tgz#142716f8e00bc030dae5b2ac6a46fbd8b3e18ff8" + integrity sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -848,41 +848,41 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.10" + "@babel/plugin-transform-async-generator-functions" "^7.22.15" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.10" + "@babel/plugin-transform-block-scoping" "^7.22.15" "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.6" + "@babel/plugin-transform-class-static-block" "^7.22.11" + "@babel/plugin-transform-classes" "^7.22.15" "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.10" + "@babel/plugin-transform-destructuring" "^7.22.15" "@babel/plugin-transform-dotall-regex" "^7.22.5" "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.11" "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.5" - "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-for-of" "^7.22.15" "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.11" "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" "@babel/plugin-transform-member-expression-literals" "^7.22.5" "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.15" + "@babel/plugin-transform-modules-systemjs" "^7.22.11" "@babel/plugin-transform-modules-umd" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" - "@babel/plugin-transform-numeric-separator" "^7.22.5" - "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-numeric-separator" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.15" "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.10" - "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.22.15" "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" "@babel/plugin-transform-property-literals" "^7.22.5" "@babel/plugin-transform-regenerator" "^7.22.10" "@babel/plugin-transform-reserved-words" "^7.22.5" @@ -896,7 +896,7 @@ "@babel/plugin-transform-unicode-regex" "^7.22.5" "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.10" + "@babel/types" "^7.22.15" babel-plugin-polyfill-corejs2 "^0.4.5" babel-plugin-polyfill-corejs3 "^0.8.3" babel-plugin-polyfill-regenerator "^0.5.2" @@ -918,44 +918,44 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.10", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/template@^7.22.15", "@babel/template@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.11.tgz#71ebb3af7a05ff97280b83f05f8865ac94b2027c" - integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ== +"@babel/traverse@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.15.tgz#75be4d2d6e216e880e93017f4e2389aeb77ef2d9" + integrity sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ== dependencies: - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.11" - "@babel/types" "^7.22.11" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2" - integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282" + integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.15" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1191,9 +1191,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.7.0.tgz#96e7c05e738327602ae5942437f9c6b177ec279a" - integrity sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA== + version "4.8.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" + integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== "@eslint/eslintrc@^1.2.0", "@eslint/eslintrc@^1.4.0": version "1.4.1" @@ -1211,9 +1211,9 @@ strip-json-comments "^3.1.1" "@humanwhocodes/config-array@^0.11.8": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + version "0.11.11" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" + integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -1240,15 +1240,15 @@ source-map "0.6.1" yaml-eslint-parser "^0.3.2" -"@intlify/core-base@9.2.2", "@intlify/core-base@^9.1.9": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.2.2.tgz#5353369b05cc9fe35cab95fe20afeb8a4481f939" - integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA== +"@intlify/core-base@9.3.0", "@intlify/core-base@^9.1.9": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0.tgz#fa42e32f89f06d421772fcedeec7dfba845ba98f" + integrity sha512-SRzn8TMnPZ6MY8OFrgouRq4DGaf01SHcJEF6FglYFYvRkgPzziEcQe+v2PD+O5lUp/rJafP4dabm1CmsVAA7rA== dependencies: - "@intlify/devtools-if" "9.2.2" - "@intlify/message-compiler" "9.2.2" - "@intlify/shared" "9.2.2" - "@intlify/vue-devtools" "9.2.2" + "@intlify/devtools-if" "9.3.0" + "@intlify/message-compiler" "9.3.0" + "@intlify/shared" "9.3.0" + "@intlify/vue-devtools" "9.3.0" "@intlify/core-base@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1260,12 +1260,12 @@ "@intlify/shared" "9.3.0-beta.19" "@intlify/vue-devtools" "9.3.0-beta.19" -"@intlify/devtools-if@9.2.2": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz#b13d9ac4b4e2fe6d2e7daa556517a8061fe8bd39" - integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg== +"@intlify/devtools-if@9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0.tgz#ae5a4d3577e05577e65bb6abbb0506d8af9309f6" + integrity sha512-5aKZnqj0Ff4dfwBX2Oo+MheVs00CBnC0RzWK26aT2M4AF0cxdFLOJAs51/eHT01jmzrxSvfBMjdArUWHwgetfg== dependencies: - "@intlify/shared" "9.2.2" + "@intlify/shared" "9.3.0" "@intlify/devtools-if@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1295,13 +1295,13 @@ vue-eslint-parser "^9.0.0" yaml-eslint-parser "^1.0.0" -"@intlify/message-compiler@9.2.2", "@intlify/message-compiler@^9.1.9": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz#e42ab6939b8ae5b3d21faf6a44045667a18bba1c" - integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA== +"@intlify/message-compiler@9.3.0", "@intlify/message-compiler@^9.1.9", "@intlify/message-compiler@next": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0.tgz#203366fe7448255731e951507c4d79093bf898b1" + integrity sha512-D8tSJEhTCSFcCzkThjE4Sbk1tIdvzkYa1FaVIzUtZ8hKPATvokNrOiDw1i/h671m8A80l9Ywq594i/LPTB6EJA== dependencies: - "@intlify/shared" "9.2.2" - source-map "0.6.1" + "@intlify/shared" "9.3.0" + source-map-js "^1.0.2" "@intlify/message-compiler@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1311,29 +1311,16 @@ "@intlify/shared" "9.3.0-beta.19" source-map "0.6.1" -"@intlify/message-compiler@next": - version "9.3.0-beta.26" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.26.tgz#398e1228e00f9ab9b243fce9a7c1408107693918" - integrity sha512-qsfU6Lca7mI80ts1vgy+pfNvGm2gHy0nERpT/K1GYgnECmsKwud0e8SG1PPxKPEHKa5Mdngzs4pS7X1wH0SCGA== - dependencies: - "@intlify/shared" "9.3.0-beta.26" - source-map-js "^1.0.2" - -"@intlify/shared@9.2.2": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5" - integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q== +"@intlify/shared@9.3.0", "@intlify/shared@next": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0.tgz#8875120f1e6826be0e99b623e2618167402bfe41" + integrity sha512-MMGRz6zWxtz7rHtxIIdnyb8SYOIaaseN1IvUhAEs9tOW4u77RD4DFp4qgPXesp2Gxo/5QitH9kwSs0jnxGUNEw== "@intlify/shared@9.3.0-beta.19": version "9.3.0-beta.19" resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.19.tgz#090bdd5d6ed1eabbb92ee2f2ead2668edc576596" integrity sha512-+lhQggrLvlQ/O5OmIYAc9gadcYXMoaDi0Doef+X/f6TLZFr9PTMjOpBWmpwNNHi026e54jckntUn6GzqDtIN4w== -"@intlify/shared@9.3.0-beta.26", "@intlify/shared@next": - version "9.3.0-beta.26" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.26.tgz#4c45e272533e66c5b5b63edb9cf8dbc077da129f" - integrity sha512-RpCtfSYIg4tSskrazTr5+WCHyw6qpgwdIxC+x3nCnrPGxyk+en9FoSbadVfx/w7uDTdyhKslEw4d2+qhNc0s4Q== - "@intlify/unplugin-vue-i18n@0.8.2": version "0.8.2" resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.8.2.tgz#4196cb5bee4243bb3a33af76ce9663f3e106809a" @@ -1352,13 +1339,13 @@ source-map "0.6.1" unplugin "^1.0.0" -"@intlify/vue-devtools@9.2.2": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz#b95701556daf7ebb3a2d45aa3ae9e6415aed8317" - integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg== +"@intlify/vue-devtools@9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0.tgz#f3137319fadaa92686de11be5ef28209dc828455" + integrity sha512-kEaxIz1VEgsz2q5RhoS+fBGTkXr/4+pxmK9mN14+speVGb82HPRntKBmz0GO18I1JisD4Z0vAva+KCTHGeAqbQ== dependencies: - "@intlify/core-base" "9.2.2" - "@intlify/shared" "9.2.2" + "@intlify/core-base" "9.3.0" + "@intlify/shared" "9.3.0" "@intlify/vue-devtools@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1435,9 +1422,9 @@ fastq "^1.6.0" "@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + version "1.0.0-next.23" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" + integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== "@rollup/plugin-babel@^5.2.0": version "5.3.1" @@ -1493,9 +1480,9 @@ picomatch "^2.2.2" "@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.3.tgz#183126d69aeb1cfa23401d5a71cb4b8c16c4a4e0" - integrity sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" + integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" @@ -1638,9 +1625,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.4": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" - integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" + integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== "@types/cookie@^0.3.3": version "0.3.3" @@ -1688,9 +1675,9 @@ integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/jquery@*": - version "3.5.17" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.17.tgz#c38d964441f678cd358afb92f5688ecfcb6aaa2b" - integrity sha512-U40tNEAGSTZ7R1OC6kGkD7f4TKW5DoVx6jd9kTB9mo5truFMi1m9Yohnw9kl1WpTPvDdj7zAw38LfCHSqnk5kA== + version "3.5.18" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.18.tgz#2a4979866954e601361ddc62ea304c9e46311b77" + integrity sha512-sNm7O6LECFhHmF+3KYo6QIl2fIbjlPYa0PDgDQwfOaEJzwpK20Eub9Ke7VKkGsSJ2K0HUR50S266qYzRX4GlSw== dependencies: "@types/sizzle" "*" @@ -1719,9 +1706,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.197" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" - integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== + version "4.14.198" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" + integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== "@types/minimatch@*": version "5.1.2" @@ -1736,9 +1723,9 @@ axios ">=0.13.0" "@types/node@*": - version "20.5.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.4.tgz#4666fb40f9974d60c53c4ff554315860ba4feab8" - integrity sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA== + version "20.5.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" + integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1934,9 +1921,9 @@ "@types/semantic-ui-visibility" "*" "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.1" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" + integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== "@types/showdown@2.0.0": version "2.0.0" @@ -2881,14 +2868,14 @@ array-buffer-byte-length@^1.0.0: is-array-buffer "^3.0.1" array-includes@^3.1.4, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -2897,44 +2884,45 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.1" array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== dependencies: array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" define-properties "^1.2.0" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" @@ -3021,9 +3009,9 @@ axios@1.2.3: proxy-from-env "^1.1.0" axios@>=0.13.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" + integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -3166,9 +3154,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001517: - version "1.0.30001522" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" - integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== + version "1.0.30001527" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001527.tgz#813826554828245ccee776c850566dce12bdeaba" + integrity sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ== chai@^4.3.7: version "4.3.8" @@ -3534,9 +3522,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.477: - version "1.4.501" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.501.tgz#05e97f61d109dc7a5ab246a81bb3fb892edfe954" - integrity sha512-NCF5hZUg73MEP0guvIM+BjPs9W07UeAuc5XCNqRZZTKJxLjE0ZS/Zo5UsV8bbs2y/jeKRPFPzdWdBfOGEZTXKg== + version "1.4.510" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.510.tgz#446c50d7533c1e71a84b00a3b37ab06dd601d890" + integrity sha512-xPfLIPFcN/WLXBpQ/K4UgE98oUBO5Tia6BD4rkSR0wE7ep/PwBVlgvPJQrIBpmJGVAmUzwPKuDbVt9XV6+uC2g== emoji-regex@^8.0.0: version "8.0.0" @@ -3555,7 +3543,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: +es-abstract@^1.20.4, es-abstract@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== @@ -4086,14 +4074,15 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: +flatted@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== @@ -4167,16 +4156,16 @@ function-bind@^1.1.1: integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -4440,9 +4429,9 @@ ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0: integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immutable@^4.0.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.3.tgz#8934ff6826d996a7642c8dc4b46e694dd19561e3" - integrity sha512-808ZFYMsIRAjLAu5xkKo0TsbY9LBy9H5MazTKIEHerNkg0ymgilGfBPMR/3G7d/ihGmuK2Hw8S1izY2d3kd3wA== + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -4470,7 +4459,7 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3, internal-slot@^1.0.5: +internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -4710,9 +4699,9 @@ jest-worker@^26.2.1: supports-color "^7.0.0" jquery@^3.4.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.0.tgz#fe2c01a05da500709006d8790fe21c8a39d75612" - integrity sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ== + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== js-logger@1.6.1: version "1.6.1" @@ -4778,6 +4767,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -4865,6 +4859,13 @@ just-extend@^4.0.2: resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5156,32 +5157,32 @@ object.assign@^4.1.4: object-keys "^1.1.1" object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - es-abstract "^1.21.2" + es-abstract "^1.22.1" + +object.groupby@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" object.values@^1.1.5, object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" once@^1.3.0: version "1.4.0" @@ -5323,9 +5324,9 @@ postcss-selector-parser@^6.0.9: util-deprecate "^1.0.2" postcss@^8.1.10, postcss@^8.4.20, postcss@^8.4.27: - version "8.4.28" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" - integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== + version "8.4.29" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" + integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -5409,7 +5410,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: +regexp.prototype.flags@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== @@ -5506,9 +5507,9 @@ rollup@^2.43.1: fsevents "~2.3.2" rollup@^3.27.1, rollup@^3.28.0, rollup@^3.7.0, rollup@^3.7.2: - version "3.28.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.28.1.tgz#fb44aa6d5e65c7e13fd5bcfff266d0c4ea9ba433" - integrity sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw== + version "3.29.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.0.tgz#1b40e64818afc979c7e5bef93de675829288986b" + integrity sha512-nszM8DINnx1vSS+TpbWKMkxem0CDWk3cSit/WWCBVs9/JZ1I/XLwOsiUglYuYReaeWWSsW9kge5zE5NZtf/a4w== optionalDependencies: fsevents "~2.3.2" @@ -5520,12 +5521,12 @@ run-parallel@^1.1.9: queue-microtask "^1.2.2" safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" isarray "^2.0.5" @@ -5725,17 +5726,17 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.matchall@^4.0.6: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + version "4.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz#148779de0f75d36b13b15885fec5cadde994520d" + integrity sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" side-channel "^1.0.4" string.prototype.trim@^1.2.7: @@ -5757,13 +5758,13 @@ string.prototype.trimend@^1.0.6: es-abstract "^1.20.4" string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" stringify-object@^3.3.0: version "3.3.0" @@ -5848,9 +5849,9 @@ tempy@^0.6.0: unique-string "^2.0.0" terser@^5.0.0: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== + version "5.19.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" + integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -6270,9 +6271,9 @@ vitest@0.25.8: vite "^3.0.0 || ^4.0.0" vue-demi@>=0.14.5: - version "0.14.5" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.5.tgz#676d0463d1a1266d5ab5cba932e043d8f5f2fbd9" - integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA== + version "0.14.6" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92" + integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== vue-demi@^0.12.5: version "0.12.5" @@ -6711,9 +6712,9 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.11.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + version "8.14.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.0.tgz#6c5792c5316dc9266ba8e780433fc45e6680aecd" + integrity sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg== xml-name-validator@^4.0.0: version "4.0.0" @@ -6764,9 +6765,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + version "2.3.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" + integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" From 4ea74750ff0ab7f9fba3b9a180c13fec14849315 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 7 Sep 2023 06:34:48 +0000 Subject: [PATCH 002/371] chore(docs): lock file maintenance Part-of: --- docs/poetry.lock | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index 2f2e0dc1e..c384ab135 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -484,14 +484,14 @@ plugins = ["importlib-metadata"] [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -507,6 +507,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -514,8 +515,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -532,6 +540,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -539,6 +548,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -568,20 +578,20 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.1.2" +version = "68.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, - {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, + {file = "setuptools-68.2.0-py3-none-any.whl", hash = "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"}, + {file = "setuptools-68.2.0.tar.gz", hash = "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "snowballstemmer" From cef09e877b46b504629d215a32c51d7ccf683cba Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 13 Sep 2023 09:11:44 +0000 Subject: [PATCH 003/371] chore(api): update dependency django to v3.2.21 Part-of: --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 02e4f1416..72b6c5b09 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1015,13 +1015,13 @@ with-social = ["django-allauth (>=0.40.0,<0.53.0)"] [[package]] name = "django" -version = "3.2.20" +version = "3.2.21" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." optional = false python-versions = ">=3.6" files = [ - {file = "Django-3.2.20-py3-none-any.whl", hash = "sha256:a477ab326ae7d8807dc25c186b951ab8c7648a3a23f9497763c37307a2b5ef87"}, - {file = "Django-3.2.20.tar.gz", hash = "sha256:dec2a116787b8e14962014bf78e120bba454135108e1af9e9b91ade7b2964c40"}, + {file = "Django-3.2.21-py3-none-any.whl", hash = "sha256:d31b06c58aa2cd73998ca5966bc3001243d3c4e77ee2d0c479bced124765fd99"}, + {file = "Django-3.2.21.tar.gz", hash = "sha256:a5de4c484e7b7418e6d3e52a5b8794f0e6b9f9e4ce3c037018cf1c489fa87f3c"}, ] [package.dependencies] @@ -3871,4 +3871,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "45072f5e6a8b8c9eaa5e95457e44b9f45e761b00cf4b40a9524f95c73d09ab9f" +content-hash = "e2bc3d1f40992b0deea3ff846f749568671dabca87bda72641650c015d323ee8" diff --git a/api/pyproject.toml b/api/pyproject.toml index d3124f02b..bfb6ebeb4 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -29,7 +29,7 @@ python = "^3.7" # Django dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } -django = "==3.2.20" +django = "==3.2.21" django-allauth = "==0.42.0" django-cache-memoize = "0.1.10" django-cacheops = "==6.1" From 3e9c0f80c6a0e668773545a734cd811526c6dbf6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Sep 2023 04:36:21 +0000 Subject: [PATCH 004/371] chore(front): update dependency fomantic-ui-css to v2.9.3 Part-of: --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 7bf331cd5..2c45a637d 100644 --- a/front/package.json +++ b/front/package.json @@ -31,7 +31,7 @@ "diff": "5.1.0", "dompurify": "2.4.7", "focus-trap": "7.2.0", - "fomantic-ui-css": "2.9.2", + "fomantic-ui-css": "2.9.3", "howler": "2.2.3", "idb-keyval": "6.2.1", "js-logger": "1.6.1", diff --git a/front/yarn.lock b/front/yarn.lock index bbe655065..b14e6aa79 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -4099,10 +4099,10 @@ follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -fomantic-ui-css@2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.9.2.tgz#b445206bb0c1547ff05abbecc4725107749f7f54" - integrity sha512-D2KogymuA0t7z7zLoekSorgpOKil+q8y09sfYmWP1LcEA1WYRcMKdm5okjnxn4eopl8j45WBnWrkgtobNSbY2w== +fomantic-ui-css@2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.9.3.tgz#5ee927654be50b77abfaff77bc0b6735e1d7a09c" + integrity sha512-7bM6p3QRpfZFofg7Fd3crzox2E/nBsPyyWDN+N4lnTjNMxgKltSaXJTfhLoK5xBA+wEoNtcmm6w6FQ5Drj+27A== dependencies: jquery "^3.4.0" From d9161a5088b5b0bb0adc0241c2b6952480c65eb4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 28 Sep 2023 09:36:27 +0000 Subject: [PATCH 005/371] chore(front): update dependency standardized-audio-context to v25.3.57 Part-of: --- front/package.json | 2 +- front/yarn.lock | 28 ++++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/front/package.json b/front/package.json index 2c45a637d..b7d9731c1 100644 --- a/front/package.json +++ b/front/package.json @@ -39,7 +39,7 @@ "lru-cache": "7.14.1", "moment": "2.29.4", "showdown": "2.1.0", - "standardized-audio-context": "25.3.55", + "standardized-audio-context": "25.3.57", "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", diff --git a/front/yarn.lock b/front/yarn.lock index b14e6aa79..771a908a4 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -924,6 +924,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.1": + version "7.23.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" + integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -2981,6 +2988,14 @@ automation-events@^6.0.1, automation-events@^6.0.8: "@babel/runtime" "^7.22.6" tslib "^2.6.1" +automation-events@^6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.10.tgz#45680564e7633ec7a19928646615c2eeca2874a0" + integrity sha512-nP2k70tZ4+GrDUeW+77c/ZOJD3KMXZlW5A07YHNw6+RcggdHwXPIdhYT3Nhzufbfon4UHY8CvYuQllD3Em2rtQ== + dependencies: + "@babel/runtime" "^7.23.1" + tslib "^2.6.2" + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" @@ -5707,7 +5722,16 @@ standardized-audio-context-mock@9.6.18: tslib "^2.5.0" vehicles "^9.0.1" -standardized-audio-context@25.3.55, standardized-audio-context@^25.3.46: +standardized-audio-context@25.3.57: + version "25.3.57" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.57.tgz#05e7a1d64345680d4648c694ec019f04413cbaa7" + integrity sha512-MHmZjXXc3zRRuh4Ro8Iah334n+A8Y9EeLeECzElBzpNQYLCwmmKRXPB88WazwkGhux85fU8+gkAbyELJ0ehiCg== + dependencies: + "@babel/runtime" "^7.23.1" + automation-events "^6.0.10" + tslib "^2.6.2" + +standardized-audio-context@^25.3.46: version "25.3.55" resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.55.tgz#4d87ea6052de80ecf5abf56eb71ecd71f7e52e4e" integrity sha512-ym9g7FZ5S1FykbQ1///ktTJgk+zTtGF1hGR/BFRQjRkN6G2Xy9GbL5kOcM7DlzflV2yJtqVwfU2gL042b1oHwg== @@ -5955,7 +5979,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1: +tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== From 433c9c78e84e923963a58df826ef0364204dabc2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 28 Sep 2023 15:06:41 +0000 Subject: [PATCH 006/371] chore(api): update dependency psycopg2 to v2.9.8 Part-of: --- api/poetry.lock | 26 +++++++++++++------------- api/pyproject.toml | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 72b6c5b09..557908f94 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2430,22 +2430,22 @@ wcwidth = "*" [[package]] name = "psycopg2" -version = "2.9.7" +version = "2.9.8" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.6" files = [ - {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, - {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, - {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, - {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, - {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, - {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, - {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, - {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, - {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, + {file = "psycopg2-2.9.8-cp310-cp310-win32.whl", hash = "sha256:2f8594f92bbb5d8b59ffec04e2686c416401e2d4297de1193f8e75235937e71d"}, + {file = "psycopg2-2.9.8-cp310-cp310-win_amd64.whl", hash = "sha256:f9ecbf504c4eaff90139d5c9b95d47275f2b2651e14eba56392b4041fbf4c2b3"}, + {file = "psycopg2-2.9.8-cp311-cp311-win32.whl", hash = "sha256:65f81e72136d8b9ac8abf5206938d60f50da424149a43b6073f1546063c0565e"}, + {file = "psycopg2-2.9.8-cp311-cp311-win_amd64.whl", hash = "sha256:f7e62095d749359b7854143843f27edd7dccfcd3e1d833b880562aa5702d92b0"}, + {file = "psycopg2-2.9.8-cp37-cp37m-win32.whl", hash = "sha256:81b21424023a290a40884c7f8b0093ba6465b59bd785c18f757e76945f65594c"}, + {file = "psycopg2-2.9.8-cp37-cp37m-win_amd64.whl", hash = "sha256:67c2f32f3aba79afb15799575e77ee2db6b46b8acf943c21d34d02d4e1041d50"}, + {file = "psycopg2-2.9.8-cp38-cp38-win32.whl", hash = "sha256:287a64ef168ef7fb9f382964705ff664b342bfff47e7242bf0a04ef203269dd5"}, + {file = "psycopg2-2.9.8-cp38-cp38-win_amd64.whl", hash = "sha256:dcde3cad4920e29e74bf4e76c072649764914facb2069e6b7fa1ddbebcd49e9f"}, + {file = "psycopg2-2.9.8-cp39-cp39-win32.whl", hash = "sha256:d4ad050ea50a16731d219c3a85e8f2debf49415a070f0b8331ccc96c81700d9b"}, + {file = "psycopg2-2.9.8-cp39-cp39-win_amd64.whl", hash = "sha256:d39bb3959788b2c9d7bf5ff762e29f436172b241cd7b47529baac77746fd7918"}, + {file = "psycopg2-2.9.8.tar.gz", hash = "sha256:3da6488042a53b50933244085f3f91803f1b7271f970f3e5536efa69314f6a49"}, ] [[package]] @@ -3871,4 +3871,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "e2bc3d1f40992b0deea3ff846f749568671dabca87bda72641650c015d323ee8" +content-hash = "dd26b001fb6a930e0f4eb90e37f11b2ea178b5f06a1d2213ef43d3cd53aca212" diff --git a/api/pyproject.toml b/api/pyproject.toml index bfb6ebeb4..78304c88f 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -46,7 +46,7 @@ djangorestframework = "==3.14.0" drf-spectacular = "==0.25.1" markdown = "==3.4.4" persisting-theory = "==1.0" -psycopg2 = "==2.9.7" +psycopg2 = "==2.9.8" redis = "==4.5.5" # Django LDAP From 2f1f7bcf950909880f00df1c9ce9babe6c129a54 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Sep 2023 10:04:19 +0000 Subject: [PATCH 007/371] chore: update pre-commit hook pre-commit/mirrors-prettier to v3.0.3 Part-of: --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3dad8c763..6226115a5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,7 @@ repos: - id: flake8 - repo: https://github.com/pre-commit/mirrors-prettier - rev: v3.0.2 + rev: v3.0.3 hooks: - id: prettier files: \.(md|yml|yaml|json)$ From eae91ab016ed8b6fc29df7b3ddf86f8056489b9b Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Fri, 29 Sep 2023 11:15:08 +0200 Subject: [PATCH 008/371] fix: Remove dangling dependency howler Part-of: --- changes/changelog.d/howler.bugfix | 1 + front/package.json | 2 -- front/yarn.lock | 10 ---------- 3 files changed, 1 insertion(+), 12 deletions(-) create mode 100644 changes/changelog.d/howler.bugfix diff --git a/changes/changelog.d/howler.bugfix b/changes/changelog.d/howler.bugfix new file mode 100644 index 000000000..718bc48e1 --- /dev/null +++ b/changes/changelog.d/howler.bugfix @@ -0,0 +1 @@ +Remove dangling dependency howler diff --git a/front/package.json b/front/package.json index b7d9731c1..32edf383e 100644 --- a/front/package.json +++ b/front/package.json @@ -32,7 +32,6 @@ "dompurify": "2.4.7", "focus-trap": "7.2.0", "fomantic-ui-css": "2.9.3", - "howler": "2.2.3", "idb-keyval": "6.2.1", "js-logger": "1.6.1", "lodash-es": "4.17.21", @@ -61,7 +60,6 @@ "@intlify/unplugin-vue-i18n": "0.8.2", "@types/diff": "5.0.2", "@types/dompurify": "2.4.0", - "@types/howler": "2.2.7", "@types/jquery": "3.5.16", "@types/lodash-es": "4.17.6", "@types/moxios": "0.4.15", diff --git a/front/yarn.lock b/front/yarn.lock index 771a908a4..611ef7601 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1671,11 +1671,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/howler@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/howler/-/howler-2.2.7.tgz#5acfbed57f9e1d99b8dabe1b824729e1c1ea1fae" - integrity sha512-PEZldwZqJJw1PWRTpupyC7ajVTZA8aHd8nB/Y0n6zRZi5u8ktYDntsHj13ltEiBRqWwF06pASxBEvCTxniG8eA== - "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -4377,11 +4372,6 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -howler@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/howler/-/howler-2.2.3.tgz#a2eff9b08b586798e7a2ee17a602a90df28715da" - integrity sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg== - html-encoding-sniffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" From ccec8288ef43ed5077f09bd92ab4e2cfff9c47ce Mon Sep 17 00:00:00 2001 From: alextprog Date: Mon, 29 May 2023 12:08:09 -0500 Subject: [PATCH 009/371] fix: Make Artist ordering by name case insensitive Part-of: --- api/funkwhale_api/common/filters.py | 17 +++++++++++++++++ api/funkwhale_api/music/filters.py | 2 +- api/tests/music/test_filters.py | 23 +++++++++++++++++++++++ changes/changelog.d/1803.bugfix | 1 + 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/1803.bugfix diff --git a/api/funkwhale_api/common/filters.py b/api/funkwhale_api/common/filters.py index 6fb4b1b45..65f5e008d 100644 --- a/api/funkwhale_api/common/filters.py +++ b/api/funkwhale_api/common/filters.py @@ -1,5 +1,6 @@ from django import forms from django.db.models import Q +from django.db.models.functions import Lower from django_filters import rest_framework as filters from django_filters import widgets from drf_spectacular.utils import extend_schema_field @@ -239,3 +240,19 @@ class ActorScopeFilter(filters.CharFilter): raise EmptyQuerySet() return Q(**{self.actor_field: actor}) + + +class CaseInsensitiveNameOrderingFilter(filters.OrderingFilter): + def filter(self, qs, value): + order_by = [] + + if value is None: + return qs + + for param in value: + if param == "name": + order_by.append(Lower("name")) + else: + order_by.append(self.get_ordering_value(param)) + + return qs.order_by(*order_by) diff --git a/api/funkwhale_api/music/filters.py b/api/funkwhale_api/music/filters.py index 0fc18bd8a..94fa15e14 100644 --- a/api/funkwhale_api/music/filters.py +++ b/api/funkwhale_api/music/filters.py @@ -104,7 +104,7 @@ class ArtistFilter( distinct=True, library_field="tracks__uploads__library", ) - ordering = django_filters.OrderingFilter( + ordering = common_filters.CaseInsensitiveNameOrderingFilter( fields=( ("id", "id"), ("name", "name"), diff --git a/api/tests/music/test_filters.py b/api/tests/music/test_filters.py index 4879b6f38..54fc60072 100644 --- a/api/tests/music/test_filters.py +++ b/api/tests/music/test_filters.py @@ -3,9 +3,32 @@ import pytest from funkwhale_api.music import filters, models +def test_artist_filter_ordering(factories, mocker): + # Lista de prueba + artist1 = factories["music.Artist"](name="Anita Muller") + artist2 = factories["music.Artist"](name="Jane Smith") + artist3 = factories["music.Artist"](name="Adam Johnson") + artist4 = factories["music.Artist"](name="anita iux") + + qs = models.Artist.objects.all() + + cf = factories["moderation.UserFilter"](for_artist=True) + + # Request con ordenamiento + filterset = filters.ArtistFilter( + {"ordering": "name"}, request=mocker.Mock(user=cf.user), queryset=qs + ) + + expected_order = [artist3.name, artist4.name, artist1.name, artist2.name] + actual_order = list(filterset.qs.values_list("name", flat=True)) + + assert actual_order == expected_order + + def test_album_filter_hidden(factories, mocker, queryset_equal_list): factories["music.Album"]() cf = factories["moderation.UserFilter"](for_artist=True) + hidden_album = factories["music.Album"](artist=cf.target_artist) qs = models.Album.objects.all() diff --git a/changes/changelog.d/1803.bugfix b/changes/changelog.d/1803.bugfix new file mode 100644 index 000000000..db04a4fb9 --- /dev/null +++ b/changes/changelog.d/1803.bugfix @@ -0,0 +1 @@ +Make Artist ordering by name case insensitive From 973ba979800cd9fdfa56fab7960b37b0cbcff0c6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Oct 2023 09:05:13 +0000 Subject: [PATCH 010/371] chore(api): update dependency aiohttp to v3.8.6 Part-of: --- api/poetry.lock | 178 ++++++++++++++++++++++----------------------- api/pyproject.toml | 2 +- 2 files changed, 90 insertions(+), 90 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 557908f94..fee7c688b 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2,98 +2,98 @@ [[package]] name = "aiohttp" -version = "3.8.5" +version = "3.8.6" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.6" files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, + {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, + {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, + {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, + {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, + {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, + {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, + {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, + {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, + {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, + {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, ] [package.dependencies] @@ -3871,4 +3871,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "dd26b001fb6a930e0f4eb90e37f11b2ea178b5f06a1d2213ef43d3cd53aca212" +content-hash = "810bb4c39de1b28775f4bea3172850d37abe7ce3ea026c526d1ec10405501682" diff --git a/api/pyproject.toml b/api/pyproject.toml index 78304c88f..ea6ce316b 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -66,7 +66,7 @@ gunicorn = "==20.1.0" uvicorn = { version = "==0.20.0", extras = ["standard"] } # Libs -aiohttp = "==3.8.5" +aiohttp = "==3.8.6" arrow = "==1.2.3" bleach = "==5.0.1" boto3 = "==1.26.161" From ef827f22e54d98303470b0cf39c7054b73dd5a11 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Oct 2023 12:05:22 +0000 Subject: [PATCH 011/371] chore(api): update dependency django to v3.2.22 Part-of: --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index fee7c688b..e91c7316b 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1015,13 +1015,13 @@ with-social = ["django-allauth (>=0.40.0,<0.53.0)"] [[package]] name = "django" -version = "3.2.21" +version = "3.2.22" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." optional = false python-versions = ">=3.6" files = [ - {file = "Django-3.2.21-py3-none-any.whl", hash = "sha256:d31b06c58aa2cd73998ca5966bc3001243d3c4e77ee2d0c479bced124765fd99"}, - {file = "Django-3.2.21.tar.gz", hash = "sha256:a5de4c484e7b7418e6d3e52a5b8794f0e6b9f9e4ce3c037018cf1c489fa87f3c"}, + {file = "Django-3.2.22-py3-none-any.whl", hash = "sha256:c5e7b668025a6e06cad9ba6d4de1fd1a21212acebb51ea34abb400c6e4d33430"}, + {file = "Django-3.2.22.tar.gz", hash = "sha256:83b6d66b06e484807d778263fdc7f9186d4dc1862fcfa6507830446ac6b060ba"}, ] [package.dependencies] @@ -3871,4 +3871,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "810bb4c39de1b28775f4bea3172850d37abe7ce3ea026c526d1ec10405501682" +content-hash = "a56b24fa2ad66df5f62aa1987e9c6a5a66cab37e2967a2e3347bc5a49f3a7123" diff --git a/api/pyproject.toml b/api/pyproject.toml index ea6ce316b..8470c51c1 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -29,7 +29,7 @@ python = "^3.7" # Django dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } -django = "==3.2.21" +django = "==3.2.22" django-allauth = "==0.42.0" django-cache-memoize = "0.1.10" django-cacheops = "==6.1" From ab7fe55b5105df902617751eb98ce9fb8d0b98b3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Oct 2023 12:35:13 +0000 Subject: [PATCH 012/371] chore(api): update dependency psycopg2 to v2.9.9 Part-of: --- api/poetry.lock | 28 ++++++++++++++-------------- api/pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index e91c7316b..1b3a06174 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2430,22 +2430,22 @@ wcwidth = "*" [[package]] name = "psycopg2" -version = "2.9.8" +version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "psycopg2-2.9.8-cp310-cp310-win32.whl", hash = "sha256:2f8594f92bbb5d8b59ffec04e2686c416401e2d4297de1193f8e75235937e71d"}, - {file = "psycopg2-2.9.8-cp310-cp310-win_amd64.whl", hash = "sha256:f9ecbf504c4eaff90139d5c9b95d47275f2b2651e14eba56392b4041fbf4c2b3"}, - {file = "psycopg2-2.9.8-cp311-cp311-win32.whl", hash = "sha256:65f81e72136d8b9ac8abf5206938d60f50da424149a43b6073f1546063c0565e"}, - {file = "psycopg2-2.9.8-cp311-cp311-win_amd64.whl", hash = "sha256:f7e62095d749359b7854143843f27edd7dccfcd3e1d833b880562aa5702d92b0"}, - {file = "psycopg2-2.9.8-cp37-cp37m-win32.whl", hash = "sha256:81b21424023a290a40884c7f8b0093ba6465b59bd785c18f757e76945f65594c"}, - {file = "psycopg2-2.9.8-cp37-cp37m-win_amd64.whl", hash = "sha256:67c2f32f3aba79afb15799575e77ee2db6b46b8acf943c21d34d02d4e1041d50"}, - {file = "psycopg2-2.9.8-cp38-cp38-win32.whl", hash = "sha256:287a64ef168ef7fb9f382964705ff664b342bfff47e7242bf0a04ef203269dd5"}, - {file = "psycopg2-2.9.8-cp38-cp38-win_amd64.whl", hash = "sha256:dcde3cad4920e29e74bf4e76c072649764914facb2069e6b7fa1ddbebcd49e9f"}, - {file = "psycopg2-2.9.8-cp39-cp39-win32.whl", hash = "sha256:d4ad050ea50a16731d219c3a85e8f2debf49415a070f0b8331ccc96c81700d9b"}, - {file = "psycopg2-2.9.8-cp39-cp39-win_amd64.whl", hash = "sha256:d39bb3959788b2c9d7bf5ff762e29f436172b241cd7b47529baac77746fd7918"}, - {file = "psycopg2-2.9.8.tar.gz", hash = "sha256:3da6488042a53b50933244085f3f91803f1b7271f970f3e5536efa69314f6a49"}, + {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"}, + {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, + {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, + {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, + {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, + {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, + {file = "psycopg2-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:bac58c024c9922c23550af2a581998624d6e02350f4ae9c5f0bc642c633a2d5e"}, + {file = "psycopg2-2.9.9-cp39-cp39-win32.whl", hash = "sha256:c92811b2d4c9b6ea0285942b2e7cac98a59e166d59c588fe5cfe1eda58e72d59"}, + {file = "psycopg2-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913"}, + {file = "psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156"}, ] [[package]] @@ -3871,4 +3871,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "a56b24fa2ad66df5f62aa1987e9c6a5a66cab37e2967a2e3347bc5a49f3a7123" +content-hash = "f070f0748a2bce1b56c3cd80de2734a7eeb4c4c5b658771019363e7405a2e7aa" diff --git a/api/pyproject.toml b/api/pyproject.toml index 8470c51c1..c7776187a 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -46,7 +46,7 @@ djangorestframework = "==3.14.0" drf-spectacular = "==0.25.1" markdown = "==3.4.4" persisting-theory = "==1.0" -psycopg2 = "==2.9.8" +psycopg2 = "==2.9.9" redis = "==4.5.5" # Django LDAP From 9d23d10e230538629fc6e24756fd16ed3c08f75a Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 12 Oct 2023 15:55:59 +0000 Subject: [PATCH 013/371] Adopt Gitpod to architecture changes --- .gitpod.yml | 3 +- .gitpod/docker-compose.yml | 5 +- .../common/management/commands/gitpod.py | 17 +- api/poetry.lock | 1102 +++++++++-------- 4 files changed, 570 insertions(+), 557 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index b634d541c..9b831f29a 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -19,6 +19,7 @@ tasks: gp ports await 5432 poetry run funkwhale-manage migrate + poetry run funkwhale-manage fw users create --superuser --username gitpod --password funkwhale --email test@example.org poetry run funkwhale-manage gitpod init command: | echo "MEDIA_URL=`gp url 8000`/media/" >> ../.gitpod/.env @@ -62,7 +63,7 @@ tasks: echo -e " \u1b[34mā£€ā €ā¢€ā”€ā¢€ā£€\u1b[0mā ¹ā ‡\u1b[34mā£€ā”€ā¢€ā”€ā €ā£€ \u1b[0mTo sign in to the superuser account," echo -e " \u1b[34mā¢»ā£‡ā ˜ā£§ā”ˆā »ā ¶ā ¶ā Ÿā¢ā£¾ā ƒā£øā”Ÿ \u1b[0mplease use these credentials:" echo -e " \u1b[34mā €ā »ā£¦ā”ˆā »ā ¶ā£¶ā£¶ā ¶ā Ÿā¢ā£“ā Ÿā €" - echo -e " \u1b[34mā €ā €ā ˆā »ā ·ā£¦ā£¤ā£¤ā£“ā ¾ā Ÿā ā €ā € gitpod\u1b[0m:\u1b[34mgitpod" + echo -e " \u1b[34mā €ā €ā ˆā »ā ·ā£¦ā£¤ā£¤ā£“ā ¾ā Ÿā ā €ā € gitpod\u1b[0m:\u1b[34mfunkwhale" echo "" ports: diff --git a/.gitpod/docker-compose.yml b/.gitpod/docker-compose.yml index 9b764307d..fed79498d 100644 --- a/.gitpod/docker-compose.yml +++ b/.gitpod/docker-compose.yml @@ -18,7 +18,6 @@ services: - 6379:6379 nginx: - command: /entrypoint.sh env_file: - ./.env image: nginx @@ -33,11 +32,11 @@ services: - "FUNKWHALE_FRONT_IP=host.docker.internal" - "FUNKWHALE_FRONT_PORT=8080" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}" + - "FUNKWHALE_PROTOCOL=https" volumes: - ../data/media:/protected/media:ro - ../data/music:/music:ro - ../data/staticfiles:/staticfiles:ro - ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - - ../docker/nginx/conf.dev:/etc/nginx/nginx.conf.template:ro - - ../docker/nginx/entrypoint.sh:/entrypoint.sh:ro + - ../docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - ../front:/frontend:ro diff --git a/api/funkwhale_api/common/management/commands/gitpod.py b/api/funkwhale_api/common/management/commands/gitpod.py index 78d8c9ddb..3887c7f3c 100644 --- a/api/funkwhale_api/common/management/commands/gitpod.py +++ b/api/funkwhale_api/common/management/commands/gitpod.py @@ -36,22 +36,7 @@ class Command(BaseCommand): self.stdout.write("") def init(self): - try: - user = User.objects.get(username="gitpod") - except Exception: - call_command( - "createsuperuser", - username="gitpod", - email="gitpod@example.com", - no_input=False, - ) - user = User.objects.get(username="gitpod") - - user.set_password("gitpod") - if not user.actor: - user.create_actor() - - user.save() + user = User.objects.get(username="gitpod") # Allow anonymous access preferences.set("common__api_authentication_required", False) diff --git a/api/poetry.lock b/api/poetry.lock index e61ff25cd..59da9d507 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -215,13 +215,13 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "astroid" -version = "2.15.6" +version = "2.15.8" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.7.2" files = [ - {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, - {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] [package.dependencies] @@ -552,75 +552,63 @@ files = [ [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -669,86 +657,101 @@ tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, ] [[package]] @@ -1705,21 +1708,21 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"}, + {file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "incremental" @@ -1829,13 +1832,13 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] [[package]] name = "jedi" -version = "0.19.0" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] @@ -1844,7 +1847,7 @@ parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jmespath" @@ -1859,13 +1862,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.0" +version = "4.19.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "jsonschema-4.19.1-py3-none-any.whl", hash = "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e"}, + {file = "jsonschema-4.19.1.tar.gz", hash = "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf"}, ] [package.dependencies] @@ -2001,7 +2004,7 @@ regex = "*" type = "git" url = "https://github.com/metabrainz/listenbrainz-matching-tools.git" reference = "main" -resolved_reference = "5de037ab3e35f3d45d2c6b2b458a818042dd4b12" +resolved_reference = "5c0d9c1f2ef39bbb0b1f4892334b306ac2700cd9" [[package]] name = "lxml" @@ -2166,74 +2169,67 @@ files = [ [[package]] name = "msgpack" -version = "1.0.5" +version = "1.0.7" description = "MessagePack serializer" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, - {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, - {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, - {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, - {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, - {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, - {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, - {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, - {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, - {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, - {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, - {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, - {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, - {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, - {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, - {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681"}, + {file = "msgpack-1.0.7-cp310-cp310-win32.whl", hash = "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9"}, + {file = "msgpack-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e"}, + {file = "msgpack-1.0.7-cp311-cp311-win32.whl", hash = "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1"}, + {file = "msgpack-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5"}, + {file = "msgpack-1.0.7-cp312-cp312-win32.whl", hash = "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9"}, + {file = "msgpack-1.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b6ccc0c85916998d788b295765ea0e9cb9aac7e4a8ed71d12e7d8ac31c23c95"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:235a31ec7db685f5c82233bddf9858748b89b8119bf4538d514536c485c15fe0"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cab3db8bab4b7e635c1c97270d7a4b2a90c070b33cbc00c99ef3f9be03d3e1f7"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bfdd914e55e0d2c9e1526de210f6fe8ffe9705f2b1dfcc4aecc92a4cb4b533d"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36e17c4592231a7dbd2ed09027823ab295d2791b3b1efb2aee874b10548b7524"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38949d30b11ae5f95c3c91917ee7a6b239f5ec276f271f28638dec9156f82cfc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ff1d0899f104f3921d94579a5638847f783c9b04f2d5f229392ca77fba5b82fc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dc43f1ec66eb8440567186ae2f8c447d91e0372d793dfe8c222aec857b81a8cf"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dd632777ff3beaaf629f1ab4396caf7ba0bdd075d948a69460d13d44357aca4c"}, + {file = "msgpack-1.0.7-cp38-cp38-win32.whl", hash = "sha256:4e71bc4416de195d6e9b4ee93ad3f2f6b2ce11d042b4d7a7ee00bbe0358bd0c2"}, + {file = "msgpack-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:8f5b234f567cf76ee489502ceb7165c2a5cecec081db2b37e35332b537f8157c"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f"}, + {file = "msgpack-1.0.7-cp39-cp39-win32.whl", hash = "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad"}, + {file = "msgpack-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3"}, + {file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"}, ] [[package]] @@ -2370,13 +2366,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -2528,13 +2524,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] @@ -2603,71 +2599,80 @@ files = [ [[package]] name = "psycopg2-binary" -version = "2.9.7" +version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, + {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win32.whl", hash = "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win32.whl", hash = "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, ] [[package]] @@ -2884,6 +2889,20 @@ cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] test = ["flaky", "pretend", "pytest (>=3.0.1)"] +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pytest" version = "7.2.2" @@ -3195,99 +3214,99 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2023.8.8" +version = "2023.10.3" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, - {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, - {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, - {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, - {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, - {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, - {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, - {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, - {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, - {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, - {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, - {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, - {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, - {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, - {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, - {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, - {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, ] [[package]] @@ -3365,108 +3384,110 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rpds-py" -version = "0.10.2" +version = "0.10.6" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.10.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c"}, - {file = "rpds_py-0.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08"}, - {file = "rpds_py-0.10.2-cp310-none-win32.whl", hash = "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a"}, - {file = "rpds_py-0.10.2-cp310-none-win_amd64.whl", hash = "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2"}, - {file = "rpds_py-0.10.2-cp311-none-win32.whl", hash = "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214"}, - {file = "rpds_py-0.10.2-cp311-none-win_amd64.whl", hash = "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab"}, - {file = "rpds_py-0.10.2-cp38-none-win32.whl", hash = "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a"}, - {file = "rpds_py-0.10.2-cp38-none-win_amd64.whl", hash = "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09"}, - {file = "rpds_py-0.10.2-cp39-none-win32.whl", hash = "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968"}, - {file = "rpds_py-0.10.2-cp39-none-win_amd64.whl", hash = "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1"}, - {file = "rpds_py-0.10.2.tar.gz", hash = "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6"}, + {file = "rpds_py-0.10.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d"}, + {file = "rpds_py-0.10.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9"}, + {file = "rpds_py-0.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063"}, + {file = "rpds_py-0.10.6-cp310-none-win32.whl", hash = "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad"}, + {file = "rpds_py-0.10.6-cp310-none-win_amd64.whl", hash = "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069"}, + {file = "rpds_py-0.10.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80"}, + {file = "rpds_py-0.10.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066"}, + {file = "rpds_py-0.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281"}, + {file = "rpds_py-0.10.6-cp311-none-win32.whl", hash = "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116"}, + {file = "rpds_py-0.10.6-cp311-none-win_amd64.whl", hash = "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6"}, + {file = "rpds_py-0.10.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9"}, + {file = "rpds_py-0.10.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d"}, + {file = "rpds_py-0.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586"}, + {file = "rpds_py-0.10.6-cp312-none-win32.whl", hash = "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02"}, + {file = "rpds_py-0.10.6-cp312-none-win_amd64.whl", hash = "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53"}, + {file = "rpds_py-0.10.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13"}, + {file = "rpds_py-0.10.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b"}, + {file = "rpds_py-0.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801"}, + {file = "rpds_py-0.10.6-cp38-none-win32.whl", hash = "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1"}, + {file = "rpds_py-0.10.6-cp38-none-win_amd64.whl", hash = "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5"}, + {file = "rpds_py-0.10.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647"}, + {file = "rpds_py-0.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3"}, + {file = "rpds_py-0.10.6-cp39-none-win32.whl", hash = "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d"}, + {file = "rpds_py-0.10.6-cp39-none-win_amd64.whl", hash = "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487"}, + {file = "rpds_py-0.10.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977"}, + {file = "rpds_py-0.10.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403"}, + {file = "rpds_py-0.10.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971"}, + {file = "rpds_py-0.10.6.tar.gz", hash = "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50"}, ] [[package]] @@ -3553,13 +3574,13 @@ tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] name = "setuptools" -version = "68.2.1" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.1-py3-none-any.whl", hash = "sha256:eff96148eb336377ab11beee0c73ed84f1709a40c0b870298b0d058828761bae"}, - {file = "setuptools-68.2.1.tar.gz", hash = "sha256:56ee14884fd8d0cd015411f4a13f40b4356775a0aefd9ebc1d3bfb9a1acb32f1"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] @@ -3675,18 +3696,18 @@ files = [ [[package]] name = "traitlets" -version = "5.9.0" +version = "5.11.2" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.11.2-py3-none-any.whl", hash = "sha256:98277f247f18b2c5cabaf4af369187754f4fb0e85911d473f72329db8a7f4fae"}, + {file = "traitlets-5.11.2.tar.gz", hash = "sha256:7564b5bf8d38c40fa45498072bf4dc5e8346eb087bbf1e2ae2d8774f6a0f078e"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "troi" @@ -3703,6 +3724,7 @@ countryinfo = ">=0.1.2" more_itertools = "*" psycopg2-binary = ">=2.9.3" pylistenbrainz = {git = "https://github.com/metabrainz/pylistenbrainz.git", rev = "v0.5.2"} +pyparsing = "*" python-dateutil = ">=2.8.2" requests = "*" spotipy = ">=2.22.1" @@ -3712,7 +3734,7 @@ ujson = ">=5.4.0" type = "git" url = "https://github.com/metabrainz/troi-recommendation-playground.git" reference = "main" -resolved_reference = "3c424ea4d7057ecc68d3b4b5a7036cf61bec816e" +resolved_reference = "661232b05cf4230194cc51cd8112f27af516d4cf" [[package]] name = "twisted" @@ -3813,13 +3835,13 @@ requests = "*" [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] @@ -3931,17 +3953,17 @@ files = [ [[package]] name = "urllib3" -version = "1.26.16" +version = "1.26.17" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"}, + {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] @@ -4101,13 +4123,13 @@ anyio = ">=3.0.0" [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.8" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, ] [[package]] @@ -4373,63 +4395,69 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [[package]] name = "zope-interface" -version = "6.0" +version = "6.1" description = "Interfaces for Python" optional = false python-versions = ">=3.7" files = [ - {file = "zope.interface-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990"}, - {file = "zope.interface-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f"}, - {file = "zope.interface-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518"}, - {file = "zope.interface-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb"}, - {file = "zope.interface-6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc"}, - {file = "zope.interface-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f"}, - {file = "zope.interface-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2"}, - {file = "zope.interface-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5"}, - {file = "zope.interface-6.0.tar.gz", hash = "sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"}, + {file = "zope.interface-6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb"}, + {file = "zope.interface-6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe81def9cf3e46f16ce01d9bfd8bea595e06505e51b7baf45115c77352675fd"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dc998f6de015723196a904045e5a2217f3590b62ea31990672e31fbc5370b41"}, + {file = "zope.interface-6.1-cp310-cp310-win_amd64.whl", hash = "sha256:239a4a08525c080ff833560171d23b249f7f4d17fcbf9316ef4159f44997616f"}, + {file = "zope.interface-6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1"}, + {file = "zope.interface-6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de"}, + {file = "zope.interface-6.1-cp311-cp311-win_amd64.whl", hash = "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1"}, + {file = "zope.interface-6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8bb9c990ca9027b4214fa543fd4025818dc95f8b7abce79d61dc8a2112b561a"}, + {file = "zope.interface-6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b51b64432eed4c0744241e9ce5c70dcfecac866dff720e746d0a9c82f371dfa7"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa6fd016e9644406d0a61313e50348c706e911dca29736a3266fc9e28ec4ca6d"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e30506bcb03de8983f78884807e4fd95d8db6e65b69257eea05d13d519b83ac0"}, + {file = "zope.interface-6.1-cp312-cp312-win_amd64.whl", hash = "sha256:e33e86fd65f369f10608b08729c8f1c92ec7e0e485964670b4d2633a4812d36b"}, + {file = "zope.interface-6.1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:2f8d89721834524a813f37fa174bac074ec3d179858e4ad1b7efd4401f8ac45d"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef43ee91c193f827e49599e824385ec7c7f3cd152d74cb1dfe02cb135f264d83"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e441e8b7d587af0414d25e8d05e27040d78581388eed4c54c30c0c91aad3a379"}, + {file = "zope.interface-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f89b28772fc2562ed9ad871c865f5320ef761a7fcc188a935e21fe8b31a38ca9"}, + {file = "zope.interface-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70d2cef1bf529bff41559be2de9d44d47b002f65e17f43c73ddefc92f32bf00f"}, + {file = "zope.interface-6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ad54ed57bdfa3254d23ae04a4b1ce405954969c1b0550cc2d1d2990e8b439de1"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef467d86d3cfde8b39ea1b35090208b0447caaabd38405420830f7fd85fbdd56"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6af47f10cfc54c2ba2d825220f180cc1e2d4914d783d6fc0cd93d43d7bc1c78b"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9559138690e1bd4ea6cd0954d22d1e9251e8025ce9ede5d0af0ceae4a401e43"}, + {file = "zope.interface-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:964a7af27379ff4357dad1256d9f215047e70e93009e532d36dcb8909036033d"}, + {file = "zope.interface-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:387545206c56b0315fbadb0431d5129c797f92dc59e276b3ce82db07ac1c6179"}, + {file = "zope.interface-6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57d0a8ce40ce440f96a2c77824ee94bf0d0925e6089df7366c2272ccefcb7941"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ebc4d34e7620c4f0da7bf162c81978fce0ea820e4fa1e8fc40ee763839805f3"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a804abc126b33824a44a7aa94f06cd211a18bbf31898ba04bd0924fbe9d282d"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac"}, + {file = "zope.interface-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40"}, + {file = "zope.interface-6.1.tar.gz", hash = "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"}, ] [package.dependencies] setuptools = "*" [package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface"] +docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] From 40cc9afb65b6e6ae3a39b5d26d79e83cff25ab1e Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Tue, 10 Oct 2023 15:24:53 +0200 Subject: [PATCH 014/371] test: Run tests with python 3.12 Part-of: --- .gitlab-ci.yml | 2 +- changes/changelog.d/python-312.feature | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/python-312.feature diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b51f56dfc..42d806bb7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -236,7 +236,7 @@ test_api: image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION parallel: matrix: - - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11"] + - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12"] services: - name: postgres:15-alpine command: diff --git a/changes/changelog.d/python-312.feature b/changes/changelog.d/python-312.feature new file mode 100644 index 000000000..045006abd --- /dev/null +++ b/changes/changelog.d/python-312.feature @@ -0,0 +1 @@ +Add support for Python 3.12 From 5eda0def097b0e2a4db272d7f756196ba73d8aa0 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Tue, 12 Sep 2023 12:55:38 +0200 Subject: [PATCH 015/371] test(s3): Verify the construction of audio file urls with custom s3 domain Part-of: --- api/tests/music/test_utils.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py index 95c364fc2..7b4ab8e74 100644 --- a/api/tests/music/test_utils.py +++ b/api/tests/music/test_utils.py @@ -131,3 +131,13 @@ def test_transcode_file(name, expected): result = {k: round(v) for k, v in utils.get_audio_file_data(f).items()} assert result == expected + + +def test_custom_s3_domain(factories, settings): + """See #2220""" + settings.DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIS3Boto3Storage" + settings.AWS_S3_CUSTOM_DOMAIN = "my.custom.domain.tld" + f = factories["music.Upload"].build(audio_file__filename="test.mp3") + print(f.audio_file.url) + + assert f.audio_file.url.startswith("https://") From c0d6c7ee7478fc09cb9123691f09fb24f6abec6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 9 Oct 2023 11:05:03 +0200 Subject: [PATCH 016/371] feat(docs): Add collections spec Part-of: --- docs/index.md | 1 + docs/specs/collections/index.md | 309 ++++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 docs/specs/collections/index.md diff --git a/docs/index.md b/docs/index.md index 52a9331fa..6c8a73f7c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -101,6 +101,7 @@ caption: Specifications hidden: true --- +specs/collections/index specs/nodeinfo21/index specs/offline-mode/index specs/quality-filter/index diff --git a/docs/specs/collections/index.md b/docs/specs/collections/index.md new file mode 100644 index 000000000..c9d8c30fd --- /dev/null +++ b/docs/specs/collections/index.md @@ -0,0 +1,309 @@ +# Collections + +## The issue + +One of Funkwhale's primary use-cases is content management. Users expect to be able to upload, manage, and share their content easily using the Funkwhale web app or other apps that use the Funkwhale API. + +We have identified the following key focus areas: + +1. Users need to be able to share content easily +2. Users need to be able to follow collections of content easily +3. Users should have the option to upload content **without** needing to organize it explicitly +4. Users need to be able to easily move content between different collections +5. Users need to be able to assign content to multiple collections +6. Users need to be able to see all of their content and how it is organized within apps + +## Proposed solution + +To address the issues above we propose a new management solution called **Collections**. The rationale behind this solution can be found in our conversations [in the forum](https://forum.funkwhale.audio/d/214-whats-wrong-with-libraries-and-a-path-to-fix-them) and [online meeting notes](https://pad.funkwhale.audio/zs-SKbVgROapjv56lsWWtw?view). + +A collection is conceptually a container of content. Users can associate content with multiple collections and share collections with other users. When a user follows a collection, they have access to its content. + +Collections resolve the following issues: + +1. Users can organize their content exactly how they want to +2. Users can associate content to multiple collections or no collections at all +3. Users can share individual objects (tracks, albums, artists, playlists) using **sharing links** +4. Users can easily view all collections they have created and followed + +This specification outlines the behaviors and workflows used in collections. + +## Terminology + +**Collections** enable users to group content **they have uploaded**. Users can create as many collections as they want and can share collections with other users. Users cannot add remote content to their own collections as this content may be revoked by other users and this would break the user experience. + +The **library** is the container that holds all content a user has access to. This includes all content the user uploads and follows. The library can contain as many **collections** as the user wants to create. + +## Information architecture + +This [diagram](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=f4f2aac0-0f5e-11ed-adb9-fff9e854a67c§ion=interactions&index=0&share-id=4a268010-5164-11ed-b91a-c19cdb5a453b) demonstrates how the user's content library is organized on a conceptual level. + +## Feature behavior + +When a user uploads new content to Funkwhale, the uploaded file is associated to track, album, and artist metadata. The upload is associated to an automatically created upload collection that is invisible to the user. The user can select individual items or a list of items and assign them to one or more collections. + +In addition to user collections, we propose the following **automatic** collections: + +Uploaded content +: A collection containing all content the user uploads + +Followed content +: A collection containing all content the user has followed in external collections + +Private content +: A collection containing all content the user has not shared with anyone + +Public content +: A collection containing all content the user has shared publicly + +Favorites +: A collection containing all content the user has favorited + +These collections are managed by Funkwhale and can't be modified directly by the user. The user can use these collections get an overview of what content is local and what is being shared. + +### Backend + +A collection is stored as a model in the database. This model contains the relevant identifying information for the collection, including: + +- The name +- The UUID +- The owning actor +- The visibility level + +Uploaded items can be linked to collections using a `ManytoMany` relationship. + +```{mermaid} +classDiagram + class Upload { + -file : URI + -ManytoMany : Collections + } + class Collection 1{ + -id : UUID + -name : String + -visibility : Enum + -owner : Actor + } + class Collection 2{ + -id : UUID + -name : String + -visibility : Enum + -owner : Actor + } + class Collection 3{ + -id : UUID + -name : String + -visibility : Enum + -owner : Actor + } + class Actor 1{ + -fid : URI + -id : UUID + -name: String + } + class Actor 2{ + -fid : URI + -id : UUID + -name: String + } + Upload -- Collection 1 : Optional + Upload -- Collection 2 : Optional + Upload -- Collection 3 : Optional + Collection 1 -- Actor 1 : Required + Collection 2 -- Actor 1 : Required + Collection 3 -- Actor 2 : Required +``` + +#### API Endpoints + +Funkwhale-compatible apps can communicate with the Funkwhale API to retrieve and modify collection data. The following actions must be facilitated by API endpoints: + +- Create a new collection +- Delete a collection +- Modify a collection's details (description, name, visibility level) +- Add uploads to a collection +- Remove uploads from a collection +- List collections +- List content contained in collections + +#### Sharing mechanism + +Users must be able to share collections with other users using sharing links. Access to content contained within the collection must be restricted to users who have the link. + +Users must be able to share any objects they want to (tracks, albums, artists, playlists). On the backend, this mechanism should do the following: + +1. Create a new collection +2. Associate the selected content to the collection +3. Return the sharing link for the collection + +This collection should not be visible to the end user. + +### Frontend + +In the frontend, the user has the ability to create, modify, and delete collections stored in their library. The user can assign content to collections during the upload process or by using the object's **context menu** after upload. + +When the user adds a containing object such as an artist discography, album, or playlist, all tracks **currently associated** with the object are added. The collection does not update if new content is associated to the object. + +#### Viewing collections + +The content of each collection can be viewed in a **Collection page**. This page offers an overview of content in the collection, organized by content type (track, album, artist, playlist). This page can be used to highlight content such as recently favorited tracks or a variable random selection. + +Users can see all of their collections in the **User library page**. This page clearly shows users all of their collections as well as information such whether the collections are shared or private. + +## Workflows + +In this section we detail the workflows behind some of the actions users are able to take using collections. + +### Uploading content + +The user should be able to choose exactly where their content should go **during the upload process**. They should be able to choose to associate the upload with multiple collections or no collections. This process is outlined in the flowchart below: + +```{mermaid} +flowchart TD + user[Authenticated user] --> upload[Select upload button] + upload --> destination{Is the destination \nalready selected?} --> |no| select[User chooses collections\nor library] + destination --> |yes| choose[User chooses the\nfiles to upload] + select --> choose + choose --> verify[Funkwhale verifies\nmetada] --> correct{Is the metadata\nvalid?} --> |no| edit[User edits metadata\nin Picard] --> verify + correct --> |yes| finish([Upload completes]) +``` + +### Deleting content + +Users must be able to delete content from their own library easily at any time. Deleting the uploaded content must remove it from any associated collections. + +### Creating a collection + +The user should be able to create a collection in one of two ways: + +1. By selecting a page that contains collections and selecting the "Add collection" option +2. By selecting the "Create new collection" from an object's context menu + +In each case, the user should be given a form to fill out with information including: + +- The collection name +- The collection description +- The collection's visibility level + +### Deleting a collection + +If a user decides to delete a collection it **must not** delete the content contained in the collection. When the user selects delete a warning must communicate the following: + +- The collection will no longer be available in the user library page or search results +- Users with whom the collection is currently shared will lose access to the collection's content + +### Adding content to a collection + +Users should be able to select collections during the upload process to add the content immediately. + +Users should also be able to select an object's context menu and choose collections from the "Organize and share" submenu. Upon ticking the checkbox, an API call should fire to associate the upload(s) with the collection(s). + +### Removing content from a collection + +Users should be able to remove content from collections by visiting the collection's page, selecting the items, and selecting "Remove from collection". + +Users should also be able to select an object's context menu and choose collections from the "Organize and share" submenu. Upon deselecting the checkbox, an API call should fire to break the association between the upload(s) and the collection(s). + +### Sharing a collection + +Users must be able to assign a visibility level to their collections. This brokers access to the content for other users and is split up as follows: + +- "Private": only the owner and direct followers can access the content. Followers require explicit approval from the owner to access content +- "Local": only the owner and authenticated users on the same domain can access the content +- "Public": any user can access the content + +When a user follows a collection, the collection and its content are accessible in all parts of the library interface. + +Following a **Private** collection uses the following flow: + +1. The **owner** selects the **recipient** they want to share with +2. Funkwhale sends the **recipient** a follow URL for the collection +3. The **recipient** pastes the URL into the search bar and selects **Request to follow collection** +4. The **owner** can then **approve** or **deny** the follow request +5. The **recipient** can only access the collection's content if the **owner** approves the follow + +### Unsharing a collection + +Users must be able to revoke sharing for collections. Once a collection is unshared, the content must not be accessible to past recipients. + +The process for this changes based on the visibility level of the collection: + +- If the user wants to unshare a **Public** collection, they can change the visibility level to **Private** or **Local** +- If the user wants to unshare a **Local** collection, they can change the visibility level to **Private** +- If the user wants to unshare a **Private** collection, they must be able to select the recipient with whom they shared the collection and **invalidate** their sharing URL. When the user's server receives this invalidation request, the content must be made unavailable to the user + +When a user revokes collection access, the metadata entry for the content remains in the recipient's library but is **disabled**. The UI should display a message informing the recipient that they no longer have access to the containing collection. The recipient can hide or remove the metadata entry by selecting "Forget" from the entry's content menu. + +### Following collections + +Users must be able to follow remote content and collections so that the content appears in their library. This content must be clearly marked as external and should not contain the option to add to user collections. + +### Unfollowing collections + +Users must be able to unfollow collections by visiting the collection's page and selecting "Unfollow". The content in the collection should not be accessible to the user after they unfollow the collection. + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [x] CLI + +## Responsible parties + +- Backend group: + - Create new models and API endpoints to support collections + - Formulate a migration path for existing libraries + - Create a compatibility layer for calls between pods with **collections** and pods with **libraries** +- Design group: Create designs for the different ares of the app in which collections are to be shown: + - Search results + - The collection page + - The user library page + - Sharing menus for content +- Documentation group: + - Create UX copy for all designs (in collaboration with design group) + - Document the behavior of collections for end users + - Document the behavior of collections for admins + - Document the structure of the data/API for developers +- Frontend group: + - Create new collection page in line with designs + - Create new user library page in line with designs + - Update search results page to show collections + - Add new context menus for collection management + +## Open questions + +- Terminology: Does ā€œfollowingā€ a collection make sense? Would ā€œadd to libraryā€ be better? + +## Minimum viable product + +On the backend, we must: + +1. Create the new models for collections +2. Create endpoints to satisfy the requirements laid out in the feature behavior section +3. Create a migration path and demonstrate successful migration of libraries to collections +4. Create a translation layer between APIv1 library APIs and APIv2 collection APIs + +On the frontend, we must: + +1. Update the user profile page to show the user's collections +2. Update the user's library page to show the user's collections +3. Create the new collection page with separate tabs for artists, albums, playlists, and tracks +4. Add collection management options to the upload form +5. Add collection management options to the object context menus + +Mockups for these pages [are available here](https://dev.funkwhale.audio/funkwhale/funkwhale-design/-/raw/master/specs/collections%20-%20user%20profile.pdf) + +The MVP must allow users to perform the following actions: + +- Add or delete content from their library +- Create and delete collections +- Add content to and remove content from collections +- Share and unshare collections + +### Next steps + +After the core mechanics are implemented, we can add the following to the frontend: + +- User library page: Automatic collections +- Collection page: overview tab +- Replace user favorites page with a browsable collection From 1a04a84ec3eef7d200d7ea9cfaf2039ab88b65cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 9 Oct 2023 11:32:33 +0200 Subject: [PATCH 017/371] fix(docs): run pre-commit Part-of: --- docs/specs/collections/index.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/specs/collections/index.md b/docs/specs/collections/index.md index c9d8c30fd..d95bc1431 100644 --- a/docs/specs/collections/index.md +++ b/docs/specs/collections/index.md @@ -251,24 +251,24 @@ Users must be able to unfollow collections by visiting the collection's page and ## Responsible parties - Backend group: - - Create new models and API endpoints to support collections - - Formulate a migration path for existing libraries - - Create a compatibility layer for calls between pods with **collections** and pods with **libraries** + - Create new models and API endpoints to support collections + - Formulate a migration path for existing libraries + - Create a compatibility layer for calls between pods with **collections** and pods with **libraries** - Design group: Create designs for the different ares of the app in which collections are to be shown: - - Search results - - The collection page - - The user library page - - Sharing menus for content + - Search results + - The collection page + - The user library page + - Sharing menus for content - Documentation group: - - Create UX copy for all designs (in collaboration with design group) - - Document the behavior of collections for end users - - Document the behavior of collections for admins - - Document the structure of the data/API for developers + - Create UX copy for all designs (in collaboration with design group) + - Document the behavior of collections for end users + - Document the behavior of collections for admins + - Document the structure of the data/API for developers - Frontend group: - - Create new collection page in line with designs - - Create new user library page in line with designs - - Update search results page to show collections - - Add new context menus for collection management + - Create new collection page in line with designs + - Create new user library page in line with designs + - Update search results page to show collections + - Add new context menus for collection management ## Open questions From b70cabccdfeb8f6ca2be679119d85bbb7c919ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 9 Oct 2023 11:33:43 +0200 Subject: [PATCH 018/371] Add changelog snippet Part-of: --- changes/changelog.d/collections.doc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/collections.doc diff --git a/changes/changelog.d/collections.doc b/changes/changelog.d/collections.doc new file mode 100644 index 000000000..47ec8846f --- /dev/null +++ b/changes/changelog.d/collections.doc @@ -0,0 +1 @@ +Added new collections spec. From a756a5f920239b44034d8bf7833844091e9b6b3d Mon Sep 17 00:00:00 2001 From: Mathieu Jourdan Date: Wed, 11 Oct 2023 23:15:29 +0000 Subject: [PATCH 019/371] collection terminology - insist on the possibility to follow as many collections as wanted Part-of: --- docs/specs/collections/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/specs/collections/index.md b/docs/specs/collections/index.md index d95bc1431..c190fe97a 100644 --- a/docs/specs/collections/index.md +++ b/docs/specs/collections/index.md @@ -32,7 +32,7 @@ This specification outlines the behaviors and workflows used in collections. **Collections** enable users to group content **they have uploaded**. Users can create as many collections as they want and can share collections with other users. Users cannot add remote content to their own collections as this content may be revoked by other users and this would break the user experience. -The **library** is the container that holds all content a user has access to. This includes all content the user uploads and follows. The library can contain as many **collections** as the user wants to create. +The **library** is the container that holds all content a user has access to. This includes all content the user uploads and follows. The library can contain as many **collections** as the user wants to create or follow. ## Information architecture From 9cd2f3012975b41159bb2593989e027d610a6673 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 15:03:03 +0000 Subject: [PATCH 020/371] chore: Avoid Python 3.12 since its not yet supported #2243 --- .gitlab-ci.yml | 2 +- .gitpod/Dockerfile | 2 ++ api/poetry.lock | 17 +++++++++++++++-- api/pyproject.toml | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 42d806bb7..b51f56dfc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -236,7 +236,7 @@ test_api: image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION parallel: matrix: - - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12"] + - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11"] services: - name: postgres:15-alpine command: diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 7236a7e3e..6a4f4cc64 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -4,6 +4,8 @@ USER gitpod RUN sudo apt update -y \ && sudo apt install libsasl2-dev libldap2-dev libssl-dev ffmpeg gettext -y +RUN pyenv install 3.11 && pyenv global 3.11 + RUN pip install poetry pre-commit \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true diff --git a/api/poetry.lock b/api/poetry.lock index 59da9d507..a308acc1f 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2630,6 +2630,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -2638,6 +2639,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -3142,6 +3145,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3149,8 +3153,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3167,6 +3178,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3174,6 +3186,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -4466,5 +4479,5 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "b5d18d34f29b2ac96360cae13fd38fbc14b37c0a44989b21c905820d2234ae9e" +python-versions = "^3.8,<3.12" +content-hash = "6d0390a50c6d46e6fe4910a261282a2eee195a387fad04044d5981199f2f1e7b" diff --git a/api/pyproject.toml b/api/pyproject.toml index 70e65c47f..eba938250 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -25,7 +25,7 @@ exclude = ["tests"] funkwhale-manage = 'funkwhale_api.main:main' [tool.poetry.dependencies] -python = "^3.8" +python = "^3.8,<3.12" # Django dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } From accf2616832bc307628d6fac91d9d3cf8e6078a1 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 2 Nov 2023 10:03:56 +0000 Subject: [PATCH 021/371] fix(gitpod): Remove falsely added pyenv commands --- .gitpod/Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 6a4f4cc64..7236a7e3e 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -4,8 +4,6 @@ USER gitpod RUN sudo apt update -y \ && sudo apt install libsasl2-dev libldap2-dev libssl-dev ffmpeg gettext -y -RUN pyenv install 3.11 && pyenv global 3.11 - RUN pip install poetry pre-commit \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true From c5dd88a2e256cd635dcdccd492d3f26104a47d17 Mon Sep 17 00:00:00 2001 From: jo Date: Tue, 31 Jan 2023 19:06:53 +0100 Subject: [PATCH 022/371] chore: add new releases.py script Part-of: --- scripts/releases.py | 90 ++++++++++++++++++++ scripts/releases_test.py | 173 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 263 insertions(+) create mode 100755 scripts/releases.py create mode 100755 scripts/releases_test.py diff --git a/scripts/releases.py b/scripts/releases.py new file mode 100755 index 000000000..ce3f06be3 --- /dev/null +++ b/scripts/releases.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 + +import json +import logging +from argparse import ArgumentParser +from functools import reduce +from operator import getitem +from subprocess import check_output +from typing import Dict, List + +from packaging.version import InvalidVersion, Version + +logger = logging.getLogger(__name__) +logger.addHandler(logging.NullHandler()) + + +def get_releases() -> List[Dict[str, str]]: + """ + Gather all releases from git tags, sorted by version. + Do not include pre releases. + """ + output = check_output( + [ + *("git", "tag", "-l"), + "--format=%(creatordate:iso-strict)|%(refname:short)", + "--sort=v:refname", # sort by refname (version sort, not lexicographic) + ], + text=True, + ) + + result = [] + for line in output.splitlines(): + date, _, ref = line.partition("|") + try: + version = Version(ref) + if version.pre is not None: + logger.warning("ignoring pre release: %s", version) + continue + + except InvalidVersion as exception: + logger.error("ignoring invalid release: %s", exception) + continue + + result.append({"id": ref, "date": date}) + return list(reversed(result)) + + +def resolve_query(haystack, needle: str): + if isinstance(haystack, list): + needle = int(needle) + return getitem(haystack, needle) + + +def main(query: str = None, raw: bool = False) -> int: + releases = get_releases() + data = { + "count": len(releases), + "latest": releases[0], + "releases": releases, + } + + if query is not None: + parts = query.split(".") + result = reduce(resolve_query, parts, data) + else: + result = data + + if raw: + print(result) + else: + print(json.dumps(result, indent=2)) + + return 0 + + +if __name__ == "__main__": + parser = ArgumentParser("Compile releases data") + parser.add_argument( + "-q", + "--query", + help="Query a specific data", + ) + parser.add_argument( + "-r", + "--raw", + action="store_true", + help="Output raw data", + ) + args = parser.parse_args() + raise SystemExit(main(query=args.query, raw=args.raw)) diff --git a/scripts/releases_test.py b/scripts/releases_test.py new file mode 100755 index 000000000..102b82ba5 --- /dev/null +++ b/scripts/releases_test.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 + + +from textwrap import dedent +from unittest import mock + +from releases import get_releases + +GIT_TAGS = dedent( + """ + 2017-06-26T22:31:52+02:00|0.1 + 2017-07-09T11:37:55+02:00|0.2 + 2017-07-17T22:08:58+02:00|0.2.1 + 2017-12-11T21:16:02+01:00|0.2.2 + 2017-12-12T23:55:09+01:00|0.2.3 + 2017-12-14T23:08:49+01:00|0.2.4 + 2017-12-16T16:15:42+01:00|0.2.5 + 2017-12-16T16:40:52+01:00|0.2.6 + 2017-12-26T21:29:05+01:00|0.3 + 2017-12-27T23:36:54+01:00|0.3.1 + 2017-12-27T23:44:11+01:00|0.3.2 + 2018-01-07T22:27:43+01:00|0.3.3 + 2018-01-07T22:52:04+01:00|0.3.4 + 2018-01-07T23:08:10+01:00|0.3.5 + 2018-02-18T14:48:53+01:00|0.4 + 2018-02-24T15:37:50+01:00|0.5 + 2018-02-24T18:08:07+01:00|0.5.1 + 2018-02-26T21:39:41+01:00|0.5.2 + 2018-02-27T23:10:45+01:00|0.5.3 + 2018-02-28T19:29:47+01:00|0.5.4 + 2018-03-04T15:16:57+01:00|0.6 + 2018-03-06T21:56:21+01:00|0.6.1 + 2018-03-21T21:05:15+01:00|0.7 + 2018-04-02T20:04:53+02:00|0.8 + 2018-04-17T21:31:49+02:00|0.9 + 2018-04-17T23:20:48+02:00|0.9.1 + 2018-04-23T19:44:48+02:00|0.10 + 2018-05-06T16:24:23+02:00|0.11 + 2018-05-09T23:46:23+02:00|0.12 + 2018-05-19T11:43:36+02:00|0.13 + 2018-06-02T18:11:24+02:00|0.14 + 2018-06-06T22:03:42+02:00|0.14.1 + 2018-06-16T15:04:57+02:00|0.14.2 + 2018-06-24T16:00:40+02:00|0.15 + 2018-07-22T22:44:16+02:00|0.16 + 2018-08-19T19:05:22+02:00|0.16.1 + 2018-08-21T19:03:14+02:00|0.16.2 + 2018-08-21T20:34:15+02:00|0.16.3 + 2018-10-07T11:53:35+02:00|0.17 + 2019-01-22T12:05:12+01:00|0.18 + 2019-01-29T14:25:50+01:00|0.18.1 + 2019-02-13T09:28:23+01:00|0.18.2 + 2019-03-21T10:41:32+01:00|0.18.3 + 2019-05-16T12:30:38+02:00|0.19.0 + 2019-05-02T14:26:46+02:00|0.19.0-rc1 + 2019-05-10T10:05:26+02:00|0.19.0-rc2 + 2019-06-28T10:25:35+02:00|0.19.1 + 2019-10-04T10:42:33+02:00|0.20.0 + 2019-09-24T15:28:11+02:00|0.20.0-rc1 + 2019-10-28T10:54:39+01:00|0.20.1 + 2020-04-24T10:11:25+02:00|0.21 + 2020-04-09T09:57:16+02:00|0.21-rc1 + 2020-04-22T11:10:55+02:00|0.21-rc2 + 2020-06-11T10:44:20+02:00|0.21.1 + 2020-07-27T11:21:40+02:00|0.21.2 + 2020-09-09T07:48:14+02:00|1.0 + 2020-08-23T15:21:29+02:00|1.0-rc1 + 2020-10-31T12:43:37+01:00|1.0.1 + 2021-03-10T10:25:28+01:00|1.1 + 2021-02-24T08:18:56+01:00|1.1-rc1 + 2021-03-01T19:21:36+01:00|1.1-rc2 + 2021-04-13T10:27:07+02:00|1.1.1 + 2021-05-19T15:30:51+02:00|1.1.2 + 2021-08-01T22:04:02+02:00|1.1.3 + 2021-08-02T20:47:50+02:00|1.1.4 + 2021-12-27T20:56:03+01:00|1.2.0 + 2021-12-08T20:15:55+01:00|1.2.0-rc1 + 2021-12-21T09:12:57+00:00|1.2.0-rc2 + 2021-11-05T09:24:36+00:00|1.2.0-testing + 2021-11-05T09:31:10+00:00|1.2.0-testing2 + 2021-11-05T09:43:30+00:00|1.2.0-testing3 + 2021-11-05T12:00:26+00:00|1.2.0-testing4 + 2022-01-06T17:35:53+01:00|1.2.1 + 2022-02-04T12:49:11+01:00|1.2.2 + 2022-03-18T10:57:16+01:00|1.2.3 + 2022-04-23T13:40:06+02:00|1.2.4 + 2022-05-07T13:48:31+02:00|1.2.5 + 2022-07-04T17:03:19+02:00|1.2.6 + 2022-07-05T15:43:08+02:00|1.2.6-1 + 2022-07-14T12:53:53+02:00|1.2.7 + 2022-09-12T10:51:44+02:00|1.2.8 + 2022-11-25T17:59:23+01:00|1.2.9 + 2023-01-20T09:40:58+01:00|1.3.0-rc1 + 2023-01-23T10:41:22+01:00|1.3.0-rc2 + 2023-01-23T14:24:46+01:00|1.3.0-rc3 + """ +) + + +def test_get_releases(): + with mock.patch("releases.check_output") as check_output_mock: + check_output_mock.return_value = GIT_TAGS + + assert get_releases() == [ + {"id": "1.2.9", "date": "2022-11-25T17:59:23+01:00"}, + {"id": "1.2.8", "date": "2022-09-12T10:51:44+02:00"}, + {"id": "1.2.7", "date": "2022-07-14T12:53:53+02:00"}, + {"id": "1.2.6-1", "date": "2022-07-05T15:43:08+02:00"}, + {"id": "1.2.6", "date": "2022-07-04T17:03:19+02:00"}, + {"id": "1.2.5", "date": "2022-05-07T13:48:31+02:00"}, + {"id": "1.2.4", "date": "2022-04-23T13:40:06+02:00"}, + {"id": "1.2.3", "date": "2022-03-18T10:57:16+01:00"}, + {"id": "1.2.2", "date": "2022-02-04T12:49:11+01:00"}, + {"id": "1.2.1", "date": "2022-01-06T17:35:53+01:00"}, + {"id": "1.2.0", "date": "2021-12-27T20:56:03+01:00"}, + {"id": "1.1.4", "date": "2021-08-02T20:47:50+02:00"}, + {"id": "1.1.3", "date": "2021-08-01T22:04:02+02:00"}, + {"id": "1.1.2", "date": "2021-05-19T15:30:51+02:00"}, + {"id": "1.1.1", "date": "2021-04-13T10:27:07+02:00"}, + {"id": "1.1", "date": "2021-03-10T10:25:28+01:00"}, + {"id": "1.0.1", "date": "2020-10-31T12:43:37+01:00"}, + {"id": "1.0", "date": "2020-09-09T07:48:14+02:00"}, + {"id": "0.21.2", "date": "2020-07-27T11:21:40+02:00"}, + {"id": "0.21.1", "date": "2020-06-11T10:44:20+02:00"}, + {"id": "0.21", "date": "2020-04-24T10:11:25+02:00"}, + {"id": "0.20.1", "date": "2019-10-28T10:54:39+01:00"}, + {"id": "0.20.0", "date": "2019-10-04T10:42:33+02:00"}, + {"id": "0.19.1", "date": "2019-06-28T10:25:35+02:00"}, + {"id": "0.19.0", "date": "2019-05-16T12:30:38+02:00"}, + {"id": "0.18.3", "date": "2019-03-21T10:41:32+01:00"}, + {"id": "0.18.2", "date": "2019-02-13T09:28:23+01:00"}, + {"id": "0.18.1", "date": "2019-01-29T14:25:50+01:00"}, + {"id": "0.18", "date": "2019-01-22T12:05:12+01:00"}, + {"id": "0.17", "date": "2018-10-07T11:53:35+02:00"}, + {"id": "0.16.3", "date": "2018-08-21T20:34:15+02:00"}, + {"id": "0.16.2", "date": "2018-08-21T19:03:14+02:00"}, + {"id": "0.16.1", "date": "2018-08-19T19:05:22+02:00"}, + {"id": "0.16", "date": "2018-07-22T22:44:16+02:00"}, + {"id": "0.15", "date": "2018-06-24T16:00:40+02:00"}, + {"id": "0.14.2", "date": "2018-06-16T15:04:57+02:00"}, + {"id": "0.14.1", "date": "2018-06-06T22:03:42+02:00"}, + {"id": "0.14", "date": "2018-06-02T18:11:24+02:00"}, + {"id": "0.13", "date": "2018-05-19T11:43:36+02:00"}, + {"id": "0.12", "date": "2018-05-09T23:46:23+02:00"}, + {"id": "0.11", "date": "2018-05-06T16:24:23+02:00"}, + {"id": "0.10", "date": "2018-04-23T19:44:48+02:00"}, + {"id": "0.9.1", "date": "2018-04-17T23:20:48+02:00"}, + {"id": "0.9", "date": "2018-04-17T21:31:49+02:00"}, + {"id": "0.8", "date": "2018-04-02T20:04:53+02:00"}, + {"id": "0.7", "date": "2018-03-21T21:05:15+01:00"}, + {"id": "0.6.1", "date": "2018-03-06T21:56:21+01:00"}, + {"id": "0.6", "date": "2018-03-04T15:16:57+01:00"}, + {"id": "0.5.4", "date": "2018-02-28T19:29:47+01:00"}, + {"id": "0.5.3", "date": "2018-02-27T23:10:45+01:00"}, + {"id": "0.5.2", "date": "2018-02-26T21:39:41+01:00"}, + {"id": "0.5.1", "date": "2018-02-24T18:08:07+01:00"}, + {"id": "0.5", "date": "2018-02-24T15:37:50+01:00"}, + {"id": "0.4", "date": "2018-02-18T14:48:53+01:00"}, + {"id": "0.3.5", "date": "2018-01-07T23:08:10+01:00"}, + {"id": "0.3.4", "date": "2018-01-07T22:52:04+01:00"}, + {"id": "0.3.3", "date": "2018-01-07T22:27:43+01:00"}, + {"id": "0.3.2", "date": "2017-12-27T23:44:11+01:00"}, + {"id": "0.3.1", "date": "2017-12-27T23:36:54+01:00"}, + {"id": "0.3", "date": "2017-12-26T21:29:05+01:00"}, + {"id": "0.2.6", "date": "2017-12-16T16:40:52+01:00"}, + {"id": "0.2.5", "date": "2017-12-16T16:15:42+01:00"}, + {"id": "0.2.4", "date": "2017-12-14T23:08:49+01:00"}, + {"id": "0.2.3", "date": "2017-12-12T23:55:09+01:00"}, + {"id": "0.2.2", "date": "2017-12-11T21:16:02+01:00"}, + {"id": "0.2.1", "date": "2017-07-17T22:08:58+02:00"}, + {"id": "0.2", "date": "2017-07-09T11:37:55+02:00"}, + {"id": "0.1", "date": "2017-06-26T22:31:52+02:00"}, + ] From fe47420ba1cb48d94a50432178510eb4c8b39f8f Mon Sep 17 00:00:00 2001 From: jo Date: Mon, 17 Jul 2023 21:35:44 +0200 Subject: [PATCH 023/371] docs: replace scripts with makefile Part-of: --- .gitlab-ci.yml | 23 +- .../replace-docs-scripts-with-makefile.misc | 1 + dev.yml | 10 +- docs/Dockerfile | 20 +- docs/Makefile | 89 +- docs/_scripts/locale-prune-untranslated.py | 19 + docs/_scripts/serve.py | 22 + docs/build_docs.sh | 29 - docs/build_swagger.sh | 18 - docs/conf.py | 242 +- docs/i18n_generate.sh | 10 - docs/poetry.lock | 3342 ++--------------- docs/pyproject.toml | 6 +- docs/serve.py | 10 - 14 files changed, 453 insertions(+), 3388 deletions(-) create mode 100644 changes/changelog.d/replace-docs-scripts-with-makefile.misc create mode 100755 docs/_scripts/locale-prune-untranslated.py create mode 100755 docs/_scripts/serve.py delete mode 100755 docs/build_docs.sh delete mode 100755 docs/build_swagger.sh mode change 100755 => 100644 docs/conf.py delete mode 100755 docs/i18n_generate.sh delete mode 100755 docs/serve.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b51f56dfc..49414adc9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -118,21 +118,16 @@ review_docs: - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: [docs/**/*] - image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 - variables: - BUILD_PATH: "../docs-review" + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11 environment: name: review/docs/$CI_COMMIT_REF_NAME url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/docs-review/index.html cache: *docs_cache before_script: - - mkdir docs-review - cd docs - - apt-get update - - apt-get install -y graphviz - - poetry install + - make install script: - - poetry run python3 -m sphinx . $BUILD_PATH + - make build BUILD_DIR=../docs-review artifacts: expire_in: 2 weeks paths: @@ -372,19 +367,13 @@ build_docs: - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ - changes: [docs/**/*] - image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 - variables: - BUILD_PATH: "../public" - GIT_STRATEGY: clone - GIT_DEPTH: 0 + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11 cache: *docs_cache before_script: - cd docs - - apt-get update - - apt-get install -y graphviz - - poetry install + - make install script: - - ./build_docs.sh + - make build-all BUILD_DIR=../public artifacts: expire_in: 2 weeks paths: diff --git a/changes/changelog.d/replace-docs-scripts-with-makefile.misc b/changes/changelog.d/replace-docs-scripts-with-makefile.misc new file mode 100644 index 000000000..b27beaf8a --- /dev/null +++ b/changes/changelog.d/replace-docs-scripts-with-makefile.misc @@ -0,0 +1 @@ +Replace docs scripts with make diff --git a/dev.yml b/dev.yml index 95323af8c..a306d753f 100644 --- a/dev.yml +++ b/dev.yml @@ -154,12 +154,14 @@ services: docs: build: docs - command: python3 serve.py + command: make clean dev + working_dir: /src/docs + user: 1000:1000 volumes: - - ".:/app/" + - .:/src ports: - - "35730:35730" - - "8001:8001" + - 8001:8001 + - 35730:35730 api-docs: image: swaggerapi/swagger-ui:v3.37.2 diff --git a/docs/Dockerfile b/docs/Dockerfile index 370e0b7aa..7a463d8df 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,5 +1,19 @@ FROM python:3.11 -RUN apt-get update && apt-get install -y graphviz -RUN pip install sphinx livereload sphinx_rtd_theme django-environ django myst-parser sphinx-design sphinx-multiversion sphinxcontrib-mermaid sphinx-copybutton -WORKDIR /app/docs +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ARG PIP_NO_CACHE_DIR=1 + +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + curl \ + git \ + graphviz \ + make \ + && rm -rf /var/lib/apt/lists/* + +RUN set -eux \ + && pip install --upgrade pip \ + && pip install setuptools wheel pipx \ + && PIPX_BIN_DIR=/usr/local/bin pipx install poetry diff --git a/docs/Makefile b/docs/Makefile index 083dae580..1d6f41e68 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,20 +1,77 @@ -# Minimal makefile for Sphinx documentation -# +SHELL = bash +CPU_CORES = $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = python3 -msphinx -SPHINXPROJ = funkwhale -SOURCEDIR = . -BUILDDIR = _build +# Install +VENV = .venv +export POETRY_VIRTUALENVS_IN_PROJECT=true -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +$(VENV): + $(MAKE) install -.PHONY: help Makefile +install: + poetry install + poetry run pip install --no-deps --editable ../api -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +clean: + git clean -xdf . + +# Sphinx +SPHINX_OPTS = -j $(CPU_CORES) +SOURCE_DIR = . +BUILD_DIR = _build + +# Dev +dev: $(VENV) + poetry run _scripts/serve.py + +# I18n +LOCALES = en_GB en_US fr + +locale-generate: $(VENV) + poetry run sphinx-build -b gettext $(SOURCE_DIR) locales/gettext $(SPHINX_OPTS) + +locale-update: $(VENV) + poetry run sphinx-intl update -p locales/gettext $(foreach locale,$(LOCALES),-l $(locale)) + +locale-prune-untranslated: $(VENV) + poetry run _scripts/locale-prune-untranslated.py + +# Swagger +SWAGGER_VERSION = 5.1.2 +SWAGGER_RELEASE_URL = https://github.com/swagger-api/swagger-ui/archive/refs/tags/v$(SWAGGER_VERSION).tar.gz +SWAGGER_BUILD_DIR = swagger + +swagger: + mkdir "$(SWAGGER_BUILD_DIR)" + curl -sSL "$(SWAGGER_RELEASE_URL)" | \ + tar --extract \ + --gzip \ + --directory="$(SWAGGER_BUILD_DIR)" \ + --strip-components=2 \ + "swagger-ui-$(SWAGGER_VERSION)/dist" + + sed -i \ + "s#https://petstore.swagger.io/v2/swagger.json#schema.yml#g" \ + "$(SWAGGER_BUILD_DIR)/swagger-initializer.js" + + cp schema.yml "$(SWAGGER_BUILD_DIR)/schema.yml" + +# Releases +$(BUILD_DIR)/releases.json: + ../scripts/releases.py > "$@" + +$(BUILD_DIR)/latest.txt: + ../scripts/releases.py -r -q latest.id > "$@" + +releases: $(BUILD_DIR)/releases.json $(BUILD_DIR)/latest.txt + +# Build +build: $(VENV) + poetry run sphinx-build $(SOURCE_DIR) $(BUILD_DIR) $(SPHINX_OPTS) + +build-translated: $(VENV) locale-prune-untranslated + for locale in $(LOCALES); do \ + poetry run sphinx-build $(SOURCE_DIR) $(BUILD_DIR)/$$locale $(SPHINX_OPTS) -D language=$$locale; \ + done + +build-all: build build-translated releases swagger diff --git a/docs/_scripts/locale-prune-untranslated.py b/docs/_scripts/locale-prune-untranslated.py new file mode 100755 index 000000000..57b4d8c48 --- /dev/null +++ b/docs/_scripts/locale-prune-untranslated.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +import os +from subprocess import check_output + + +def main() -> int: + output = check_output(["poetry", "run", "sphinx-intl", "stat"], text=True) + for line in output.splitlines(): + path, _, comment = line.partition(":") + if "0 untranslated." in comment: + print(f"removing untranslated po file: {path}") + os.unlink(path) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/docs/_scripts/serve.py b/docs/_scripts/serve.py new file mode 100755 index 000000000..71edcde2e --- /dev/null +++ b/docs/_scripts/serve.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +from subprocess import check_call + +from livereload import Server, shell + +BUILD_DIR = "/tmp/_build" + + +def main() -> int: + # initial make + check_call(["make", "build", f"BUILD_DIR={BUILD_DIR}"]) + + server = Server() + server.watch("..", shell(f"make build BUILD_DIR={BUILD_DIR}")) + server.serve(root=BUILD_DIR, liveport=35730, port=8001, host="0.0.0.0") + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/docs/build_docs.sh b/docs/build_docs.sh deleted file mode 100755 index 6aa719a76..000000000 --- a/docs/build_docs.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -set -eux - -# We clean up translations, only fully translated components are kept -IFS=$'\n' - -for i in $(poetry run sphinx-intl stat); do - echo "$i" - if [[ "$i" != *" 0 untranslated." ]]; then - file=$(echo "$i" | cut -d: -f1) - echo "delete $file" - rm "$file" - fi -done - -# Build sphinx -poetry run sphinx-build . "$BUILD_PATH" -for path in locales/*; do - lang="$(basename "$path")" - if [[ "$lang" != "gettext" ]]; then - poetry run sphinx-build -D language="$lang" . "$BUILD_PATH/$lang" - fi -done - -# Build swagger -TARGET_PATH="$BUILD_PATH/swagger" ./build_swagger.sh -python3 ./get-releases-json.py > "$BUILD_PATH/releases.json" -python3 ./get-releases-json.py --latest > "$BUILD_PATH/latest.txt" diff --git a/docs/build_swagger.sh b/docs/build_swagger.sh deleted file mode 100755 index 175e8372a..000000000 --- a/docs/build_swagger.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -eux - -SWAGGER_VERSION="4.15.5" -TARGET_PATH=${TARGET_PATH-"swagger"} - -rm -rf "$TARGET_PATH" -tmpdir="$(mktemp -d)" -trap 'rm -rf "$tmpdir"' EXIT - -pushd "$tmpdir" -curl -sSL "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v$SWAGGER_VERSION.tar.gz" -o swagger-ui.tgz -tar -xzf swagger-ui.tgz -popd -mv "$tmpdir/"*/dist "$TARGET_PATH" -cp schema.yml "$TARGET_PATH" - -sed -i "s#https://petstore.swagger.io/v2/swagger.json#schema.yml#g" "$TARGET_PATH/swagger-initializer.js" diff --git a/docs/conf.py b/docs/conf.py old mode 100755 new mode 100644 index 6bfe12bf6..8d6185431 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,58 +1,70 @@ -#!/usr/bin/env python3 -# -# funkwhale documentation build configuration file, created by -# sphinx-quickstart on Sun Jun 25 18:49:23 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# # All configuration values have a default; values that are commented out # serve to show the default. - -import datetime - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. # +# https://www.sphinx-doc.org/en/master/usage/configuration.html + import os -import sys +from datetime import datetime +from pathlib import Path -sys.path.insert(0, os.path.abspath("../api")) -sys.path.insert(0, os.path.abspath("../api/config")) +from sphinx.application import Sphinx +from sphinx.util import logging + +import funkwhale_api + +logger = logging.getLogger(__name__) -import funkwhale_api # NOQA FUNKWHALE_CONFIG = { - "FUNKWHALE_URL": "mypod.funkwhale", - "FUNKWHAL_PROTOCOL": "https", - "DATABASE_URL": "postgres://localhost:5432/db", + "FUNKWHALE_URL": "https://pod.funkwhale", + "DATABASE_URL": "postgres://localhost:5432/funkwhale", "AWS_ACCESS_KEY_ID": "my_access_key", "AWS_SECRET_ACCESS_KEY": "my_secret_key", "AWS_STORAGE_BUCKET_NAME": "my_bucket", } -for key, value in FUNKWHALE_CONFIG.items(): - os.environ[key] = value +os.environ.update(**FUNKWHALE_CONFIG) + # -- General configuration ------------------------------------------------ -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' +# General information about the project. +year = datetime.now().year +project = "funkwhale" +copyright = f"{year}, The Funkwhale Collective" +author = "The Funkwhale Collective" +version = funkwhale_api.__version__ +release = version -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. extensions = [ - "sphinx.ext.graphviz", - "sphinx.ext.autodoc", - "myst_parser", - "sphinx_design", - "sphinxcontrib.mermaid", "sphinx_copybutton", + "sphinx_design", + "sphinx.ext.autodoc", + "sphinx.ext.graphviz", + "sphinxcontrib.mermaid", + "myst_parser", ] + +source_suffix = ".md" +include_patterns = [ + "_static/**", + "_templates/**", + "*_documentation/**", + "*.md", + "*.rst", + "logo.svg", +] +exclude_patterns = [ + "_build", + "_scripts", + ".venv", + ".DS_Store", + "Thumbs.db", + "*.py", + "*.sh", +] + +root_doc = "index" + +# autodoc autodoc_mock_imports = [ "celery", "django_auth_ldap", @@ -61,20 +73,13 @@ autodoc_mock_imports = [ "rest_framework", "drf_spectacular", ] + +# sphinx +pygments_style = "sphinx" add_module_names = False -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] +todo_include_todos = False -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".md" - -# The root toctree document. -root_doc = "index" - -# Enable colon fences +# myst myst_enable_extensions = [ "colon_fence", "attrs_block", @@ -82,54 +87,21 @@ myst_enable_extensions = [ "fieldlist", "deflist", ] - -# Autogenerate anchors - myst_heading_anchors = 3 -# General information about the project. -year = datetime.datetime.now().year -project = "funkwhale" -copyright = f"{year}, The Funkwhale Collective" -author = "The Funkwhale Collective" -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# Read version from the API -version = funkwhale_api.__version__ -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. +# internationalization +locale_dirs = ["locales/"] +gettext_compact = False language = "en" -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", ".venv"] +# copybutton +copybutton_exclude = ".linenos, .gp" -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False # -- Options for HTML output ---------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# html_theme = "sphinx_rtd_theme" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} html_context = { "display_gitlab": True, "gitlab_host": "dev.funkwhale.audio", @@ -141,61 +113,37 @@ html_context = { } html_logo = "logo.svg" html_favicon = "../front/public/favicon.ico" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] -html_css_files = [ - "css/translation-hint.css", -] -html_js_files = [ - "js/translation-hint.js", -] +html_css_files = ["css/translation-hint.css"] +html_js_files = ["js/translation-hint.js"] # -- Options for HTMLHelp output ------------------------------------------ -# Output file base name for HTML help builder. htmlhelp_basename = "funkwhaledoc" - # -- Options for LaTeX output --------------------------------------------- -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). latex_documents = [ ( root_doc, "funkwhale.tex", - "funkwhale Documentation", + "Funkwhale Documentation", "The Funkwhale Collective", "manual", ) ] - # -- Options for manual page output --------------------------------------- -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(root_doc, "funkwhale", "funkwhale Documentation", [author], 1)] - +man_pages = [ + ( + root_doc, + "funkwhale", + "Funkwhale Documentation", + [author], + 1, + ) +] # -- Options for Texinfo output ------------------------------------------- @@ -206,7 +154,7 @@ texinfo_documents = [ ( root_doc, "funkwhale", - "funkwhale Documentation", + "Funkwhale Documentation", author, "funkwhale", "One line description of project.", @@ -214,49 +162,35 @@ texinfo_documents = [ ) ] -# -- Build legacy redirect files ------------------------------------------- +# -- Setup legacy redirects ----------------------------------------------- -# Define list of redirect files to be build in the Sphinx build process - -redirect_list = [] -with open("redirects.txt") as fp: - data_list = [tuple(line.strip().split(",")) for line in fp] - -# Generate redirect template - -redirect_template = """\ +REDIRECT_TEMPLATE = """\ - + """ -# Tell Sphinx to copy the files +redirects_file = Path("redirects.txt") +redirects = [ + tuple(line.strip().split(", ")) + for line in redirects_file.read_text(encoding="utf-8").splitlines() +] -def copy_legacy_redirects(app, docname): +def copy_legacy_redirects(app: Sphinx, docname): if app.builder.name == "html": - for html_src_path, new in data_list: - page = redirect_template.format(new=new) - target_path = app.outdir + "/" + html_src_path - if not os.path.exists(os.path.dirname(target_path)): - os.makedirs(os.path.dirname(target_path)) - with open(target_path, "w") as f: - f.write(page) + for src_path, dest_url in redirects: + content = REDIRECT_TEMPLATE.format(url=dest_url) + + redirect_path = Path(app.outdir) / src_path + redirect_path.parent.mkdir(parents=True, exist_ok=True) + redirect_path.write_text(content, encoding="utf-8") def setup(app): app.connect("build-finished", copy_legacy_redirects) - - -# Internationalization settings -locale_dirs = ["locales/"] -gettext_compact = False - -# Don't copy prompts with copybutton - -copybutton_exclude = ".linenos, .gp" diff --git a/docs/i18n_generate.sh b/docs/i18n_generate.sh deleted file mode 100755 index e80f64fe9..000000000 --- a/docs/i18n_generate.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -poetry run make -e BUILDDIR=locales gettext - -for path in locales/*; do - lang="$(basename "$path")" - if [[ "$lang" != "gettext" ]]; then - poetry run sphinx-intl update -p locales/gettext -l "$lang" - fi -done diff --git a/docs/poetry.lock b/docs/poetry.lock index fe867c648..4a045e71b 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -1,131 +1,10 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. - -[[package]] -name = "aiohttp" -version = "3.8.5" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" -attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -133,70 +12,11 @@ files = [ {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, ] -[[package]] -name = "amqp" -version = "5.1.1" -description = "Low-level AMQP client for Python (fork of amqplib)." -optional = false -python-versions = ">=3.6" -files = [ - {file = "amqp-5.1.1-py3-none-any.whl", hash = "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359"}, - {file = "amqp-5.1.1.tar.gz", hash = "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2"}, -] - -[package.dependencies] -vine = ">=5.0.0" - -[[package]] -name = "anyio" -version = "4.0.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.8" -files = [ - {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, - {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.22)"] - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" - [[package]] name = "asgiref" version = "3.7.2" description = "ASGI specs, helper code, and adapters" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -210,271 +30,30 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "autobahn" -version = "23.1.2" -description = "WebSocket client & server library, WAMP real-time framework" -optional = false -python-versions = ">=3.7" -files = [ - {file = "autobahn-23.1.2.tar.gz", hash = "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a"}, -] - -[package.dependencies] -cryptography = ">=3.4.6" -hyperlink = ">=21.0.0" -setuptools = "*" -txaio = ">=21.2.1" - -[package.extras] -all = ["PyGObject (>=3.40.0)", "argon2_cffi (>=20.1.0)", "attrs (>=20.3.0)", "base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "cffi (>=1.14.5)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "flatbuffers (>=22.12.6)", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "msgpack (>=1.0.2)", "passlib (>=1.7.4)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "py-ubjson (>=0.16.1)", "pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "python-snappy (>=0.6.0)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "rlp (>=2.0.1)", "service_identity (>=18.1.0)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "ujson (>=4.0.2)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)", "zope.interface (>=5.2.0)"] -compress = ["python-snappy (>=0.6.0)"] -dev = ["backports.tempfile (>=1.0)", "bumpversion (>=0.5.3)", "codecov (>=2.0.15)", "flake8 (<5)", "humanize (>=0.5.1)", "mypy (>=0.610)", "passlib", "pep8-naming (>=0.3.3)", "pip (>=9.0.1)", "pyenchant (>=1.6.6)", "pyflakes (>=1.0.0)", "pyinstaller (>=4.2)", "pylint (>=1.9.2)", "pytest (>=3.4.2)", "pytest-aiohttp", "pytest-asyncio (>=0.14.0)", "pytest-runner (>=2.11.1)", "pyyaml (>=4.2b4)", "qualname", "sphinx (>=1.7.1)", "sphinx-autoapi (>=1.7.0)", "sphinx_rtd_theme (>=0.1.9)", "sphinxcontrib-images (>=0.9.1)", "tox (>=4.2.8)", "tox-gh-actions (>=2.2.0)", "twine (>=3.3.0)", "twisted (>=22.10.0)", "txaio (>=20.4.1)", "watchdog (>=0.8.3)", "wheel (>=0.36.2)", "yapf (==0.29.0)"] -encryption = ["pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "service_identity (>=18.1.0)"] -nvx = ["cffi (>=1.14.5)"] -scram = ["argon2_cffi (>=20.1.0)", "cffi (>=1.14.5)", "passlib (>=1.7.4)"] -serialization = ["cbor2 (>=5.2.0)", "flatbuffers (>=22.12.6)", "msgpack (>=1.0.2)", "py-ubjson (>=0.16.1)", "ujson (>=4.0.2)"] -twisted = ["attrs (>=20.3.0)", "twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] -ui = ["PyGObject (>=3.40.0)"] -xbr = ["base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "rlp (>=2.0.1)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)"] - -[[package]] -name = "automat" -version = "22.10.0" -description = "Self-service finite-state machines for the programmer on the go." -optional = false -python-versions = "*" -files = [ - {file = "Automat-22.10.0-py2.py3-none-any.whl", hash = "sha256:c3164f8742b9dc440f3682482d32aaff7bb53f71740dd018533f9de286b64180"}, - {file = "Automat-22.10.0.tar.gz", hash = "sha256:e56beb84edad19dcc11d30e8d9b895f75deeb5ef5e96b84a467066b3b84bb04e"}, -] - -[package.dependencies] -attrs = ">=19.2.0" -six = "*" - -[package.extras] -visualize = ["Twisted (>=16.1.1)", "graphviz (>0.5.1)"] - [[package]] name = "babel" -version = "2.12.1" +version = "2.13.1" description = "Internationalization utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - -[[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -optional = false -python-versions = ">=3.6" -files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, -] +setuptools = {version = "*", markers = "python_version >= \"3.12\""} [package.extras] -tzdata = ["tzdata"] - -[[package]] -name = "billiard" -version = "3.6.4.0" -description = "Python multiprocessing fork with improvements and bugfixes" -optional = false -python-versions = "*" -files = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, -] - -[[package]] -name = "bleach" -version = "5.0.1" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] - -[[package]] -name = "boto3" -version = "1.26.161" -description = "The AWS SDK for Python" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "boto3-1.26.161-py3-none-any.whl", hash = "sha256:f66e5c9dbe7f34383bcf64fa6070771355c11a44dd75c7f1279f2f37e1c89183"}, - {file = "boto3-1.26.161.tar.gz", hash = "sha256:662731e464d14af1035f44fc6a46b0e3112ee011ac0a5ed416d205daa3e15f25"}, -] - -[package.dependencies] -botocore = ">=1.29.161,<1.30.0" -jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.6.0,<0.7.0" - -[package.extras] -crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] - -[[package]] -name = "botocore" -version = "1.29.165" -description = "Low-level, data-driven core of boto 3." -optional = false -python-versions = ">= 3.7" -files = [ - {file = "botocore-1.29.165-py3-none-any.whl", hash = "sha256:6f35d59e230095aed7cd747604fe248fa384bebb7d09549077892f936a8ca3df"}, - {file = "botocore-1.29.165.tar.gz", hash = "sha256:988b948be685006b43c4bbd8f5c0cb93e77c66deb70561994e0c5b31b5a67210"}, -] - -[package.dependencies] -jmespath = ">=0.7.1,<2.0.0" -python-dateutil = ">=2.1,<3.0.0" -urllib3 = ">=1.25.4,<1.27" - -[package.extras] -crt = ["awscrt (==0.16.9)"] - -[[package]] -name = "cachetools" -version = "5.3.1" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, -] - -[[package]] -name = "celery" -version = "5.2.7" -description = "Distributed Task Queue." -optional = false -python-versions = ">=3.7" -files = [ - {file = "celery-5.2.7-py3-none-any.whl", hash = "sha256:138420c020cd58d6707e6257b6beda91fd39af7afde5d36c6334d175302c0e14"}, - {file = "celery-5.2.7.tar.gz", hash = "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d"}, -] - -[package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=8.0.3,<9.0" -click-didyoumean = ">=0.0.3" -click-plugins = ">=1.1.1" -click-repl = ">=0.2.0" -kombu = ">=5.2.3,<6.0" -pytz = ">=2021.3" -vine = ">=5.0.0,<6.0" - -[package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.9.0)"] -brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] -couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] -eventlet = ["eventlet (>=0.32.0)"] -gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.11.1)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -s3 = ["boto3 (>=1.9.125)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["kombu[sqs]"] -tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -482,211 +61,111 @@ files = [ {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "channels" -version = "4.0.0" -description = "Brings async, event-driven capabilities to Django 3.2 and up." -optional = false -python-versions = ">=3.7" -files = [ - {file = "channels-4.0.0-py3-none-any.whl", hash = "sha256:2253334ac76f67cba68c2072273f7e0e67dbdac77eeb7e318f511d2f9a53c5e4"}, - {file = "channels-4.0.0.tar.gz", hash = "sha256:0ce53507a7da7b148eaa454526e0e05f7da5e5d1c23440e4886cf146981d8420"}, -] - -[package.dependencies] -asgiref = ">=3.5.0,<4" -daphne = {version = ">=4.0.0", optional = true, markers = "extra == \"daphne\""} -Django = ">=3.2" - -[package.extras] -daphne = ["daphne (>=4.0.0)"] -tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", "pytest-django"] - -[[package]] -name = "channels-redis" -version = "4.1.0" -description = "Redis-backed ASGI channel layer implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "channels_redis-4.1.0-py3-none-any.whl", hash = "sha256:3696f5b9fe367ea495d402ba83d7c3c99e8ca0e1354ff8d913535976ed0abf73"}, - {file = "channels_redis-4.1.0.tar.gz", hash = "sha256:6bd4f75f4ab4a7db17cee495593ace886d7e914c66f8214a1f247ff6659c073a"}, -] - -[package.dependencies] -asgiref = ">=3.2.10,<4" -channels = "*" -msgpack = ">=1.0,<2.0" -redis = ">=4.5.3" - -[package.extras] -cryptography = ["cryptography (>=1.3.0)"] -tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", "pytest-timeout"] - [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" version = "8.1.7" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -697,59 +176,11 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -[[package]] -name = "click-didyoumean" -version = "0.3.0" -description = "Enables git-like *did-you-mean* feature in click" -optional = false -python-versions = ">=3.6.2,<4.0.0" -files = [ - {file = "click-didyoumean-0.3.0.tar.gz", hash = "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035"}, - {file = "click_didyoumean-0.3.0-py3-none-any.whl", hash = "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667"}, -] - -[package.dependencies] -click = ">=7" - -[[package]] -name = "click-plugins" -version = "1.1.1" -description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -optional = false -python-versions = "*" -files = [ - {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, - {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, -] - -[package.dependencies] -click = ">=4.0" - -[package.extras] -dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] - -[[package]] -name = "click-repl" -version = "0.3.0" -description = "REPL plugin for Click" -optional = false -python-versions = ">=3.6" -files = [ - {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, - {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, -] - -[package.dependencies] -click = ">=7.0" -prompt-toolkit = ">=3.0.36" - -[package.extras] -testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] - [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -757,143 +188,11 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "constantly" -version = "15.1.0" -description = "Symbolic constants in Python" -optional = false -python-versions = "*" -files = [ - {file = "constantly-15.1.0-py2.py3-none-any.whl", hash = "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d"}, - {file = "constantly-15.1.0.tar.gz", hash = "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"}, -] - -[[package]] -name = "cryptography" -version = "38.0.4" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.6" -files = [ - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"}, - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0"}, - {file = "cryptography-38.0.4-cp36-abi3-win32.whl", hash = "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744"}, - {file = "cryptography-38.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"}, - {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"}, -] - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] - -[[package]] -name = "daphne" -version = "4.0.0" -description = "Django ASGI (HTTP/WebSocket) server" -optional = false -python-versions = ">=3.7" -files = [ - {file = "daphne-4.0.0-py3-none-any.whl", hash = "sha256:a288ece46012b6b719c37150be67c69ebfca0793a8521bf821533bad983179b2"}, - {file = "daphne-4.0.0.tar.gz", hash = "sha256:cce9afc8f49a4f15d4270b8cfb0e0fe811b770a5cc795474e97e4da287497666"}, -] - -[package.dependencies] -asgiref = ">=3.5.2,<4" -autobahn = ">=22.4.2" -twisted = {version = ">=22.4", extras = ["tls"]} - -[package.extras] -tests = ["django", "hypothesis", "pytest", "pytest-asyncio"] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "dj-rest-auth" -version = "2.2.8" -description = "Authentication and Registration in Django Rest Framework" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dj-rest-auth-2.2.8.tar.gz", hash = "sha256:9fb3492888185ede8b2064ad6803120c7b0b83ab08e2347a02e9b44282374242"}, -] - -[package.dependencies] -Django = ">=2.0" -django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extra == \"with_social\""} -djangorestframework = ">=3.7.0" - -[package.extras] -with-social = ["django-allauth (>=0.40.0,<0.53.0)"] - [[package]] name = "django" version = "3.2.20" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -910,111 +209,11 @@ sqlparse = ">=0.2.2" argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] -[[package]] -name = "django-allauth" -version = "0.42.0" -description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." -optional = false -python-versions = "*" -files = [ - {file = "django-allauth-0.42.0.tar.gz", hash = "sha256:f17209410b7f87da0a84639fd79d3771b596a6d3fc1a8e48ce50dabc7f441d30"}, -] - -[package.dependencies] -Django = ">=2.0" -python3-openid = ">=3.0.8" -requests = "*" -requests-oauthlib = ">=0.3.0" - -[[package]] -name = "django-auth-ldap" -version = "4.1.0" -description = "Django LDAP authentication backend." -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-auth-ldap-4.1.0.tar.gz", hash = "sha256:77f749d3b17807ce8eb56a9c9c8e5746ff316567f81d5ba613495d9c7495a949"}, - {file = "django_auth_ldap-4.1.0-py3-none-any.whl", hash = "sha256:68870e7921e84b1a9867e268a9c8a3e573e8a0d95ea08bcf31be178f5826ff36"}, -] - -[package.dependencies] -Django = ">=2.2" -python-ldap = ">=3.1" - -[[package]] -name = "django-cache-memoize" -version = "0.1.10" -description = "Django utility for a memoization decorator that uses the Django cache framework." -optional = false -python-versions = ">=3.5" -files = [ - {file = "django-cache-memoize-0.1.10.tar.gz", hash = "sha256:63e8faa245a41c0dbad843807e9f21a6e59eba8e6e50df310fdf6485a6749843"}, - {file = "django_cache_memoize-0.1.10-py3-none-any.whl", hash = "sha256:676299313079cde9242ae84db0160e80b1d44e8dd6bc9b1f4f1247e11b30c9e0"}, -] - -[package.extras] -dev = ["black", "flake8", "therapist", "tox", "twine"] - -[[package]] -name = "django-cacheops" -version = "6.1" -description = "A slick ORM cache with automatic granular event-driven invalidation for Django." -optional = false -python-versions = ">=3.5" -files = [ - {file = "django-cacheops-6.1.tar.gz", hash = "sha256:b684ef39fd434189d3cbb7d85417cd972af635289a032447982473b4a89f727d"}, -] - -[package.dependencies] -django = ">=2.1" -funcy = ">=1.8,<2.0" -redis = ">=3.0.0" -six = ">=1.4.0" - -[[package]] -name = "django-cleanup" -version = "6.0.0" -description = "Deletes old files." -optional = false -python-versions = "*" -files = [ - {file = "django-cleanup-6.0.0.tar.gz", hash = "sha256:922e06ef8839c92bd3ab37a84db6058b8764f3fe44dbb4487bbca941d288280a"}, - {file = "django_cleanup-6.0.0-py2.py3-none-any.whl", hash = "sha256:997feab3b1f7a2e84f71c29e83b1d664459ec0d4b1924977b1fa25b5babb8703"}, -] - -[[package]] -name = "django-cors-headers" -version = "3.13.0" -description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-cors-headers-3.13.0.tar.gz", hash = "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf"}, - {file = "django_cors_headers-3.13.0-py3-none-any.whl", hash = "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4"}, -] - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-dynamic-preferences" -version = "1.14.0" -description = "Dynamic global and instance settings for your django project" -optional = false -python-versions = "*" -files = [ - {file = "django-dynamic-preferences-1.14.0.tar.gz", hash = "sha256:c00abcb8d524067390a66518cfcd32683b87ad3cc620d5913649fc7707b80833"}, -] - -[package.dependencies] -django = ">=3.2" -persisting_theory = "1.0" -six = "*" - [[package]] name = "django-environ" version = "0.10.0" description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." +category = "main" optional = false python-versions = ">=3.5,<4" files = [ @@ -1023,115 +222,15 @@ files = [ ] [package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] -[[package]] -name = "django-filter" -version = "22.1" -description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-filter-22.1.tar.gz", hash = "sha256:ed473b76e84f7e83b2511bb2050c3efb36d135207d0128dfe3ae4b36e3594ba5"}, - {file = "django_filter-22.1-py3-none-any.whl", hash = "sha256:ed429e34760127e3520a67f415bec4c905d4649fbe45d0d6da37e6ff5e0287eb"}, -] - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-oauth-toolkit" -version = "2.2.0" -description = "OAuth2 Provider for Django" -optional = false -python-versions = "*" -files = [ - {file = "django-oauth-toolkit-2.2.0.tar.gz", hash = "sha256:46890decb24a34e2a5382debeaf7752e50d90b7a11716cf2a9fd067097ec0963"}, - {file = "django_oauth_toolkit-2.2.0-py3-none-any.whl", hash = "sha256:abd85c74af525a62365ec2049113e73a2ff8b46ef906e7104a7ba968ef02a11d"}, -] - -[package.dependencies] -django = ">=2.2,<4.0.0 || >4.0.0" -jwcrypto = ">=0.8.0" -oauthlib = ">=3.1.0" -requests = ">=2.13.0" - -[[package]] -name = "django-redis" -version = "5.2.0" -description = "Full featured redis cache backend for Django." -optional = false -python-versions = ">=3.6" -files = [ - {file = "django-redis-5.2.0.tar.gz", hash = "sha256:8a99e5582c79f894168f5865c52bd921213253b7fd64d16733ae4591564465de"}, - {file = "django_redis-5.2.0-py3-none-any.whl", hash = "sha256:1d037dc02b11ad7aa11f655d26dac3fb1af32630f61ef4428860a2e29ff92026"}, -] - -[package.dependencies] -Django = ">=2.2" -redis = ">=3,<4.0.0 || >4.0.0,<4.0.1 || >4.0.1" - -[package.extras] -hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"] - -[[package]] -name = "django-storages" -version = "1.13.2" -description = "Support for many storage backends in Django" -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-storages-1.13.2.tar.gz", hash = "sha256:cbadd15c909ceb7247d4ffc503f12a9bec36999df8d0bef7c31e57177d512688"}, - {file = "django_storages-1.13.2-py3-none-any.whl", hash = "sha256:31dc5a992520be571908c4c40d55d292660ece3a55b8141462b4e719aa38eab3"}, -] - -[package.dependencies] -Django = ">=3.2" - -[package.extras] -azure = ["azure-storage-blob (>=12.0.0)"] -boto3 = ["boto3 (>=1.4.4)"] -dropbox = ["dropbox (>=7.2.1)"] -google = ["google-cloud-storage (>=1.27.0)"] -libcloud = ["apache-libcloud"] -sftp = ["paramiko (>=1.10.0)"] - -[[package]] -name = "django-versatileimagefield" -version = "2.2" -description = "A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creating new images from the one assigned to the field." -optional = false -python-versions = "*" -files = [ - {file = "django-versatileimagefield-2.2.tar.gz", hash = "sha256:6569d5c3e13c69ab8912ba5100084aa5abcdcffb8d1f5abc085b226e7bbd65b3"}, - {file = "django_versatileimagefield-2.2-py2.py3-none-any.whl", hash = "sha256:03766f4d2332f192978879fdb196e18c53e6ccef6c55c5c26b59747b76a97288"}, -] - -[package.dependencies] -Pillow = ">=2.4.0" -python-magic = ">=0.4.15,<1.0.0" - -[[package]] -name = "djangorestframework" -version = "3.14.0" -description = "Web APIs for Django, made easy." -optional = false -python-versions = ">=3.6" -files = [ - {file = "djangorestframework-3.14.0-py3-none-any.whl", hash = "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"}, - {file = "djangorestframework-3.14.0.tar.gz", hash = "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8"}, -] - -[package.dependencies] -django = ">=3.0" -pytz = "*" - [[package]] name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1139,348 +238,11 @@ files = [ {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, ] -[[package]] -name = "drf-spectacular" -version = "0.26.1" -description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" -optional = false -python-versions = ">=3.6" -files = [ - {file = "drf-spectacular-0.26.1.tar.gz", hash = "sha256:1599a204bf9cc6be7ef3e509859885a38d4f871fe287a1f191479868afd9e234"}, - {file = "drf_spectacular-0.26.1-py3-none-any.whl", hash = "sha256:6df86ff6c2dc663792e5ff618643bf41d2ac9dc6fb5d1b0f273e2778bab951e5"}, -] - -[package.dependencies] -Django = ">=2.2" -djangorestframework = ">=3.10.3" -inflection = ">=0.3.1" -jsonschema = ">=2.6.0" -PyYAML = ">=5.1" -uritemplate = ">=2.0.0" - -[package.extras] -offline = ["drf-spectacular-sidecar"] -sidecar = ["drf-spectacular-sidecar"] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "feedparser" -version = "6.0.10" -description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" -optional = false -python-versions = ">=3.6" -files = [ - {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, - {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, -] - -[package.dependencies] -sgmllib3k = "*" - -[[package]] -name = "frozendict" -version = "2.3.8" -description = "A simple immutable dictionary" -optional = false -python-versions = ">=3.6" -files = [ - {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, - {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, - {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, - {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, - {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, - {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, - {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, - {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, - {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, - {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, - {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, - {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, - {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, -] - -[[package]] -name = "frozenlist" -version = "1.4.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.8" -files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, -] - -[[package]] -name = "funcy" -version = "1.18" -description = "A fancy and practical functional tools" -optional = false -python-versions = "*" -files = [ - {file = "funcy-1.18-py2.py3-none-any.whl", hash = "sha256:00ce91afc850357a131dc54f0db2ad8a1110d5087f1fa4480d7ea3ba0249f89d"}, - {file = "funcy-1.18.tar.gz", hash = "sha256:15448d19a8ebcc7a585afe7a384a19186d0bd67cbf56fb42cd1fd0f76313f9b2"}, -] - -[[package]] -name = "funkwhale-api" -version = "1.3.3" -description = "Funkwhale API" -optional = false -python-versions = "^3.8" -files = [] -develop = false - -[package.dependencies] -aiohttp = "==3.8.5" -arrow = "==1.2.3" -backports-zoneinfo = {version = "==0.2.1", markers = "python_version < \"3.9\""} -bleach = "==5.0.1" -boto3 = "==1.26.161" -celery = "==5.2.7" -channels = {version = "==4.0.0", extras = ["daphne"]} -channels-redis = "==4.1.0" -click = "==8.1.7" -cryptography = "==38.0.4" -dj-rest-auth = {version = "2.2.8", extras = ["with-social"]} -django = "==3.2.20" -django-allauth = "==0.42.0" -django-auth-ldap = "==4.1.0" -django-cache-memoize = "0.1.10" -django-cacheops = "==6.1" -django-cleanup = "==6.0.0" -django-cors-headers = "==3.13.0" -django-dynamic-preferences = "==1.14.0" -django-environ = "==0.10.0" -django-filter = "==22.1" -django-oauth-toolkit = "2.2.0" -django-redis = "==5.2.0" -django-storages = "==1.13.2" -django-versatileimagefield = "==2.2" -djangorestframework = "==3.14.0" -drf-spectacular = "==0.26.1" -feedparser = "==6.0.10" -gunicorn = "==20.1.0" -ipython = "==7.34.0" -kombu = "==5.2.4" -markdown = "==3.4.4" -musicbrainzngs = "==0.7.1" -mutagen = "==1.46.0" -persisting-theory = "==1.0" -pillow = "==9.3.0" -pluralizer = "==1.2.0" -psycopg2 = "==2.9.7" -pydub = "==0.25.1" -pyld = "==2.0.3" -python-ldap = "==3.4.3" -python-magic = "==0.4.27" -redis = "==4.5.5" -requests = "==2.28.2" -requests-http-message-signatures = "==0.3.1" -sentry-sdk = "==1.19.1" -service-identity = "==21.1.0" -unicode-slugify = "==0.1.5" -uvicorn = {version = "==0.20.0", extras = ["standard"]} -watchdog = "==2.2.1" - -[package.extras] -typesense = ["typesense (==0.15.1)"] - -[package.source] -type = "directory" -url = "../api" - -[[package]] -name = "gunicorn" -version = "20.1.0" -description = "WSGI HTTP Server for UNIX" -optional = false -python-versions = ">=3.5" -files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, -] - -[package.dependencies] -setuptools = ">=3.0" - -[package.extras] -eventlet = ["eventlet (>=0.24.1)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -tornado = ["tornado (>=0.2)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httptools" -version = "0.6.0" -description = "A collection of framework independent HTTP protocol utils." -optional = false -python-versions = ">=3.5.0" -files = [ - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339"}, - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c"}, - {file = "httptools-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38"}, - {file = "httptools-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2"}, - {file = "httptools-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4"}, - {file = "httptools-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201"}, - {file = "httptools-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d"}, - {file = "httptools-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd"}, - {file = "httptools-0.6.0.tar.gz", hash = "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796"}, -] - -[package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] - -[[package]] -name = "hyperlink" -version = "21.0.0" -description = "A featureful, immutable, and correct URL for Python." -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4"}, - {file = "hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b"}, -] - -[package.dependencies] -idna = ">=2.5" - [[package]] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1492,6 +254,7 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1503,6 +266,7 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1518,109 +282,11 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] -[[package]] -name = "importlib-resources" -version = "6.0.1" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[[package]] -name = "incremental" -version = "22.10.0" -description = "\"A small library that versions your Python projects.\"" -optional = false -python-versions = "*" -files = [ - {file = "incremental-22.10.0-py2.py3-none-any.whl", hash = "sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51"}, - {file = "incremental-22.10.0.tar.gz", hash = "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0"}, -] - -[package.extras] -mypy = ["click (>=6.0)", "mypy (==0.812)", "twisted (>=16.4.0)"] -scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] - -[[package]] -name = "inflection" -version = "0.5.1" -description = "A port of Ruby on Rails inflector to Python" -optional = false -python-versions = ">=3.5" -files = [ - {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, - {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, -] - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] - -[[package]] -name = "jedi" -version = "0.19.0" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, -] - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - [[package]] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1635,228 +301,26 @@ MarkupSafe = ">=2.0" i18n = ["Babel (>=2.7)"] [[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" +name = "livereload" +version = "2.6.3" +description = "Python LiveReload is an awesome tool for web developers" +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = "*" files = [ - {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, - {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, -] - -[[package]] -name = "jsonschema" -version = "4.19.0" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, + {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, ] [package.dependencies] -attrs = ">=22.2.0" -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.7.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, -] - -[package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" - -[[package]] -name = "jwcrypto" -version = "1.5.0" -description = "Implementation of JOSE Web standards" -optional = false -python-versions = ">= 3.6" -files = [ - {file = "jwcrypto-1.5.0.tar.gz", hash = "sha256:2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d"}, -] - -[package.dependencies] -cryptography = ">=3.4" -deprecated = "*" - -[[package]] -name = "kombu" -version = "5.2.4" -description = "Messaging library for Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, - {file = "kombu-5.2.4.tar.gz", hash = "sha256:37cee3ee725f94ea8bb173eaab7c1760203ea53bbebae226328600f9d2799610"}, -] - -[package.dependencies] -amqp = ">=5.0.9,<6.0.0" -vine = "*" - -[package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (>=3.3.0,<3.12.1)"] -msgpack = ["msgpack"] -pyro = ["pyro4"] -qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] - -[[package]] -name = "lxml" -version = "4.9.3" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] - -[[package]] -name = "markdown" -version = "3.4.4" -description = "Python implementation of John Gruber's Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, - {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] -testing = ["coverage", "pyyaml"] +six = "*" +tornado = {version = "*", markers = "python_version > \"2.7\""} [[package]] name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1881,6 +345,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1904,6 +369,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -1936,24 +411,11 @@ files = [ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - [[package]] name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1973,6 +435,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1980,187 +443,11 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "msgpack" -version = "1.0.5" -description = "MessagePack serializer" -optional = false -python-versions = "*" -files = [ - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, - {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, - {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, - {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, - {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, - {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, - {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, - {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, - {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, - {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, - {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, - {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, - {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, - {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, - {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, - {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, -] - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, -] - -[[package]] -name = "musicbrainzngs" -version = "0.7.1" -description = "Python bindings for the MusicBrainz NGS and the Cover Art Archive webservices" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "musicbrainzngs-0.7.1-py2.py3-none-any.whl", hash = "sha256:e841a8f975104c0a72290b09f59326050194081a5ae62ee512f41915090e1a10"}, - {file = "musicbrainzngs-0.7.1.tar.gz", hash = "sha256:ab1c0100fd0b305852e65f2ed4113c6de12e68afd55186987b8ed97e0f98e627"}, -] - -[[package]] -name = "mutagen" -version = "1.46.0" -description = "read and write audio tags for many formats" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mutagen-1.46.0-py3-none-any.whl", hash = "sha256:8af0728aa2d5c3ee5a727e28d0627966641fddfe804c23eabb5926a4d770aed5"}, - {file = "mutagen-1.46.0.tar.gz", hash = "sha256:6e5f8ba84836b99fe60be5fb27f84be4ad919bbb6b49caa6ae81e70584b55e58"}, -] - [[package]] name = "myst-parser" version = "1.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2183,276 +470,23 @@ rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4. testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.6" -files = [ - {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, - {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "persisting-theory" -version = "1.0" -description = "Registries that can autodiscover values accross your project apps" -optional = false -python-versions = "*" -files = [ - {file = "persisting-theory-1.0.tar.gz", hash = "sha256:0f840fa22247bcaa514094da7f3b26c602359429ab12d2cd88be06b49a336290"}, - {file = "persisting_theory-1.0-py3-none-any.whl", hash = "sha256:73fe3ba1ea7ab67632a1c292fc5c9fa6d3ebfd0e2ad74defa56e316abf3c8d21"}, -] - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - -[[package]] -name = "pillow" -version = "9.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "pluralizer" -version = "1.2.0" -description = "Singularize or pluralize a given word useing a pre-defined list of rules" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pluralizer-1.2.0-py3-none-any.whl", hash = "sha256:d8f92ffa787661d9e704d1e0d8abc6c6c4bbaae9e790d7c709707eafbe17ed12"}, - {file = "pluralizer-1.2.0.tar.gz", hash = "sha256:fe3fb8e1e53fabf372e77d8cbebe04b0f8fc7db853aeff50095dbd5628ac39c5"}, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.39" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psycopg2" -version = "2.9.7" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, - {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, - {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, - {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, - {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, - {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, - {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, - {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, - {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "pyasn1" -version = "0.5.0" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, -] - -[[package]] -name = "pyasn1-modules" -version = "0.3.0" -description = "A collection of ASN.1-based protocols modules" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, - {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, -] - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.6.0" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pydub" -version = "0.25.1" -description = "Manipulate audio with an simple and easy high level interface" -optional = false -python-versions = "*" -files = [ - {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, - {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2463,120 +497,11 @@ files = [ [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pyld" -version = "2.0.3" -description = "Python implementation of the JSON-LD API" -optional = false -python-versions = "*" -files = [ - {file = "PyLD-2.0.3.tar.gz", hash = "sha256:287445f888c3a332ccbd20a14844c66c2fcbaeab3c99acd506a0788e2ebb2f82"}, -] - -[package.dependencies] -cachetools = "*" -frozendict = "*" -lxml = "*" - -[package.extras] -aiohttp = ["aiohttp"] -cachetools = ["cachetools"] -frozendict = ["frozendict"] -requests = ["requests"] - -[[package]] -name = "pyopenssl" -version = "23.2.0" -description = "Python wrapper module around the OpenSSL library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, - {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, -] - -[package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" - -[package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-ldap" -version = "3.4.3" -description = "Python modules for implementing LDAP clients" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, -] - -[package.dependencies] -pyasn1 = ">=0.3.7" -pyasn1_modules = ">=0.1.5" - -[[package]] -name = "python-magic" -version = "0.4.27" -description = "File type identification using libmagic" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, - {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, -] - -[[package]] -name = "python3-openid" -version = "3.2.0" -description = "OpenID support for modern servers and consumers." -optional = false -python-versions = "*" -files = [ - {file = "python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf"}, - {file = "python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b"}, -] - -[package.dependencies] -defusedxml = "*" - -[package.extras] -mysql = ["mysql-connector-python"] -postgresql = ["psycopg2"] - [[package]] name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -2588,6 +513,7 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2596,6 +522,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2603,8 +530,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2621,6 +555,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2628,316 +563,56 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] -name = "redis" -version = "4.5.5" -description = "Python client for Redis database and key-value store" +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, - {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} - -[package.extras] -hiredis = ["hiredis (>=1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] - -[[package]] -name = "referencing" -version = "0.30.2" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "requests-http-message-signatures" -version = "0.3.1" -description = "A request authentication plugin implementing IETF HTTP Message Signatures" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "requests-http-message-signatures-0.3.1.tar.gz", hash = "sha256:0235bb5cd3f4a7d659645e2ac937da72791321434e77570f7e21042e510820da"}, - {file = "requests_http_message_signatures-0.3.1-py3-none-any.whl", hash = "sha256:c20d49adecbebdccfa98676b0760c12a8c2753d262dcb3a8f54cd672794bfb85"}, -] - -[package.dependencies] -cryptography = ">=1.8.2" -requests = ">=2,<3" - -[[package]] -name = "requests-oauthlib" -version = "1.3.1" -description = "OAuthlib authentication support for Requests." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, -] - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "rpds-py" -version = "0.10.2" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.10.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c"}, - {file = "rpds_py-0.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08"}, - {file = "rpds_py-0.10.2-cp310-none-win32.whl", hash = "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a"}, - {file = "rpds_py-0.10.2-cp310-none-win_amd64.whl", hash = "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2"}, - {file = "rpds_py-0.10.2-cp311-none-win32.whl", hash = "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214"}, - {file = "rpds_py-0.10.2-cp311-none-win_amd64.whl", hash = "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab"}, - {file = "rpds_py-0.10.2-cp38-none-win32.whl", hash = "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a"}, - {file = "rpds_py-0.10.2-cp38-none-win_amd64.whl", hash = "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09"}, - {file = "rpds_py-0.10.2-cp39-none-win32.whl", hash = "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968"}, - {file = "rpds_py-0.10.2-cp39-none-win_amd64.whl", hash = "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1"}, - {file = "rpds_py-0.10.2.tar.gz", hash = "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b"}, -] - -[[package]] -name = "s3transfer" -version = "0.6.2" -description = "An Amazon S3 Transfer Manager" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, - {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, -] - -[package.dependencies] -botocore = ">=1.12.36,<2.0a.0" - -[package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] - -[[package]] -name = "sentry-sdk" -version = "1.19.1" -description = "Python client for Sentry (https://sentry.io)" -optional = false -python-versions = "*" -files = [ - {file = "sentry-sdk-1.19.1.tar.gz", hash = "sha256:7ae78bd921981a5010ab540d6bdf3b793659a4db8cccf7f16180702d48a80d84"}, - {file = "sentry_sdk-1.19.1-py2.py3-none-any.whl", hash = "sha256:885a11c69df23e53eb281d003b9ff15a5bdfa43d8a2a53589be52104a1b4582f"}, -] - -[package.dependencies] -certifi = "*" -urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} - -[package.extras] -aiohttp = ["aiohttp (>=3.5)"] -arq = ["arq (>=0.23)"] -beam = ["apache-beam (>=2.12)"] -bottle = ["bottle (>=0.12.13)"] -celery = ["celery (>=3)"] -chalice = ["chalice (>=1.16.0)"] -django = ["django (>=1.8)"] -falcon = ["falcon (>=1.4)"] -fastapi = ["fastapi (>=0.79.0)"] -flask = ["blinker (>=1.1)", "flask (>=0.11)"] -grpcio = ["grpcio (>=1.21.1)"] -httpx = ["httpx (>=0.16.0)"] -huey = ["huey (>=2)"] -opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -pure-eval = ["asttokens", "executing", "pure-eval"] -pymongo = ["pymongo (>=3.1)"] -pyspark = ["pyspark (>=2.4.4)"] -quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] -rq = ["rq (>=0.6)"] -sanic = ["sanic (>=0.8)"] -sqlalchemy = ["sqlalchemy (>=1.2)"] -starlette = ["starlette (>=0.19.1)"] -starlite = ["starlite (>=1.48)"] -tornado = ["tornado (>=5)"] - -[[package]] -name = "service-identity" -version = "21.1.0" -description = "Service identity verification for pyOpenSSL & cryptography." -optional = false -python-versions = "*" -files = [ - {file = "service-identity-21.1.0.tar.gz", hash = "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34"}, - {file = "service_identity-21.1.0-py2.py3-none-any.whl", hash = "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db"}, -] - -[package.dependencies] -attrs = ">=19.1.0" -cryptography = "*" -pyasn1 = "*" -pyasn1-modules = "*" -six = "*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "idna", "pyOpenSSL", "pytest", "sphinx"] -docs = ["furo", "sphinx"] -idna = ["idna"] -tests = ["coverage[toml] (>=5.0.2)", "pytest"] - [[package]] name = "setuptools" -version = "68.2.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.0-py3-none-any.whl", hash = "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"}, - {file = "setuptools-68.2.0.tar.gz", hash = "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "sgmllib3k" -version = "1.0.0" -description = "Py3k port of sgmllib." -optional = false -python-versions = "*" -files = [ - {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, -] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2945,21 +620,11 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - [[package]] name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" optional = false python-versions = "*" files = [ @@ -2971,6 +636,7 @@ files = [ name = "sphinx" version = "5.3.0" description = "Python documentation generator" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3006,6 +672,7 @@ test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3024,6 +691,7 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-design" version = "0.3.0" description = "A sphinx extension for designing beautiful, view size responsive web components." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3047,6 +715,7 @@ theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] name = "sphinx-intl" version = "2.0.1" description = "Sphinx utility that make it easy to translate and to apply translation." +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3067,6 +736,7 @@ transifex = ["transifex_client (>=0.11)"] name = "sphinx-rtd-theme" version = "1.1.1" description = "Read the Docs theme for Sphinx" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -3085,6 +755,7 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3100,6 +771,7 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3115,6 +787,7 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3130,6 +803,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3144,6 +818,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-mermaid" version = "0.7.1" description = "Mermaid diagrams in yours Sphinx powered docs" +category = "main" optional = false python-versions = "*" files = [ @@ -3155,6 +830,7 @@ files = [ name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3170,6 +846,7 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3185,6 +862,7 @@ test = ["pytest"] name = "sqlparse" version = "0.4.4" description = "A non-validating SQL parser." +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3198,657 +876,73 @@ doc = ["sphinx"] test = ["pytest", "pytest-cov"] [[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" +name = "tornado" +version = "6.3.3" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">= 3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, ] -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] - -[[package]] -name = "twisted" -version = "23.8.0" -description = "An asynchronous networking framework written in Python" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "twisted-23.8.0-py3-none-any.whl", hash = "sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd"}, - {file = "twisted-23.8.0.tar.gz", hash = "sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24"}, -] - -[package.dependencies] -attrs = ">=21.3.0" -automat = ">=0.8.0" -constantly = ">=15.1" -hyperlink = ">=17.1.1" -idna = {version = ">=2.4", optional = true, markers = "extra == \"tls\""} -incremental = ">=22.10.0" -pyopenssl = {version = ">=21.0.0", optional = true, markers = "extra == \"tls\""} -service-identity = {version = ">=18.1.0", optional = true, markers = "extra == \"tls\""} -twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} -typing-extensions = ">=3.10.0" -zope-interface = ">=5" - -[package.extras] -all-non-platform = ["twisted[conch,contextvars,http2,serial,test,tls]", "twisted[conch,contextvars,http2,serial,test,tls]"] -conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] -contextvars = ["contextvars (>=2.4,<3)"] -dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=23.4.0,<23.5.0)", "pydoctor (>=23.4.0,<23.5.0)", "readthedocs-sphinx-ext (>=2.2,<3.0)", "readthedocs-sphinx-ext (>=2.2,<3.0)", "sphinx (>=5,<7)", "sphinx (>=5,<7)", "sphinx-rtd-theme (>=1.2,<2.0)", "sphinx-rtd-theme (>=1.2,<2.0)", "towncrier (>=22.12,<23.0)", "towncrier (>=22.12,<23.0)", "urllib3 (<2)", "urllib3 (<2)"] -gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] -http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] -macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] -mypy = ["mypy (==0.981)", "mypy-extensions (==0.4.3)", "mypy-zope (==0.3.11)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] -osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] -serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] -test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] -tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] -windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platform]", "twisted[all-non-platform]"] - -[[package]] -name = "twisted-iocpsupport" -version = "1.0.4" -description = "An extension for use in the twisted I/O Completion Ports reactor." -optional = false -python-versions = "*" -files = [ - {file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"}, - {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win32.whl", hash = "sha256:afa2b630797f9ed2f27f3d9f55e3f72b4244911e45a8c82756f44babbf0b243e"}, - {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:0058c963c8957bcd3deda62122e89953c9de1e867a274facc9b15dde1a9f31e8"}, - {file = "twisted_iocpsupport-1.0.4-cp311-cp311-win32.whl", hash = "sha256:196f7c7ccad4ba4d1783b1c4e1d1b22d93c04275cd780bf7498d16c77319ad6e"}, - {file = "twisted_iocpsupport-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:4e5f97bcbabdd79cbaa969b63439b89801ea560f11d42b0a387634275c633623"}, - {file = "twisted_iocpsupport-1.0.4-cp312-cp312-win32.whl", hash = "sha256:6081bd7c2f4fcf9b383dcdb3b3385d75a26a7c9d2be25b6950c3d8ea652d2d2d"}, - {file = "twisted_iocpsupport-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:76f7e67cec1f1d097d1f4ed7de41be3d74546e1a4ede0c7d56e775c4dce5dfb0"}, - {file = "twisted_iocpsupport-1.0.4-cp36-cp36m-win32.whl", hash = "sha256:3d306fc4d88a6bcf61ce9d572c738b918578121bfd72891625fab314549024b5"}, - {file = "twisted_iocpsupport-1.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:391ac4d6002a80e15f35adc4ad6056f4fe1c17ceb0d1f98ba01b0f4f917adfd7"}, - {file = "twisted_iocpsupport-1.0.4-cp37-cp37m-win32.whl", hash = "sha256:0c1b5cf37f0b2d96cc3c9bc86fff16613b9f5d0ca565c96cf1f1fb8cfca4b81c"}, - {file = "twisted_iocpsupport-1.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:3c5dc11d72519e55f727320e3cee535feedfaee09c0f0765ed1ca7badff1ab3c"}, - {file = "twisted_iocpsupport-1.0.4-cp38-cp38-win32.whl", hash = "sha256:cc86c2ef598c15d824a243c2541c29459881c67fc3c0adb6efe2242f8f0ec3af"}, - {file = "twisted_iocpsupport-1.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c27985e949b9b1a1fb4c20c71d315c10ea0f93fdf3ccdd4a8c158b5926edd8c8"}, - {file = "twisted_iocpsupport-1.0.4-cp39-cp39-win32.whl", hash = "sha256:e311dfcb470696e3c077249615893cada598e62fa7c4e4ca090167bd2b7d331f"}, - {file = "twisted_iocpsupport-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:4574eef1f3bb81501fb02f911298af3c02fe8179c31a33b361dd49180c3e644d"}, - {file = "twisted_iocpsupport-1.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:872747a3b64e2909aee59c803ccd0bceb9b75bf27915520ebd32d69687040fa2"}, - {file = "twisted_iocpsupport-1.0.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:c2712b778bacf1db434e3e065adfed3db300754186a29aecac1efae9ef4bcaff"}, - {file = "twisted_iocpsupport-1.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7c66fa0aa4236b27b3c61cb488662d85dae746a6d1c7b0d91cf7aae118445adf"}, - {file = "twisted_iocpsupport-1.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:300437af17396a945a58dcfffd77863303a8b6d9e65c6e81f1d2eed55b50d444"}, -] - -[[package]] -name = "txaio" -version = "23.1.1" -description = "Compatibility API between asyncio/Twisted/Trollius" -optional = false -python-versions = ">=3.7" -files = [ - {file = "txaio-23.1.1-py2.py3-none-any.whl", hash = "sha256:aaea42f8aad50e0ecfb976130ada140797e9dcb85fad2cf72b0f37f8cefcb490"}, - {file = "txaio-23.1.1.tar.gz", hash = "sha256:f9a9216e976e5e3246dfd112ad7ad55ca915606b60b84a757ac769bd404ff704"}, -] - -[package.extras] -all = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] -dev = ["pep8 (>=1.6.2)", "pyenchant (>=1.6.6)", "pytest (>=2.6.4)", "pytest-cov (>=1.8.1)", "sphinx (>=1.2.3)", "sphinx-rtd-theme (>=0.1.9)", "sphinxcontrib-spelling (>=2.1.2)", "tox (>=2.1.1)", "tox-gh-actions (>=2.2.0)", "twine (>=1.6.5)", "wheel"] -twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] - [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "unicode-slugify" -version = "0.1.5" -description = "A slug generator that turns strings into unicode slugs." -optional = false -python-versions = "*" -files = [ - {file = "unicode-slugify-0.1.5.tar.gz", hash = "sha256:25f424258317e4cb41093e2953374b3af1f23097297664731cdb3ae46f6bd6c3"}, - {file = "unicode_slugify-0.1.5-py3-none-any.whl", hash = "sha256:33a11c0ac901f7220659dd0dd6f232cf39637dfd1b9f5f35ef5ead9fef696879"}, -] - -[package.dependencies] -six = "*" -unidecode = "*" - -[[package]] -name = "unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -optional = false -python-versions = ">=3.5" -files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, -] - -[[package]] -name = "uritemplate" -version = "4.1.1" -description = "Implementation of RFC 6570 URI Templates" -optional = false -python-versions = ">=3.6" -files = [ - {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, - {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] name = "urllib3" -version = "1.26.16" +version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.20.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvicorn-0.20.0-py3-none-any.whl", hash = "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"}, - {file = "uvicorn-0.20.0.tar.gz", hash = "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.17.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, - {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, - {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, -] - -[package.extras] -dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] - -[[package]] -name = "vine" -version = "5.0.0" -description = "Promises, promises, promises." -optional = false -python-versions = ">=3.6" -files = [ - {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, - {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, -] - -[[package]] -name = "watchdog" -version = "2.2.1" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.6" -files = [ - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:102a60093090fc3ff76c983367b19849b7cc24ec414a43c0333680106e62aae1"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:748ca797ff59962e83cc8e4b233f87113f3cf247c23e6be58b8a2885c7337aa3"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ccd8d84b9490a82b51b230740468116b8205822ea5fdc700a553d92661253a3"}, - {file = "watchdog-2.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e01d699cd260d59b84da6bda019dce0a3353e3fcc774408ae767fe88ee096b7"}, - {file = "watchdog-2.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8586d98c494690482c963ffb24c49bf9c8c2fe0589cec4dc2f753b78d1ec301d"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:adaf2ece15f3afa33a6b45f76b333a7da9256e1360003032524d61bdb4c422ae"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a7cead445008e880dbde833cb9e5cc7b9a0958edb697a96b936621975f15b9"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8ac23ff2c2df4471a61af6490f847633024e5aa120567e08d07af5718c9d092"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d0f29fd9f3f149a5277929de33b4f121a04cf84bb494634707cfa8ea8ae106a8"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:967636031fa4c4955f0f3f22da3c5c418aa65d50908d31b73b3b3ffd66d60640"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96cbeb494e6cbe3ae6aacc430e678ce4b4dd3ae5125035f72b6eb4e5e9eb4f4e"}, - {file = "watchdog-2.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61fdb8e9c57baf625e27e1420e7ca17f7d2023929cd0065eb79c83da1dfbeacd"}, - {file = "watchdog-2.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb5ecc332112017fbdb19ede78d92e29a8165c46b68a0b8ccbd0a154f196d5e"}, - {file = "watchdog-2.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a480d122740debf0afac4ddd583c6c0bb519c24f817b42ed6f850e2f6f9d64a8"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:978a1aed55de0b807913b7482d09943b23a2d634040b112bdf31811a422f6344"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:8c28c23972ec9c524967895ccb1954bc6f6d4a557d36e681a36e84368660c4ce"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_i686.whl", hash = "sha256:c27d8c1535fd4474e40a4b5e01f4ba6720bac58e6751c667895cbc5c8a7af33c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d6b87477752bd86ac5392ecb9eeed92b416898c30bd40c7e2dd03c3146105646"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cece1aa596027ff56369f0b50a9de209920e1df9ac6d02c7f9e5d8162eb4f02b"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:8b5cde14e5c72b2df5d074774bdff69e9b55da77e102a91f36ef26ca35f9819c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e038be858425c4f621900b8ff1a3a1330d9edcfeaa1c0468aeb7e330fb87693e"}, - {file = "watchdog-2.2.1-py3-none-win32.whl", hash = "sha256:bc43c1b24d2f86b6e1cc15f68635a959388219426109233e606517ff7d0a5a73"}, - {file = "watchdog-2.2.1-py3-none-win_amd64.whl", hash = "sha256:17f1708f7410af92ddf591e94ae71a27a13974559e72f7e9fde3ec174b26ba2e"}, - {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, - {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "watchfiles" -version = "0.20.0" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "watchfiles-0.20.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9"}, - {file = "watchfiles-0.20.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164"}, - {file = "watchfiles-0.20.0-cp37-abi3-win32.whl", hash = "sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_amd64.whl", hash = "sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_arm64.whl", hash = "sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce"}, - {file = "watchfiles-0.20.0.tar.gz", hash = "sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websockets" -version = "11.0.3" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, -] - -[[package]] -name = "wrapt" -version = "1.15.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, -] - -[[package]] -name = "yarl" -version = "1.9.2" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] -[[package]] -name = "zope-interface" -version = "6.0" -description = "Interfaces for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "zope.interface-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990"}, - {file = "zope.interface-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f"}, - {file = "zope.interface-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518"}, - {file = "zope.interface-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb"}, - {file = "zope.interface-6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc"}, - {file = "zope.interface-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f"}, - {file = "zope.interface-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2"}, - {file = "zope.interface-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5"}, - {file = "zope.interface-6.0.tar.gz", hash = "sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"}, -] - -[package.dependencies] -setuptools = "*" - -[package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface"] -test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] -testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] - [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "9f1b0b741e3bf9068a7c7705822b7a49d56817ce1c54701344eb87d4cf401c72" +content-hash = "68e8ecdc189a3b61ed1e8d4889c71a8686dd68684962a4ca7f964de77073cb06" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 952c9ec12..05f1d53c6 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -10,6 +10,7 @@ python = "^3.8" sphinx = "==5.3.0" sphinx_design = "==0.3.0" +sphinx-copybutton = "==0.5.2" sphinx-intl = "2.0.1" sphinx-rtd-theme = "==1.1.1" sphinxcontrib-mermaid = "0.7.1" @@ -17,10 +18,9 @@ myst-parser = "1.0.0" django = "==3.2.20" django-environ = "==0.10.0" -funkwhale-api = {path = "../api"} -sphinx-copybutton = "==0.5.2" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] +livereload = "^2.6.3" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/docs/serve.py b/docs/serve.py deleted file mode 100755 index 3c4132a7f..000000000 --- a/docs/serve.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 -from subprocess import call - -# initial make -call(["python3", "-m", "sphinx", ".", "/tmp/_build"]) -from livereload import Server, shell # noqa: E402 - -server = Server() -server.watch("..", shell("python3 -m sphinx . /tmp/_build")) -server.serve(root="/tmp/_build/", liveport=35730, port=8001, host="0.0.0.0") From 73364145c32a1039623e53eaee8a70ab5fb32a26 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 13:15:14 +0000 Subject: [PATCH 024/371] chore: Delete obsolete script Part-of: --- docs/get-releases-json.py | 58 --------------------------------------- 1 file changed, 58 deletions(-) delete mode 100755 docs/get-releases-json.py diff --git a/docs/get-releases-json.py b/docs/get-releases-json.py deleted file mode 100755 index a668dc104..000000000 --- a/docs/get-releases-json.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import json -import subprocess -from distutils.version import StrictVersion - - -def get_versions(): - output = subprocess.check_output( - ["git", "tag", "-l", "--format=%(creatordate:iso-strict)|%(refname:short)"] - ) - tags = [] - - for line in output.decode().splitlines(): - try: - date, tag = line.split("|") - except ValueError: - continue - - if not date or not tag: - continue - - tags.append({"id": tag, "date": date}) - valid = [] - for tag in tags: - try: - StrictVersion(tag["id"]) - valid.append(tag) - except ValueError: - continue - - return sorted(valid, key=lambda tag: StrictVersion(tag["id"]), reverse=True) - - -def main(latest=False): - versions = get_versions() - if latest: - print(versions[0]["id"]) - else: - data = {"count": len(versions), "releases": versions} - print(json.dumps(data, sort_keys=True, indent=2)) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - """ - Compile release data and output in in JSON format - """ - ) - parser.add_argument( - "-l", - "--latest", - action="store_true", - help="Only print the latest version then exit", - ) - args = parser.parse_args() - main(latest=args.latest) From e0f6641bbad3e01526c6572267ce422a744782ad Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 13:15:49 +0000 Subject: [PATCH 025/371] fix(docs): Make sure required directory exists Part-of: --- docs/Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index 1d6f41e68..46ec3053f 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -20,6 +20,9 @@ SPHINX_OPTS = -j $(CPU_CORES) SOURCE_DIR = . BUILD_DIR = _build +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + # Dev dev: $(VENV) poetry run _scripts/serve.py @@ -57,10 +60,10 @@ swagger: cp schema.yml "$(SWAGGER_BUILD_DIR)/schema.yml" # Releases -$(BUILD_DIR)/releases.json: +$(BUILD_DIR)/releases.json: $(BUILD_DIR) ../scripts/releases.py > "$@" -$(BUILD_DIR)/latest.txt: +$(BUILD_DIR)/latest.txt: $(BUILD_DIR) ../scripts/releases.py -r -q latest.id > "$@" releases: $(BUILD_DIR)/releases.json $(BUILD_DIR)/latest.txt From 47efcb4b5a22e9581e0366a4750b446f17d95b81 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 13:16:32 +0000 Subject: [PATCH 026/371] fix(docs): Use correct path configs Part-of: --- docs/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 8d6185431..59c467392 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -46,9 +46,9 @@ extensions = [ source_suffix = ".md" include_patterns = [ "_static/**", - "_templates/**", "*_documentation/**", "*.md", + "**/*.md", "*.rst", "logo.svg", ] @@ -61,6 +61,7 @@ exclude_patterns = [ "*.py", "*.sh", ] +templates_path = ["_templates"] root_doc = "index" From 58a5733987046595698f96f1fa0f4cd7f350b482 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 20:13:27 +0000 Subject: [PATCH 027/371] fix(docs): Allow make to be run on MacOS Part-of: --- docs/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/Makefile b/docs/Makefile index 46ec3053f..c3ec7524b 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,5 +1,10 @@ SHELL = bash +UNAME := $(shell uname) +ifeq ($(UNAME), Linux) CPU_CORES = $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) +else +CPU_CORES = $(shell N=$$(sysctl -n hw.physicalcpu); echo $$(( $$N > 4 ? 4 : $$N ))) +endif # Install VENV = .venv From 163e9310fc91c83c0ccc1cf6cf2a026ab40034e8 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 20:20:51 +0000 Subject: [PATCH 028/371] Update contributor documentation for the docs Part-of: --- docs/contributor/documentation.md | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/docs/contributor/documentation.md b/docs/contributor/documentation.md index 16c4b3f22..923df1257 100644 --- a/docs/contributor/documentation.md +++ b/docs/contributor/documentation.md @@ -15,7 +15,7 @@ We try to document Funkwhale as thoroughly as possible to make it easy for users To work on Funkwhale's documentation, you need the following: - [Git](https://git-scm.com): our version control system -- [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/): used to run our development environment +- [Poetry](https://python-poetry.org/): A python packaging tool and dependency manager - A text editor of your choice ## Tooling @@ -36,31 +36,7 @@ Here are some basic rules to follow: ## Local setup -We provide a docker container for our documentation to make it easy to work on docs with a real-time preview. Once you install [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/), do the following to get a live preview: - -1. Create a dummy `.env` file - - ```{code-block} sh - touch .env - ``` - -2. Create a dummy federation network - - ```{code-block} sh - sudo docker network create federation - ``` - -3. Build the container - - ```{code-block} sh - sudo docker compose -f dev.yml build docs - ``` - -4. Run the container - - ```{code-block} sh - sudo docker compose -f dev.yml up docs - ``` +We provide a fully automated setup for a local live-preview of your changes. Make sure you meet the requirements outlined above and run `make dev`. A real-time preview of the documentation is available on `http://0.0.0.1:8001` From a752a83ac0e477092d5cae50d0e8ab02bf218982 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 20:22:48 +0000 Subject: [PATCH 029/371] feat(docs): Run documentation dev server in Gitpod Part-of: --- .gitpod.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitpod.yml b/.gitpod.yml index 9b831f29a..d925d1925 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -48,6 +48,11 @@ tasks: yarn install command: yarn dev --host 0.0.0.0 --base ./ + - name: Documentation + before: cd docs + init: make install + command: make dev + - name: Welcome to Funkwhale development! env: COMPOSE_FILE: /workspace/funkwhale/.gitpod/docker-compose.yml @@ -91,6 +96,10 @@ ports: visibility: private onOpen: ignore + - port: 8001 + visibility: public + onOpen: notify + vscode: extensions: - Vue.volar From 623d1571ee16f0f899f7fa8371c81cbe1ecdbeb8 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 2 Nov 2023 08:15:21 +0000 Subject: [PATCH 030/371] refactor(docs): Replace custom serve script with sphinx-autoreload Part-of: --- docs/Makefile | 2 +- docs/_scripts/serve.py | 22 ---------------------- docs/poetry.lock | 22 +++++++++++++++++++++- docs/pyproject.toml | 2 +- 4 files changed, 23 insertions(+), 25 deletions(-) delete mode 100755 docs/_scripts/serve.py diff --git a/docs/Makefile b/docs/Makefile index c3ec7524b..055b8cbe2 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -30,7 +30,7 @@ $(BUILD_DIR): # Dev dev: $(VENV) - poetry run _scripts/serve.py + poetry run sphinx-autobuild . /tmp/_build/ --port 8001 # I18n LOCALES = en_GB en_US fr diff --git a/docs/_scripts/serve.py b/docs/_scripts/serve.py deleted file mode 100755 index 71edcde2e..000000000 --- a/docs/_scripts/serve.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python3 - -from subprocess import check_call - -from livereload import Server, shell - -BUILD_DIR = "/tmp/_build" - - -def main() -> int: - # initial make - check_call(["make", "build", f"BUILD_DIR={BUILD_DIR}"]) - - server = Server() - server.watch("..", shell(f"make build BUILD_DIR={BUILD_DIR}")) - server.serve(root=BUILD_DIR, liveport=35730, port=8001, host="0.0.0.0") - - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/docs/poetry.lock b/docs/poetry.lock index 4a045e71b..5ce14e355 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -668,6 +668,26 @@ docs = ["sphinxcontrib-websupport"] lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +[[package]] +name = "sphinx-autobuild" +version = "2021.3.14" +description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "sphinx-autobuild-2021.3.14.tar.gz", hash = "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05"}, + {file = "sphinx_autobuild-2021.3.14-py3-none-any.whl", hash = "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac"}, +] + +[package.dependencies] +colorama = "*" +livereload = "*" +sphinx = "*" + +[package.extras] +test = ["pytest", "pytest-cov"] + [[package]] name = "sphinx-copybutton" version = "0.5.2" @@ -945,4 +965,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "68e8ecdc189a3b61ed1e8d4889c71a8686dd68684962a4ca7f964de77073cb06" +content-hash = "4b3f45e96f90e41f1d8b767463353fe420cee43794fb13383100f134e0ad23d6" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 05f1d53c6..99a23a659 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -20,7 +20,7 @@ django = "==3.2.20" django-environ = "==0.10.0" [tool.poetry.group.dev.dependencies] -livereload = "^2.6.3" +sphinx-autobuild = "^2021.3.14" [build-system] requires = ["poetry-core>=1.0.0"] From bb1c6d935a0090fcac4d5bb5f97955171a6a26b3 Mon Sep 17 00:00:00 2001 From: jooola Date: Thu, 2 Nov 2023 08:55:12 +0000 Subject: [PATCH 031/371] chore: Remove logging handler Part-of: --- scripts/releases.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/releases.py b/scripts/releases.py index ce3f06be3..fe9abb6f1 100755 --- a/scripts/releases.py +++ b/scripts/releases.py @@ -11,7 +11,6 @@ from typing import Dict, List from packaging.version import InvalidVersion, Version logger = logging.getLogger(__name__) -logger.addHandler(logging.NullHandler()) def get_releases() -> List[Dict[str, str]]: From 7ecd3e6767413075843af3e572b2691c223fb18b Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 2 Nov 2023 10:39:13 +0100 Subject: [PATCH 032/371] chore(docs): Remove docker setup Part-of: --- dev.yml | 11 ----------- docs/Dockerfile | 19 ------------------- 2 files changed, 30 deletions(-) delete mode 100644 docs/Dockerfile diff --git a/dev.yml b/dev.yml index a306d753f..444ec82b6 100644 --- a/dev.yml +++ b/dev.yml @@ -152,17 +152,6 @@ services: traefik.frontend.passHostHeader: true traefik.docker.network: federation - docs: - build: docs - command: make clean dev - working_dir: /src/docs - user: 1000:1000 - volumes: - - .:/src - ports: - - 8001:8001 - - 35730:35730 - api-docs: image: swaggerapi/swagger-ui:v3.37.2 environment: diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index 7a463d8df..000000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM python:3.11 - -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 -ARG PIP_NO_CACHE_DIR=1 - -RUN set -eux \ - && DEBIAN_FRONTEND=noninteractive apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - curl \ - git \ - graphviz \ - make \ - && rm -rf /var/lib/apt/lists/* - -RUN set -eux \ - && pip install --upgrade pip \ - && pip install setuptools wheel pipx \ - && PIPX_BIN_DIR=/usr/local/bin pipx install poetry From 7ccb2d88f8cfbc39a7823ef8f3970397ef606352 Mon Sep 17 00:00:00 2001 From: petitminion Date: Fri, 3 Nov 2023 16:13:53 +0000 Subject: [PATCH 033/371] Avoid troi radio to give duplicates (#2231) --- .../radios/lb_recommendations.py | 61 +++++++++++-------- changes/changelog.d/2231.bugfix | 1 + 2 files changed, 38 insertions(+), 24 deletions(-) create mode 100644 changes/changelog.d/2231.bugfix diff --git a/api/funkwhale_api/radios/lb_recommendations.py b/api/funkwhale_api/radios/lb_recommendations.py index a50441418..ad67c6e91 100644 --- a/api/funkwhale_api/radios/lb_recommendations.py +++ b/api/funkwhale_api/radios/lb_recommendations.py @@ -56,33 +56,37 @@ def build_radio_queryset(patch, config, radio_qs): if not recommendations: raise ValueError("No candidates found by troi") - recommended_recording_mbids = [ + recommended_mbids = [ recommended_recording.mbid for recommended_recording in recommendations.playlists[0].recordings ] logger.info("Searching for MusicBrainz ID in Funkwhale database") - qs_mbid = music_models.Track.objects.all().filter( - mbid__in=recommended_recording_mbids + qs_recommended = ( + music_models.Track.objects.all() + .filter(mbid__in=recommended_mbids) + .order_by("mbid", "pk") + .distinct("mbid") ) - mbids_found = [str(i.mbid) for i in qs_mbid] + qs_recommended_mbid = [str(i.mbid) for i in qs_recommended] - recommended_recording_mbids_not_found = [ - mbid for mbid in recommended_recording_mbids if mbid not in mbids_found + recommended_mbids_not_qs = [ + mbid for mbid in recommended_mbids if mbid not in qs_recommended_mbid ] - cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found) + cached_match = cache.get_many(recommended_mbids_not_qs) + cached_match_mbid = [str(i) for i in cached_match.keys()] - if qs_mbid and cached_mbid_match: + if qs_recommended and cached_match_mbid: logger.info("MusicBrainz IDs found in Funkwhale database and redis") - mbids_found = [str(i.mbid) for i in qs_mbid] - mbids_found.extend([i for i in cached_mbid_match.keys()]) - elif qs_mbid and not cached_mbid_match: + qs_recommended_mbid.extend(cached_match_mbid) + mbids_found = qs_recommended_mbid + elif qs_recommended and not cached_match_mbid: logger.info("MusicBrainz IDs found in Funkwhale database") - mbids_found = mbids_found - elif not qs_mbid and cached_mbid_match: + mbids_found = qs_recommended_mbid + elif not qs_recommended and cached_match_mbid: logger.info("MusicBrainz IDs found in redis cache") - mbids_found = [i for i in cached_mbid_match.keys()] + mbids_found = cached_match_mbid else: logger.info( "Couldn't find any matches in Funkwhale database. Trying to match all" @@ -106,23 +110,32 @@ def build_radio_queryset(patch, config, radio_qs): + str(end_time_resolv - start_time_resolv) ) - cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found) + cached_match = cache.get_many(recommended_mbids) - if not qs_mbid and not cached_mbid_match: + if not mbids_found and not cached_match: raise ValueError("No candidates found for troi radio") - logger.info("Radio generation with troi took " + str(end_time_resolv - start_time)) - logger.info("qs_mbid is " + str(mbids_found)) + mbids_found_pks = list( + music_models.Track.objects.all() + .filter(mbid__in=mbids_found) + .order_by("mbid", "pk") + .distinct("mbid") + .values_list("pk", flat=True) + ) - if qs_mbid and cached_mbid_match: + mbids_found_pks_unique = [ + i for i in mbids_found_pks if i not in cached_match.keys() + ] + + if mbids_found and cached_match: return radio_qs.filter( - Q(mbid__in=mbids_found) | Q(pk__in=cached_mbid_match.values()) + Q(pk__in=mbids_found_pks_unique) | Q(pk__in=cached_match.values()) ) - if qs_mbid and not cached_mbid_match: - return radio_qs.filter(mbid__in=mbids_found) + if mbids_found and not cached_match: + return radio_qs.filter(pk__in=mbids_found_pks_unique) - if not qs_mbid and cached_mbid_match: - return radio_qs.filter(pk__in=cached_mbid_match.values()) + if not mbids_found and cached_match: + return radio_qs.filter(pk__in=cached_match.values()) class TroiPatch: diff --git a/changes/changelog.d/2231.bugfix b/changes/changelog.d/2231.bugfix new file mode 100644 index 000000000..e114bd9d1 --- /dev/null +++ b/changes/changelog.d/2231.bugfix @@ -0,0 +1 @@ +Avoid troi radio to give duplicates (#2231) From c69a48c4572b4c0ec28069dceee06fbf9815d467 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Sun, 5 Nov 2023 11:01:30 +0100 Subject: [PATCH 034/371] docs: Fix redirect loop Part-of: --- changes/changelog.d/moderator-docs-redirect-loop.doc | 1 + docs/redirects.txt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 changes/changelog.d/moderator-docs-redirect-loop.doc diff --git a/changes/changelog.d/moderator-docs-redirect-loop.doc b/changes/changelog.d/moderator-docs-redirect-loop.doc new file mode 100644 index 000000000..59b32af01 --- /dev/null +++ b/changes/changelog.d/moderator-docs-redirect-loop.doc @@ -0,0 +1 @@ +Fix a redirect loop on documentation for moderators diff --git a/docs/redirects.txt b/docs/redirects.txt index 7d4074b9b..a1441f3e2 100644 --- a/docs/redirects.txt +++ b/docs/redirects.txt @@ -15,7 +15,6 @@ users/followchannel.html, ../user/channels/follow.html users/follow.html, ../user/libraries/follow.html users/reports.html, ../user/reports/index.html users/builtinplugins.html, ../user/plugins/index.html -moderator/index.html, ../moderator/index.html moderator/reports.html, ../moderator/reports/index.html moderator/domains.html, ../moderator/domains/index.html moderator/users.html, ../moderator/users/index.html From cfb5850f7f12d0aa07d76029a7e1da9bea69d7b6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Nov 2023 10:33:57 +0000 Subject: [PATCH 035/371] chore: update pre-commit hook codespell-project/codespell to v2.2.6 Part-of: --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6226115a5..b59e1df12 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,7 +53,7 @@ repos: files: \.(md|yml|yaml|json)$ - repo: https://github.com/codespell-project/codespell - rev: v2.2.5 + rev: v2.2.6 hooks: - id: codespell additional_dependencies: [tomli] From 3a5090a85c1d1ea07d0f79a28aa5fa14a7c113cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 6 Nov 2023 11:46:08 +0000 Subject: [PATCH 036/371] feat(docs): update nodeinfo spec Part-of: --- changes/changelog.d/nodeinfo2-update.doc | 1 + docs/specs/nodeinfo21/index.md | 76 +++++++++++++----------- docs/specs/nodeinfo21/schema.yml | 54 +++++++++-------- 3 files changed, 71 insertions(+), 60 deletions(-) create mode 100644 changes/changelog.d/nodeinfo2-update.doc diff --git a/changes/changelog.d/nodeinfo2-update.doc b/changes/changelog.d/nodeinfo2-update.doc new file mode 100644 index 000000000..78b7de84b --- /dev/null +++ b/changes/changelog.d/nodeinfo2-update.doc @@ -0,0 +1 @@ +Updated the Nodeinfo 2 spec to address feedback from implementation. diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md index 32ed498aa..69797822a 100644 --- a/docs/specs/nodeinfo21/index.md +++ b/docs/specs/nodeinfo21/index.md @@ -55,12 +55,6 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `defaultUploadQuota` (Number) : The default upload quota (in megabytes) allowed for new users -`library.federationEnabled` (Boolean) -: Whether federation is enabled - -`library.anonymousCanListen` (Boolean) -: Whether public endpoints require authentication - `supportedUploadExtensions` (Array\) : A list of file extensions enabled for upload @@ -76,28 +70,37 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `instanceSupportMessage` (String) : The support message associated with the instance -`content.top_music_categories` (Array\) +`content.local` (Object) +: An object containing a summary of local content + +`content.local.artists` (number) +: The number of artists associated with local uploads on the pod + +`content.local.releases` (number) +: The number of albums or series associated with local uploads on the pod + +`content.local.recordings` (number) +: The number of tracks or episodes associated with local uploads on the pod + +`content.local.hoursOfContent` (number) +: The total number of hours of content associated with local uploads on the pod + +`content.topMusicCategories` (Array\) : The top three music genres and the number of uploads tagged with them -`content.top_podcast_categories` (Array\) +`content.topPodcastCategories` (Array\) : The top three podcast categories and the number of uploads tagged with them -`instance_policy.moderation_policy` (String) -: The moderation policy of the pod - -`instance_policy.terms_of_service` (String) -: The terms of service of the pod - -`instance_policy.languages` (Array\) +`languages` (Array\) : The languages spoken by the pod administrators -`instance_policy.location` (String) +`location` (String) : The country the pod is located in -`federation.follows_instances` (Number) +`federation.followsInstances` (Number) : The number of Funkwhale pods that the target pod follows -`federation.following_instances` (Number) +`federation.followingInstances` (Number) : The number of Funkwhale pods that publicly follow the target pod `features` (Array\) @@ -141,7 +144,7 @@ Example response: }, "metadata": { "actorId": "string", - "private": false, + "private": true, "shortDescription": "string", "longDescription": "string", "rules": "string", @@ -150,10 +153,6 @@ Example response: "nodeName": "string", "banner": "string", "defaultUploadQuota": 0, - "library": { - "federationEnabled": true, - "anonymousCanListen": true - }, "supportedUploadExtensions": ["string"], "allowList": { "enabled": true, @@ -161,14 +160,16 @@ Example response: }, "funkwhaleSupportMessageEnabled": true, "instanceSupportMessage": "string", - "instance_policy": { - "moderation_policy": "string", - "terms_of_service": "string", - "languages": ["string"], - "location": "string" - }, + "languages": ["string"], + "location": "string", "content": { - "top_music_categories": [ + "local": { + "artists": 1000, + "releases": 10000, + "recordings": 150000, + "hoursOfContent": 7500 + }, + "topMusicCategories": [ { "rock": 1256 }, @@ -179,7 +180,7 @@ Example response: "classical": 308 } ], - "top_podcast_categories": [ + "topPodcastCategories": [ { "comedy": 12 }, @@ -191,11 +192,18 @@ Example response: } ], "federation": { - "followed_instances": 0, - "following_instances": 0 + "followedInstances": 0, + "followingInstances": 0 } }, - "features": ["channels", "podcasts", "collections", "audiobooks"] + "features": [ + "channels", + "podcasts", + "collections", + "audiobooks", + "federation", + "anonymousCanListen" + ] } } ``` diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index 6f85665c7..f59d1d337 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -470,13 +470,6 @@ components: format: url defaultUploadQuota: type: integer - library: - type: object - properties: - federationEnabled: - type: boolean - anonymousCanListen: - type: boolean supportedUploadExtensions: type: array items: @@ -494,25 +487,32 @@ components: type: boolean instanceSupportMessage: type: string - instance_policy: - type: object - properties: - moderation_policy: - type: string - format: url - terms_of_service: - type: string - format: url - languages: - type: array - items: - type: string - location: - type: string + languages: + type: array + items: + type: string + location: + type: string content: type: object properties: - top_music_categories: + local: + type: object + properties: + artists: + type: number + releases: + type: number + recordings: + type: number + hoursOfContent: + type: number + example: + artists: 1000 + releases: 10000 + recordings: 150000 + hoursOfContent: 7500 + topMusicCategories: type: array items: type: object @@ -522,7 +522,7 @@ components: - "rock": 1256 - "jazz": 604 - "classical": 308 - top_podcast_categories: + topPodcastCategories: type: array items: type: object @@ -535,9 +535,9 @@ components: federation: type: object properties: - followed_instances: + followedInstances: type: integer - following_instances: + followingInstances: type: integer features: type: array @@ -548,6 +548,8 @@ components: - "podcasts" - "collections" - "audiobooks" + - "federation" + - "anonymousCanListen" Error: type: object properties: From 384a4d1974bb163262620417d43b8acebeb3401a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 6 Nov 2023 19:12:18 +0000 Subject: [PATCH 037/371] feat(docs): add user follow spec --- changes/changelog.d/follows.doc | 1 + docs/index.md | 1 + docs/specs/user-follow/index.md | 295 ++++++++++++++++++++++++++++++++ 3 files changed, 297 insertions(+) create mode 100644 changes/changelog.d/follows.doc create mode 100644 docs/specs/user-follow/index.md diff --git a/changes/changelog.d/follows.doc b/changes/changelog.d/follows.doc new file mode 100644 index 000000000..db91ce854 --- /dev/null +++ b/changes/changelog.d/follows.doc @@ -0,0 +1 @@ +Add spec for user following. diff --git a/docs/index.md b/docs/index.md index 6c8a73f7c..c5b56e996 100644 --- a/docs/index.md +++ b/docs/index.md @@ -105,6 +105,7 @@ specs/collections/index specs/nodeinfo21/index specs/offline-mode/index specs/quality-filter/index +specs/user-follow/index ``` diff --git a/docs/specs/user-follow/index.md b/docs/specs/user-follow/index.md new file mode 100644 index 000000000..c6b65618f --- /dev/null +++ b/docs/specs/user-follow/index.md @@ -0,0 +1,295 @@ +# User following + +## Terminology + +The following terminology is used throughout this document: + +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Follow +: The act of subscribing to a user's activities to render them in a feed as they occur. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object representing an entity capbable of performing actions. See the [ActivityPub specification][actor] for more details. + +Requesting user +: The user who sends a request. For example: If **Bob** requests to follow **Alice**, **Bob** is the requesting user. + +Target user +: The user who is the subject of a request. For example: If **Bob** requests to follow **Alice**, **Alice** is the target user. + +## The issue + +Funkwhale is an audio platform with an emphasis on social interaction across a federated network of servers. To this end, Funkwhale users should be able to interact with one another in meaningful ways. + +Funkwhale users broadcast the following activity when using the software: + +1. **Favoriting** content +2. **Listening** to content + +Users across the federated web should be able to follow Funkwhale accounts to receive this activity in their streams. + +## Proposed solution + +To facilitate this, Funkwhale uses the following mechanisms: + +- The **Funkwhale client API** for user to user interactions on the same server +- [ActivityPub](https://www.w3.org/TR/activitypub) for server-to-server (S2S) interactions between users + +Users should be able to discover other users using the [Webfinger protocol][webfinger] and render their public details in a manner compliant with the platform they use. Within Funkwhale, user activity should be rendered natively. Other Fediverse software may choose how to render this information. + +This specification outlines the workflows for the following actions for **local** and **remote** requests: + +1. User discovery +2. User follows +3. User unfollows +4. User blocking + +### User discovery + +Funkwhale implements the [Webfinger protocol][webfinger] for account discovery. When the **requesting user** enters the **target user's** federation handle, Funkwhale should attempt to resolve the location of the **target user** by querying the `acct:` resource with the URL encoded handle. + +#### Webfinger request + +```console +$ curl -X GET \ +-H "Content-type: application/json" \ +'https://open.audio/.well-known/webfinger?resource=acct:user%40open.audio' +``` + +#### Response + +```json +{ + "subject": "acct:user@open.audio", + "links": [ + { + "rel": "self", + "href": "https://open.audio/federation/actors/user", + "type": "application/activity+json" + } + ], + "aliases": ["https://open.audio/federation/actors/user"] +} +``` + +#### Web app behavior + +When a requesting user enters the handle of a target user in the search bar, Funkwhale does the following: + +1. Verifies the handle is well-formed +2. Forwards the request to the server + +The server is responsible for dereferencing the Webfinger query. The server does the following: + +1. Queries the domain for the account using Webfinger + - **If** the domain doesn't have a Webfinger endpoint, returns a meaningful error message. This must be displayed to the user. + - **If** the server is subject to a domain filter, or is filtering the requesting server, returns a meaningful error message. This must be displayed to the user. + - **If** no user is found on the domain, returns a meaningful error message. +2. If a matching user is found, the server should return the URL of the resource to the web app. The web app should then redirect the requesting user to a user page that shows the target user's profile image and preferred username + - **If** the target user has set their activity to **public**, the web app should render their **Favorites** and **Recently Listened** activity + +```{mermaid} +flowchart TD + search([A requesting user enters a fediverse handle\nin the search bar]) --> query(Funkwhale queries the target domain) + query --> webfinger{Does the target server\support Webfinger?} + subgraph Request verification + webfinger -->|no| error([The server returns an error message]) + webfinger -->|yes| filter{Is the requesting server subject\nto a domain filter or vice versa?} + filter -->|yes| error + filter -->|no| userfound{Was the target user found\non the server?} + userfound -->|no| error + end + userfound -->|yes| redirect([The user is redirected to a profile page\nin the web app]) +``` + +### Following users + +Following a user is a process by which a **requesting user** subscribes to the activities of a **target user**. If the **target user** accepts the follow request, the **requesting user** receives any new activities in their home feed. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/follow +``` + +When the server receives a `follow` request, it creates a `follow_request` object containing the status of the follow request which is used to display request information to the target user in their notifications. + +:::{note} +If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Follow` activity][follow]: + +1. A [`Follow` activity][follow] is posted to the **requesting user's** [outbox collection][outbox] with the **target user** as the recipient +2. The **target user** receives the request in their [inbox collection][inbox] +3. The **target user** then needs to [`Accept`][accept] or [`Reject`][reject] the [`Follow`][follow] + - If the **target user** accepts the follow, the **requesting user** is added to the **target user's** [following collection][following]. The **target user** is added to the **requesting user's** [followers collection][followers] + - If the **target user** rejects the follow, the **requesting user** is _not_ added to the **target user's** [following collection][following]. The **target user** is _not_ added to the **requesting user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Follow request + note over Bob's Outbox, Bob's Inbox : Bob's ActivityPub collections + Bob's Outbox ->> Alice's Inbox : Follow request + note over Alice's Inbox, Alice's Outbox : Alice's ActivityPub collections + Alice's Inbox ->> Alice : Display follow request + activate Alice + alt if Alice accepts Bob's request + Alice -->> Alice's Outbox : Accept follow + Alice's Outbox --> Bob's Inbox : Accept + Bob's Inbox --> Bob : Display following + end + alt if Alice rejects Bob's request + Alice -->> Alice's Inbox : Reject follow + end +``` + +:::{note} +If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### Web app behavior + +In the Funkwhale web app, the **requesting user** sees a **Follow** button on the **target user's** profile page. When they select this button, the following happens: + +1. If the **target user's** profile can be followed, an action button is displayed. +2. When the **requesting user** attempts the follow the **target user**, the button should change to a {guilabel}`Pending` status. +3. If the **target user** `Accepts` the follow request, the button should update to show a {guilabel}`Following` status. + +### Unfollowing users + +Following a user is a process by which a **requesting user** unsubscribes from the activities of a **target user**. A **requesting user** may unfollow a **target user** unilaterally at any time to stop receiving updates. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unfollow +``` + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Undo` activity][undo]: + +1. An [`Undo` activity][undo] is posted to the **requesting user's** [outbox collection][outbox] with a [`Follow activity`][follow] as the target +2. The **target user** is removed from the **requesting user's** [following collection][following] +3. The **target user** receives the undo request in their [inbox collection][inbox] +4. The **requesting user** is removed from the **target user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Undo request + note over Bob, Bob's Outbox : The target user is removed + Bob's Outbox ->> Alice's Inbox : Undo Follow + note over Alice's Inbox, Alice : The requesting user is removed +``` + +#### Web app behavior + +When a **requesting user** unfollows a **target user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **target user** must be visually hidden. + +### Blocking users + +When one user blocks another, no information may be shared between them. Blocking is a unilateral action that can be taken by both **requesting** and **target** actors to prevent the other from interacting with them. + +#### API behavior + +Block requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/block +``` + +#### ActivityPub behavior + +If the the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Block` activity][block] with the **blocked user's** [`Actor`][actor] as a target. + +1. A [`Block` activity][block] is posted to the **blocking user's** [outbox collection][outbox] with the **blocked user's** [`Actor`][actor] the target + - If the **blocked user** was previously in the **blocking user's** [following collection][following], they are removed + - If the **blocked user** was previously in the **blocking user's** [followers collection][followers], they are removed + +:::{warning} +As noted in the ActivityPub spec, the **blocked user** must _not_ be informed of the `Block` activity. +::: + +#### Web app behavior + +When a **blocking user** blocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **blocked user** must be visually hidden. + +If a **blocking user** navigates to the profile of a **blocked user** who has blocked them, the UI _must not_ reflect that they are blocked. The **blocking user** must be able to send a follow request which is _not_ sent to the **blocked user**. + +### Unblocking users + +**Blocking users** can unilaterally reverse blocks they have imposed on **blocked users**. This enables them to request to follow the **blocked user's** activities again. + +#### API behavior + +Unblock requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unblock +``` + +#### ActivityPub behavior + +If the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Undo` activity][undo]. + +#### Web app behavior + +When a **blocking user** unblocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. The **Follow** button must become active and interactive again. + +## Availability + +- [x] App frontend +- [x] CLI + +## Responsible parties + +The following working groups are responsible for implementing this feature: + +- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic +- The **Design group** is responsible for drafting designs for the web app interactions +- The **Frontend group** is responsible for implementing the desigs from the **Design group** and adding support for the new API +- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users + +## Open questions + +- The API actions and endpoint names are placeholders. We need to decide what they should be called +- What limitations are there when fetching activities from remote actors? +- How should a user's followers collection, following collection, and pending requests be displayed in the web app? +- How are followed activities fetched and displayed to a user? + +## Minimum viable product + +The MVP for this feature is to implement the backend logic to enable Funkwhale users to follow one another. This can be added to the web app using existing profile fetching logic. + +### Next steps + +Once the backend logic is implemented, the frontend implementation should be revisited to improve the UX and discoverability. Additional features such as showing federated favorites on audio objects should also be considered. + +[webfinger]: https://www.rfc-editor.org/rfc/rfc7033 +[outbox]: https://www.w3.org/TR/activitypub/#outbox +[inbox]: https://www.w3.org/TR/activitypub/#inbox +[accept]: https://www.w3.org/TR/activitypub/#accept-activity-inbox +[reject]: https://www.w3.org/TR/activitypub/#reject-activity-inbox +[follow]: https://www.w3.org/TR/activitypub/#follow-activity-outbox +[actor]: https://www.w3.org/TR/activitypub/#actors +[following]: https://www.w3.org/TR/activitypub/#following +[followers]: https://www.w3.org/TR/activitypub/#followers +[undo]: https://www.w3.org/TR/activitypub/#undo-activity-outbox +[block]: https://www.w3.org/TR/activitypub/#block-activity-outbox From 0b91d0d7dcc22ce556d3c5c015c6c8897d935bc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 6 Nov 2023 19:13:48 +0000 Subject: [PATCH 038/371] Revert "feat(docs): add user follow spec" This reverts commit 384a4d1974bb163262620417d43b8acebeb3401a --- changes/changelog.d/follows.doc | 1 - docs/index.md | 1 - docs/specs/user-follow/index.md | 295 -------------------------------- 3 files changed, 297 deletions(-) delete mode 100644 changes/changelog.d/follows.doc delete mode 100644 docs/specs/user-follow/index.md diff --git a/changes/changelog.d/follows.doc b/changes/changelog.d/follows.doc deleted file mode 100644 index db91ce854..000000000 --- a/changes/changelog.d/follows.doc +++ /dev/null @@ -1 +0,0 @@ -Add spec for user following. diff --git a/docs/index.md b/docs/index.md index c5b56e996..6c8a73f7c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -105,7 +105,6 @@ specs/collections/index specs/nodeinfo21/index specs/offline-mode/index specs/quality-filter/index -specs/user-follow/index ``` diff --git a/docs/specs/user-follow/index.md b/docs/specs/user-follow/index.md deleted file mode 100644 index c6b65618f..000000000 --- a/docs/specs/user-follow/index.md +++ /dev/null @@ -1,295 +0,0 @@ -# User following - -## Terminology - -The following terminology is used throughout this document: - -User -: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. - -Follow -: The act of subscribing to a user's activities to render them in a feed as they occur. - -Object -: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. - -Activity -: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. - -Actor -: An ActivityPub object representing an entity capbable of performing actions. See the [ActivityPub specification][actor] for more details. - -Requesting user -: The user who sends a request. For example: If **Bob** requests to follow **Alice**, **Bob** is the requesting user. - -Target user -: The user who is the subject of a request. For example: If **Bob** requests to follow **Alice**, **Alice** is the target user. - -## The issue - -Funkwhale is an audio platform with an emphasis on social interaction across a federated network of servers. To this end, Funkwhale users should be able to interact with one another in meaningful ways. - -Funkwhale users broadcast the following activity when using the software: - -1. **Favoriting** content -2. **Listening** to content - -Users across the federated web should be able to follow Funkwhale accounts to receive this activity in their streams. - -## Proposed solution - -To facilitate this, Funkwhale uses the following mechanisms: - -- The **Funkwhale client API** for user to user interactions on the same server -- [ActivityPub](https://www.w3.org/TR/activitypub) for server-to-server (S2S) interactions between users - -Users should be able to discover other users using the [Webfinger protocol][webfinger] and render their public details in a manner compliant with the platform they use. Within Funkwhale, user activity should be rendered natively. Other Fediverse software may choose how to render this information. - -This specification outlines the workflows for the following actions for **local** and **remote** requests: - -1. User discovery -2. User follows -3. User unfollows -4. User blocking - -### User discovery - -Funkwhale implements the [Webfinger protocol][webfinger] for account discovery. When the **requesting user** enters the **target user's** federation handle, Funkwhale should attempt to resolve the location of the **target user** by querying the `acct:` resource with the URL encoded handle. - -#### Webfinger request - -```console -$ curl -X GET \ --H "Content-type: application/json" \ -'https://open.audio/.well-known/webfinger?resource=acct:user%40open.audio' -``` - -#### Response - -```json -{ - "subject": "acct:user@open.audio", - "links": [ - { - "rel": "self", - "href": "https://open.audio/federation/actors/user", - "type": "application/activity+json" - } - ], - "aliases": ["https://open.audio/federation/actors/user"] -} -``` - -#### Web app behavior - -When a requesting user enters the handle of a target user in the search bar, Funkwhale does the following: - -1. Verifies the handle is well-formed -2. Forwards the request to the server - -The server is responsible for dereferencing the Webfinger query. The server does the following: - -1. Queries the domain for the account using Webfinger - - **If** the domain doesn't have a Webfinger endpoint, returns a meaningful error message. This must be displayed to the user. - - **If** the server is subject to a domain filter, or is filtering the requesting server, returns a meaningful error message. This must be displayed to the user. - - **If** no user is found on the domain, returns a meaningful error message. -2. If a matching user is found, the server should return the URL of the resource to the web app. The web app should then redirect the requesting user to a user page that shows the target user's profile image and preferred username - - **If** the target user has set their activity to **public**, the web app should render their **Favorites** and **Recently Listened** activity - -```{mermaid} -flowchart TD - search([A requesting user enters a fediverse handle\nin the search bar]) --> query(Funkwhale queries the target domain) - query --> webfinger{Does the target server\support Webfinger?} - subgraph Request verification - webfinger -->|no| error([The server returns an error message]) - webfinger -->|yes| filter{Is the requesting server subject\nto a domain filter or vice versa?} - filter -->|yes| error - filter -->|no| userfound{Was the target user found\non the server?} - userfound -->|no| error - end - userfound -->|yes| redirect([The user is redirected to a profile page\nin the web app]) -``` - -### Following users - -Following a user is a process by which a **requesting user** subscribes to the activities of a **target user**. If the **target user** accepts the follow request, the **requesting user** receives any new activities in their home feed. - -#### API behavior - -Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. - -```text -POST /api/v2/users/{id}/follow -``` - -When the server receives a `follow` request, it creates a `follow_request` object containing the status of the follow request which is used to display request information to the target user in their notifications. - -:::{note} -If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. -::: - -#### ActivityPub behavior - -If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Follow` activity][follow]: - -1. A [`Follow` activity][follow] is posted to the **requesting user's** [outbox collection][outbox] with the **target user** as the recipient -2. The **target user** receives the request in their [inbox collection][inbox] -3. The **target user** then needs to [`Accept`][accept] or [`Reject`][reject] the [`Follow`][follow] - - If the **target user** accepts the follow, the **requesting user** is added to the **target user's** [following collection][following]. The **target user** is added to the **requesting user's** [followers collection][followers] - - If the **target user** rejects the follow, the **requesting user** is _not_ added to the **target user's** [following collection][following]. The **target user** is _not_ added to the **requesting user's** [followers collection][followers] - -```{mermaid} -sequenceDiagram - autonumber - Bob ->> Bob's Outbox : Follow request - note over Bob's Outbox, Bob's Inbox : Bob's ActivityPub collections - Bob's Outbox ->> Alice's Inbox : Follow request - note over Alice's Inbox, Alice's Outbox : Alice's ActivityPub collections - Alice's Inbox ->> Alice : Display follow request - activate Alice - alt if Alice accepts Bob's request - Alice -->> Alice's Outbox : Accept follow - Alice's Outbox --> Bob's Inbox : Accept - Bob's Inbox --> Bob : Display following - end - alt if Alice rejects Bob's request - Alice -->> Alice's Inbox : Reject follow - end -``` - -:::{note} -If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. -::: - -#### Web app behavior - -In the Funkwhale web app, the **requesting user** sees a **Follow** button on the **target user's** profile page. When they select this button, the following happens: - -1. If the **target user's** profile can be followed, an action button is displayed. -2. When the **requesting user** attempts the follow the **target user**, the button should change to a {guilabel}`Pending` status. -3. If the **target user** `Accepts` the follow request, the button should update to show a {guilabel}`Following` status. - -### Unfollowing users - -Following a user is a process by which a **requesting user** unsubscribes from the activities of a **target user**. A **requesting user** may unfollow a **target user** unilaterally at any time to stop receiving updates. - -#### API behavior - -Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. - -```text -POST /api/v2/users/{id}/unfollow -``` - -#### ActivityPub behavior - -If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Undo` activity][undo]: - -1. An [`Undo` activity][undo] is posted to the **requesting user's** [outbox collection][outbox] with a [`Follow activity`][follow] as the target -2. The **target user** is removed from the **requesting user's** [following collection][following] -3. The **target user** receives the undo request in their [inbox collection][inbox] -4. The **requesting user** is removed from the **target user's** [followers collection][followers] - -```{mermaid} -sequenceDiagram - autonumber - Bob ->> Bob's Outbox : Undo request - note over Bob, Bob's Outbox : The target user is removed - Bob's Outbox ->> Alice's Inbox : Undo Follow - note over Alice's Inbox, Alice : The requesting user is removed -``` - -#### Web app behavior - -When a **requesting user** unfollows a **target user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **target user** must be visually hidden. - -### Blocking users - -When one user blocks another, no information may be shared between them. Blocking is a unilateral action that can be taken by both **requesting** and **target** actors to prevent the other from interacting with them. - -#### API behavior - -Block requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. - -```text -POST /api/v2/users/{id}/block -``` - -#### ActivityPub behavior - -If the the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Block` activity][block] with the **blocked user's** [`Actor`][actor] as a target. - -1. A [`Block` activity][block] is posted to the **blocking user's** [outbox collection][outbox] with the **blocked user's** [`Actor`][actor] the target - - If the **blocked user** was previously in the **blocking user's** [following collection][following], they are removed - - If the **blocked user** was previously in the **blocking user's** [followers collection][followers], they are removed - -:::{warning} -As noted in the ActivityPub spec, the **blocked user** must _not_ be informed of the `Block` activity. -::: - -#### Web app behavior - -When a **blocking user** blocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **blocked user** must be visually hidden. - -If a **blocking user** navigates to the profile of a **blocked user** who has blocked them, the UI _must not_ reflect that they are blocked. The **blocking user** must be able to send a follow request which is _not_ sent to the **blocked user**. - -### Unblocking users - -**Blocking users** can unilaterally reverse blocks they have imposed on **blocked users**. This enables them to request to follow the **blocked user's** activities again. - -#### API behavior - -Unblock requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. - -```text -POST /api/v2/users/{id}/unblock -``` - -#### ActivityPub behavior - -If the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Undo` activity][undo]. - -#### Web app behavior - -When a **blocking user** unblocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. The **Follow** button must become active and interactive again. - -## Availability - -- [x] App frontend -- [x] CLI - -## Responsible parties - -The following working groups are responsible for implementing this feature: - -- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic -- The **Design group** is responsible for drafting designs for the web app interactions -- The **Frontend group** is responsible for implementing the desigs from the **Design group** and adding support for the new API -- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users - -## Open questions - -- The API actions and endpoint names are placeholders. We need to decide what they should be called -- What limitations are there when fetching activities from remote actors? -- How should a user's followers collection, following collection, and pending requests be displayed in the web app? -- How are followed activities fetched and displayed to a user? - -## Minimum viable product - -The MVP for this feature is to implement the backend logic to enable Funkwhale users to follow one another. This can be added to the web app using existing profile fetching logic. - -### Next steps - -Once the backend logic is implemented, the frontend implementation should be revisited to improve the UX and discoverability. Additional features such as showing federated favorites on audio objects should also be considered. - -[webfinger]: https://www.rfc-editor.org/rfc/rfc7033 -[outbox]: https://www.w3.org/TR/activitypub/#outbox -[inbox]: https://www.w3.org/TR/activitypub/#inbox -[accept]: https://www.w3.org/TR/activitypub/#accept-activity-inbox -[reject]: https://www.w3.org/TR/activitypub/#reject-activity-inbox -[follow]: https://www.w3.org/TR/activitypub/#follow-activity-outbox -[actor]: https://www.w3.org/TR/activitypub/#actors -[following]: https://www.w3.org/TR/activitypub/#following -[followers]: https://www.w3.org/TR/activitypub/#followers -[undo]: https://www.w3.org/TR/activitypub/#undo-activity-outbox -[block]: https://www.w3.org/TR/activitypub/#block-activity-outbox From 57ae3fae3c245b558d3c02d7f61951070b1f763a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 6 Nov 2023 19:22:48 +0000 Subject: [PATCH 039/371] fix(docs): add missing has_mbid filter description Part-of: --- changes/changelog.d/has_mbid.doc | 1 + docs/specs/quality-filter/index.md | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 changes/changelog.d/has_mbid.doc diff --git a/changes/changelog.d/has_mbid.doc b/changes/changelog.d/has_mbid.doc new file mode 100644 index 000000000..b68acf0d7 --- /dev/null +++ b/changes/changelog.d/has_mbid.doc @@ -0,0 +1 @@ +Add missing `has_mbid` requirement to quality filter spec. diff --git a/docs/specs/quality-filter/index.md b/docs/specs/quality-filter/index.md index 5f1ff5d2a..e61da81ef 100644 --- a/docs/specs/quality-filter/index.md +++ b/docs/specs/quality-filter/index.md @@ -36,6 +36,7 @@ Under a subsection labeled {guilabel}`Required metadata`: - A checkbox for {guilabel}`Album art`. If checked, only albums with associated art should be returned by the API - A checkbox for {guilabel}`Release date`. If checked, only albums with a properly formatted release date should be returned by the API - A checkbox for {guilabel}`Genre tags`. If checked, only content that is tagged with at least one genre tag should be returned by the API +- A checkbox for {guilabel}`MusicBrainz ID`. If enabled, only content with a MusicBrainz ID is returns in API calls. The menu should also contain a {guilabel}`Quality filter` slider that allows admins to choose a **minimum** quality level. This level should be abstracted on the backend to apply a sensible value to all supported file formats. @@ -53,6 +54,7 @@ The following configurable filters need to be applied: - `format`: a comma-separated list of accepted file formats (e.g. `mp3,ogg,vorbis,flac`). Only files matching the formats in the list should be returned if this filter is passed - `has_tags`: a boolean value that indicates whether the content should be tagged (`true`) or not (`false`) +- `has_mbid`: a boolean value that indicates whether the content has a `mbid` tag associated (`true`) or not (`false`) - `quality`: an enum value that filters content based on the file quality. If no value is passed, uploads of any quality should be returned. Accepted values: - `low` - `medium` From 8485e4b1626d2e13f2292512be9ce145f51df9b9 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Tue, 7 Nov 2023 09:54:50 +0000 Subject: [PATCH 040/371] fix(codespell): Don't falsely report a name as spelling mistake Part-of: --- .codespellignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.codespellignore b/.codespellignore index c305ceb85..6022867e9 100644 --- a/.codespellignore +++ b/.codespellignore @@ -11,3 +11,4 @@ upto # Names nin noe +manuel From ab73f355c038bb03eaafe193ff703931bb7334a3 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Tue, 7 Nov 2023 09:55:04 +0000 Subject: [PATCH 041/371] fix: minor spelling issues Part-of: --- CHANGELOG | 4 ++-- api/funkwhale_api/tags/filters.py | 2 +- docs/user/channels/delete.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ac84198cb..ca4f0ef20 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2766,7 +2766,7 @@ Bugfixes: - Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) - Fixed cards display issues on medium/small screens (#707) -- Fixed Embed component name that could lead to issue when developping on OSX (#696) +- Fixed Embed component name that could lead to issue when developing on OSX (#696) - Fixed resizing issues for album cards on artist pages (#694) @@ -4357,7 +4357,7 @@ deployed in various projects and supported by numerous clients. By offering this API in Funkwhale, we make it possible to access the instance library and listen to the music without from existing Subsonic clients, and -without developping our own alternative clients for each and every platform. +without developing our own alternative clients for each and every platform. Most advanced Subsonic clients support offline caching of music files, playlist management and search, which makes them well-suited for nomadic use. diff --git a/api/funkwhale_api/tags/filters.py b/api/funkwhale_api/tags/filters.py index 38bec5b90..bcd6894af 100644 --- a/api/funkwhale_api/tags/filters.py +++ b/api/funkwhale_api/tags/filters.py @@ -24,7 +24,7 @@ class TagFilter(filters.FilterSet): def get_by_similar_tags(qs, tags): """ - Return a queryset of obects with at least one matching tag. + Return a queryset of objects with at least one matching tag. Annotate the queryset so you can order later by number of matches. """ qs = qs.filter(tagged_items__tag__name__in=tags).annotate( diff --git a/docs/user/channels/delete.md b/docs/user/channels/delete.md index b32073a8e..7f35d4ff9 100644 --- a/docs/user/channels/delete.md +++ b/docs/user/channels/delete.md @@ -1,7 +1,7 @@ # Delete a channel ```{warning} -Deleting a channel is irreversible. If you delete a channel you also delete the content associated with it. Users won't be able to access the channel any more. You can't re-use the channel's __Fediverse handle__ for another channel. +Deleting a channel is irreversible. If you delete a channel you also delete the content associated with it. Users won't be able to access the channel any more. You can't reuse the channel's __Fediverse handle__ for another channel. ``` If you want to delete your channel, follow these steps: From 145ca4a1e738b643fbcf99629db628b7389ed91d Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Tue, 7 Nov 2023 13:53:09 +0100 Subject: [PATCH 042/371] ci(docker): Disable OCI mediatypes for buildx cache --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 49414adc9..dd06473ce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -467,15 +467,15 @@ docker: variables: BUILD_ARGS: > --set *.platform=linux/amd64,linux/arm64,linux/arm/v7 - --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH - --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max + --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,oci-mediatypes=false + --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max,oci-mediatypes=false --push - if: $CI_PIPELINE_SOURCE == "merge_request_event" variables: BUILD_ARGS: > --set *.platform=linux/amd64 - --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME + --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME,oci-mediatypes=false image: $CI_REGISTRY/funkwhale/ci/docker:20 services: From abb78a47e66fb241576cee7a88977a0800f2bd4a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Nov 2023 00:34:39 +0000 Subject: [PATCH 043/371] chore(api): update dependency django to v3.2.23 Part-of: --- api/poetry.lock | 10 ++++++---- api/pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 1b3a06174..3d655fc87 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1015,13 +1015,13 @@ with-social = ["django-allauth (>=0.40.0,<0.53.0)"] [[package]] name = "django" -version = "3.2.22" +version = "3.2.23" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." optional = false python-versions = ">=3.6" files = [ - {file = "Django-3.2.22-py3-none-any.whl", hash = "sha256:c5e7b668025a6e06cad9ba6d4de1fd1a21212acebb51ea34abb400c6e4d33430"}, - {file = "Django-3.2.22.tar.gz", hash = "sha256:83b6d66b06e484807d778263fdc7f9186d4dc1862fcfa6507830446ac6b060ba"}, + {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, + {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, ] [package.dependencies] @@ -2439,6 +2439,8 @@ files = [ {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, + {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, @@ -3871,4 +3873,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "f070f0748a2bce1b56c3cd80de2734a7eeb4c4c5b658771019363e7405a2e7aa" +content-hash = "1ebda1967d7df47ed3e22d5c5c9f24b59422f9df2bab319399a737ae5b152711" diff --git a/api/pyproject.toml b/api/pyproject.toml index c7776187a..57e59ec2b 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -29,7 +29,7 @@ python = "^3.7" # Django dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } -django = "==3.2.22" +django = "==3.2.23" django-allauth = "==0.42.0" django-cache-memoize = "0.1.10" django-cacheops = "==6.1" From 225d55924fa0fa1baceeac57ac0288d4a54c0f21 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Nov 2023 09:33:42 +0000 Subject: [PATCH 044/371] chore(front): update dependency standardized-audio-context to v25.3.58 Part-of: --- front/package.json | 2 +- front/yarn.lock | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/front/package.json b/front/package.json index 32edf383e..9d1bfe447 100644 --- a/front/package.json +++ b/front/package.json @@ -38,7 +38,7 @@ "lru-cache": "7.14.1", "moment": "2.29.4", "showdown": "2.1.0", - "standardized-audio-context": "25.3.57", + "standardized-audio-context": "25.3.58", "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", diff --git a/front/yarn.lock b/front/yarn.lock index 611ef7601..4164d3094 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -924,10 +924,10 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.23.1": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== +"@babel/runtime@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== dependencies: regenerator-runtime "^0.14.0" @@ -2983,12 +2983,12 @@ automation-events@^6.0.1, automation-events@^6.0.8: "@babel/runtime" "^7.22.6" tslib "^2.6.1" -automation-events@^6.0.10: - version "6.0.10" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.10.tgz#45680564e7633ec7a19928646615c2eeca2874a0" - integrity sha512-nP2k70tZ4+GrDUeW+77c/ZOJD3KMXZlW5A07YHNw6+RcggdHwXPIdhYT3Nhzufbfon4UHY8CvYuQllD3Em2rtQ== +automation-events@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.11.tgz#c90be5a58faf6633e1556a7acab0f23af0124551" + integrity sha512-tUqFMJalQ3OAcbQOXzzNDpxzkuygMQ3eM92lJWJRn6YWJnH4oYIU3pzKipANOul/6L2vDFrOzgXVE21Dv4z/zw== dependencies: - "@babel/runtime" "^7.23.1" + "@babel/runtime" "^7.23.2" tslib "^2.6.2" available-typed-arrays@^1.0.5: @@ -5712,13 +5712,13 @@ standardized-audio-context-mock@9.6.18: tslib "^2.5.0" vehicles "^9.0.1" -standardized-audio-context@25.3.57: - version "25.3.57" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.57.tgz#05e7a1d64345680d4648c694ec019f04413cbaa7" - integrity sha512-MHmZjXXc3zRRuh4Ro8Iah334n+A8Y9EeLeECzElBzpNQYLCwmmKRXPB88WazwkGhux85fU8+gkAbyELJ0ehiCg== +standardized-audio-context@25.3.58: + version "25.3.58" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.58.tgz#6c5c61cfe25eb4b9f3a9f8cf43dc4991e7eb362d" + integrity sha512-1p5wVGiy4MfmhEt9MRY8yjZdkX+fi5jMxG1lqnAS1YmLUpE9VrOowxSINQ9Gjs89dFZMaENVwcMSPeQCjlz90Q== dependencies: - "@babel/runtime" "^7.23.1" - automation-events "^6.0.10" + "@babel/runtime" "^7.23.2" + automation-events "^6.0.11" tslib "^2.6.2" standardized-audio-context@^25.3.46: From a54522eac2c88ee7a953a94af0f11992aaed29f5 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Tue, 10 Oct 2023 13:00:18 +0200 Subject: [PATCH 045/371] chore(renovate): Don't pin python version to the latest Part-of: --- .gitlab/renovate.json | 4 ++++ changes/changelog.d/renovate-python.misc | 1 + 2 files changed, 5 insertions(+) create mode 100644 changes/changelog.d/renovate-python.misc diff --git a/.gitlab/renovate.json b/.gitlab/renovate.json index 0b8e75237..d4bdfb247 100644 --- a/.gitlab/renovate.json +++ b/.gitlab/renovate.json @@ -70,6 +70,10 @@ ], "fileFilters": ["changes/changelog.d/postgres.update"] } + }, + { + "matchPackageNames": ["python"], + "rangeStrategy": "widen" } ] } diff --git a/changes/changelog.d/renovate-python.misc b/changes/changelog.d/renovate-python.misc new file mode 100644 index 000000000..c0fb4584e --- /dev/null +++ b/changes/changelog.d/renovate-python.misc @@ -0,0 +1 @@ +Make renovate not pinning the python version to the latest one From e120fc68154a5af50ec624c7a723491bede17e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 9 Oct 2023 13:05:14 +0200 Subject: [PATCH 046/371] feat(docs): add multi-artist spec Part-of: --- changes/changelog.d/multi-artist.doc | 1 + docs/index.md | 1 + docs/specs/multi-artist/index.md | 462 +++++++++++++++++++++++++++ 3 files changed, 464 insertions(+) create mode 100644 changes/changelog.d/multi-artist.doc create mode 100644 docs/specs/multi-artist/index.md diff --git a/changes/changelog.d/multi-artist.doc b/changes/changelog.d/multi-artist.doc new file mode 100644 index 000000000..be904c08f --- /dev/null +++ b/changes/changelog.d/multi-artist.doc @@ -0,0 +1 @@ +Added multi-artist support spec. diff --git a/docs/index.md b/docs/index.md index 6c8a73f7c..6566d65bf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -105,6 +105,7 @@ specs/collections/index specs/nodeinfo21/index specs/offline-mode/index specs/quality-filter/index +specs/multi-artist/index ``` diff --git a/docs/specs/multi-artist/index.md b/docs/specs/multi-artist/index.md new file mode 100644 index 000000000..2d61eed84 --- /dev/null +++ b/docs/specs/multi-artist/index.md @@ -0,0 +1,462 @@ +# Multi-artist support + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## The issue + +Funkwhale requires all releases and recordings to be associated to an artist. In Funkwhale's current structure, only one artist can be associated with a release or recording. However, many releases and recordings are credited to multiple artists. + +Funkwhale supports adding releases with multiple contributors by assigning a generic "Various Artists" artist to collaborative releases. This approach doesn't give proper credit to the contributors, and leads to lots of content being improperly catalogued. + +When a user uploads content created by multiple collaborative artists, they expect the following behavior: + +1. Releases to which the artist has contributed should be present on the artist's page +2. Releases to which the artist has contributed should be present in search results for the artist +3. Releases and recordings should contain links to all contributing artists so that users can discover their other work + +Currently, Funkwhale has no facility to parse multi-artist releases. The metadata fields that hold this information (`ALBUMARTIST` and `ARTIST`) are challenging to parse as they aren't formatted in a consistent way. When a release has multiple contributing artists, Funkwhale needs to be able to parse the following information about each artist to ensure the content is tagged with each artist as a user would expect: + +1. Any aliases the contributing artist might use +2. The **join phrase** used to separate artists in the tag + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +To account for content tagged in MusicBrainz and content tagged in other systems, two strategies need to be used to populate the `ArtistCredit` model: + +1. `parse_credit`: a strategy to parse artist credit from a file's metadata using join phrase parsing. +2. `fetch_credit`: a strategy to fetch artist credit directly from MusicBrainz's entry for releases and recordings + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|no| parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + mb-tagged -->|yes| query(Funkwhale queries the MusicBrainz API to\nretrieve artist information for each\nunique mbid) + query --> create(Funkwhale fetches artist information\nand creates Artist entries for any\nartists not present in the database) + create & artist --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags when a MusicBrainz ID **isn't** present in the file metadata and creating `Artist` entries for new artists +2. Querying the MusicBrainz API when a MusicBrainz ID **is** present and creating `Artist` entries for new artists +3. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +4. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> fetch_credit: Fetch credit from MusicBrainz + fetch_credit -->> ArtistCredit: Return credit information from MusicBrainz + ArtistCredit ->> parse_credit: Parse credit from tags + parse_credit -->> ArtistCredit: Return credit information +``` + +If MusicBrainz tags are present in the file metadata, the `fetch_credit` strategy should always be preferred to ensure that content aligns with MusicBrainz's tagging. + +#### parse_credit strategy + +When content doesn't contain MusicBrainz tags, Funkwhale should provide the following to enable artist parsing: + +1. A sensible list of default **join phrases** that are commonly found in artist tags +2. A setting to enable admins to override or add to the list of join phrases + +Funkwhale should tokenize the `ALBUMARTIST` and `ARTIST` fields using a list of **join phrases**. For each token in the list, Funkwhale should do the following: + +1. Store content split at the **join phrase** token as the `credit` +2. Search for any artist with the same name as the `credit` and store the id as the `artist_id` + - If no existing artist is found, create a new artist and return the ID as `artist_id` +3. Store the join phrase token that it split at as the `joinphrase` +4. Create an `ArtistCredit` object for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +5. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Upload ->> parse_content: Read file metadata + loop For each artist name + parse_content ->> Artist: Search Artist entries + Artist -->> parse_content: Return entry (if exists) + parse_content ->> Artist: Create Artist entry (if none found) + end + loop For each unique artist credit combination + parse_content ->> ArtistCredit: Search ArtistCredit entries + ArtistCredit -->> parse_content: Return entry (if exists) + parse_content ->> ArtistCredit: Create ArtistCredit entry (if none found) + parse_content ->> Track: Create Track with artist_credit entries + parse_content ->> Album: Create Album with artist_credit entries + end +``` + +Funkwhale should do the following automatically: + +- Trim whitespace from the artist `credit` +- Preserve whitespace around **both sides** of the `joinphrase` for readability +- Use an **empty** string (`""`) as the `joinphrase` for the last entry in the list + +For example, given a list of join phrases like this: + +- `$`, `|`, `&`, `/`, `feat.` + +And the following tags: + +| Tag | Values | +| ----------- | ------------------------------------------------------- | +| ALBUMARTIST | Tommy J. & Bobby Forth | +| ARTIST | Tommy J. feat. Robin Devil, Jerry Sabbath & Sammy Burns | + +Funkwhale would create the following `ArtistCredit` entries for the `Album`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ----------- | ---------- | +| 1 | 1 | Tommy J. | & | +| 2 | 2 | Bobby Forth | | + +And the following for the `Track`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ------------- | ---------- | +| 3 | 1 | Tommy J. | " feat. " | +| 4 | 3 | Robin Devil | ", " | +| 5 | 4 | Jerry Sabbath | " & " | +| 6 | 5 | Sammy Burns | "" | + +#### fetch_credit strategy + +To maintain compatibility with MusicBrainz and ensure that Funkwhale can parse multi-artist releases, the MusicBrainz API should be used to fetch contributor information relating to the release. + +The [`/release` and `/recording` endpoints](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) return `artist-credit` information when called with a `inc=artists` parameter. This information can be parsed to fetch relevant information: + +- The `joinphrase` +- The MusicBrainz `id` of the `artist` +- The artist's `name` + +```text +https://musicbrainz.org/ws/2/release/ef140c88-8bf1-4e50-9555-5c1d1ed5865c?fmt=json&inc=artists +``` + +```json +{ + "asin": null, + "cover-art-archive": { + "darkened": false, + "artwork": true, + "front": true, + "back": false, + "count": 1 + }, + "release-events": [ + { + "area": { + "id": "525d4e18-3d00-31b9-a58b-a146a916de8f", + "type": null, + "name": "[Worldwide]", + "disambiguation": "", + "sort-name": "[Worldwide]", + "iso-3166-1-codes": ["XW"], + "type-id": null + }, + "date": "2012-11-15" + } + ], + "quality": "normal", + "barcode": "", + "date": "2012-11-15", + "status-id": "4e304316-386d-3409-af2e-78857eec5cfe", + "status": "Official", + "title": "One Christmas at a Time", + "disambiguation": "", + "text-representation": { + "script": "Latn", + "language": "eng" + }, + "packaging-id": "119eba76-b343-3e02-a292-f0f00644bb9b", + "packaging": "None", + "country": "XW", + "id": "ef140c88-8bf1-4e50-9555-5c1d1ed5865c", + "artist-credit": [ + { + "joinphrase": " & ", + "name": "Jonathan Coulton", + "artist": { + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df", + "name": "Jonathan Coulton", + "id": "d8df7087-06d5-4545-9024-831bb8558ad1", + "sort-name": "Coulton, Jonathan", + "disambiguation": "", + "type": "Person" + } + }, + { + "artist": { + "type": "Person", + "disambiguation": "", + "id": "7b5b87d3-f3ee-4b5d-b111-1f2e87f87124", + "sort-name": "Roderick, John", + "name": "John Roderick", + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df" + }, + "name": "John Roderick", + "joinphrase": "" + } + ] +} +``` + +To catalogue multi-artist content, Funkwhale needs to: + +1. Fetch information for **each** contributing artist and create `Artist` objects for any that don't exist +2. Create `ArtistCredit` objects associated with each release and recording for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Funkwhale ->> MusicBrainz: /release/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Album and ArtistCredit information + Funkwhale ->> MusicBrainz: /recording/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Track and ArtistCredit information + loop For each unique artist mbid + Funkwhale ->> MusicBrainz: /artist/{mbid}?fmt=json&inc=aliases + MusicBrainz -->> Funkwhale: Artist information + end +``` + +Given the above example, Funkwhale would create the following `ArtistCredit` object: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ---------------- | ---------- | +| 1 | 1 | Jonathan Coulton | & | +| 2 | 2 | John Roderick | | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +Data needs to be clearly presented in the web app to ensure that users can easily see which artists collaborated on a work and discover more of their work. + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html + + {credit}{joinphrase} + +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html + + Jonathan Coulton & + John Roderick + +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration +3. Implement the token splitting and data fetching for new files + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place From 10ba5d02e762c35d6b7d89d51b6613dde4f9b90f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Mon, 6 Nov 2023 18:29:22 +0000 Subject: [PATCH 047/371] chore(docs): Split up multi-artist spec Part-of: --- docs/specs/multi-artist/index.md | 448 +--------------------- docs/specs/multi-artist/mb-content.md | 369 ++++++++++++++++++ docs/specs/multi-artist/non-mb-content.md | 348 +++++++++++++++++ 3 files changed, 724 insertions(+), 441 deletions(-) create mode 100644 docs/specs/multi-artist/mb-content.md create mode 100644 docs/specs/multi-artist/non-mb-content.md diff --git a/docs/specs/multi-artist/index.md b/docs/specs/multi-artist/index.md index 2d61eed84..21b2b800b 100644 --- a/docs/specs/multi-artist/index.md +++ b/docs/specs/multi-artist/index.md @@ -1,20 +1,5 @@ # Multi-artist support -## Terminology - -The following terminology is used throughout this spec: - -Join phrase -: The token used to split a list of artists and represent their role in content - -Release -: An **album** or **single**. In Funkwhale a release is represented by the `Album` model - -Recording -: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model - -## The issue - Funkwhale requires all releases and recordings to be associated to an artist. In Funkwhale's current structure, only one artist can be associated with a release or recording. However, many releases and recordings are credited to multiple artists. Funkwhale supports adding releases with multiple contributors by assigning a generic "Various Artists" artist to collaborative releases. This approach doesn't give proper credit to the contributors, and leads to lots of content being improperly catalogued. @@ -30,433 +15,14 @@ Currently, Funkwhale has no facility to parse multi-artist releases. The metadat 1. Any aliases the contributing artist might use 2. The **join phrase** used to separate artists in the tag -## Proposed solution +```{toctree} +--- +caption: Specifications +maxdepth: 1 -To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. +--- -To account for content tagged in MusicBrainz and content tagged in other systems, two strategies need to be used to populate the `ArtistCredit` model: +mb-content +non-mb-content -1. `parse_credit`: a strategy to parse artist credit from a file's metadata using join phrase parsing. -2. `fetch_credit`: a strategy to fetch artist credit directly from MusicBrainz's entry for releases and recordings - -## Feature behavior - -The workflow for `ArtistCredit` population goes as follows: - -```{mermaid} -flowchart TD - upload([The user uploads content to Funkwhale]) - upload --> read(Funkwhale reads the file tags of each release/recording) - read --> mb-tagged{Does the content have a MusicBrainz ID?} - mb-tagged -->|no| parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) - parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) - mb-tagged -->|yes| query(Funkwhale queries the MusicBrainz API to\nretrieve artist information for each\nunique mbid) - query --> create(Funkwhale fetches artist information\nand creates Artist entries for any\nartists not present in the database) - create & artist --> model(Funkwhale stores the artist_credit information\nfor each release/recording) - model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) ``` - -### Backend - -The backend is responsible for - -1. Tokenizing artist tags when a MusicBrainz ID **isn't** present in the file metadata and creating `Artist` entries for new artists -2. Querying the MusicBrainz API when a MusicBrainz ID **is** present and creating `Artist` entries for new artists -3. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` -4. Adding the `ArtistCredit` links to `Track` and `Album` entries - -The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. - -#### Data model - -A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: - -- The Funkwhale `artist_id` of the artist associated with the release or recording -- The `credit` representing the credited name of the artist as given for the release or recording -- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) - -```{mermaid} -classDiagram - direction LR - class Album { - String title - ArtistCredit artist_credit - Date release_date - String release_group_id - Attachment attachment_cover - String type - Actor attributed_to - TaggedItem tagged_items - Fetch fetches - Content description - List api_includes - String api - String federation_namespace - MusicBrainz musicbrainz_model - String musicbrainz_mapping - } - class Track { - UUID mbid - String title - ArtistCredit artist_credit - Integer disc_number - Integer position - Album album - License license - Actor attributed_to - String copyright - Attachment attachment_cover - Integer downloads_count - String federation_namespace - String musicbrainz_model - String api - List api_includes - MusicBrainz musicbrainz_mapping - String import_hooks - QuerySet objects - Fetch fetches - } - class Artist { - String name - String federation_namespace - String musicbrainz_model - Object musicbrainz_mapping - Actor attributed_to - TaggedItem tagged_items - Fetch fetches - Content description - Attachment attachment_cover - String content_category - Date modification_date - String api - QuerySet objects - } - class ArtistCredit { - Artist artist_id - String credit - String joinphrase - } - Track "1" --> Album : album - Track "1..*" --> ArtistCredit : artist_credit - Album "1..*" --> ArtistCredit : artist_credit - ArtistCredit "1" --> Artist : Artist -``` - -#### Workflow - -On the backend, the workflow for fetching `ArtistCredit` information is as follows: - -```{mermaid} -sequenceDiagram - ArtistCredit ->> fetch_credit: Fetch credit from MusicBrainz - fetch_credit -->> ArtistCredit: Return credit information from MusicBrainz - ArtistCredit ->> parse_credit: Parse credit from tags - parse_credit -->> ArtistCredit: Return credit information -``` - -If MusicBrainz tags are present in the file metadata, the `fetch_credit` strategy should always be preferred to ensure that content aligns with MusicBrainz's tagging. - -#### parse_credit strategy - -When content doesn't contain MusicBrainz tags, Funkwhale should provide the following to enable artist parsing: - -1. A sensible list of default **join phrases** that are commonly found in artist tags -2. A setting to enable admins to override or add to the list of join phrases - -Funkwhale should tokenize the `ALBUMARTIST` and `ARTIST` fields using a list of **join phrases**. For each token in the list, Funkwhale should do the following: - -1. Store content split at the **join phrase** token as the `credit` -2. Search for any artist with the same name as the `credit` and store the id as the `artist_id` - - If no existing artist is found, create a new artist and return the ID as `artist_id` -3. Store the join phrase token that it split at as the `joinphrase` -4. Create an `ArtistCredit` object for each **unique** combination of `artist_id`, `credit`, and `joinphrase` -5. If a matching `ArtistCredit` entry is found, Funkwhale should link to this - -```{mermaid} -sequenceDiagram - Upload ->> parse_content: Read file metadata - loop For each artist name - parse_content ->> Artist: Search Artist entries - Artist -->> parse_content: Return entry (if exists) - parse_content ->> Artist: Create Artist entry (if none found) - end - loop For each unique artist credit combination - parse_content ->> ArtistCredit: Search ArtistCredit entries - ArtistCredit -->> parse_content: Return entry (if exists) - parse_content ->> ArtistCredit: Create ArtistCredit entry (if none found) - parse_content ->> Track: Create Track with artist_credit entries - parse_content ->> Album: Create Album with artist_credit entries - end -``` - -Funkwhale should do the following automatically: - -- Trim whitespace from the artist `credit` -- Preserve whitespace around **both sides** of the `joinphrase` for readability -- Use an **empty** string (`""`) as the `joinphrase` for the last entry in the list - -For example, given a list of join phrases like this: - -- `$`, `|`, `&`, `/`, `feat.` - -And the following tags: - -| Tag | Values | -| ----------- | ------------------------------------------------------- | -| ALBUMARTIST | Tommy J. & Bobby Forth | -| ARTIST | Tommy J. feat. Robin Devil, Jerry Sabbath & Sammy Burns | - -Funkwhale would create the following `ArtistCredit` entries for the `Album`: - -| id | artist_id | credit | joinphrase | -| --- | --------- | ----------- | ---------- | -| 1 | 1 | Tommy J. | & | -| 2 | 2 | Bobby Forth | | - -And the following for the `Track`: - -| id | artist_id | credit | joinphrase | -| --- | --------- | ------------- | ---------- | -| 3 | 1 | Tommy J. | " feat. " | -| 4 | 3 | Robin Devil | ", " | -| 5 | 4 | Jerry Sabbath | " & " | -| 6 | 5 | Sammy Burns | "" | - -#### fetch_credit strategy - -To maintain compatibility with MusicBrainz and ensure that Funkwhale can parse multi-artist releases, the MusicBrainz API should be used to fetch contributor information relating to the release. - -The [`/release` and `/recording` endpoints](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) return `artist-credit` information when called with a `inc=artists` parameter. This information can be parsed to fetch relevant information: - -- The `joinphrase` -- The MusicBrainz `id` of the `artist` -- The artist's `name` - -```text -https://musicbrainz.org/ws/2/release/ef140c88-8bf1-4e50-9555-5c1d1ed5865c?fmt=json&inc=artists -``` - -```json -{ - "asin": null, - "cover-art-archive": { - "darkened": false, - "artwork": true, - "front": true, - "back": false, - "count": 1 - }, - "release-events": [ - { - "area": { - "id": "525d4e18-3d00-31b9-a58b-a146a916de8f", - "type": null, - "name": "[Worldwide]", - "disambiguation": "", - "sort-name": "[Worldwide]", - "iso-3166-1-codes": ["XW"], - "type-id": null - }, - "date": "2012-11-15" - } - ], - "quality": "normal", - "barcode": "", - "date": "2012-11-15", - "status-id": "4e304316-386d-3409-af2e-78857eec5cfe", - "status": "Official", - "title": "One Christmas at a Time", - "disambiguation": "", - "text-representation": { - "script": "Latn", - "language": "eng" - }, - "packaging-id": "119eba76-b343-3e02-a292-f0f00644bb9b", - "packaging": "None", - "country": "XW", - "id": "ef140c88-8bf1-4e50-9555-5c1d1ed5865c", - "artist-credit": [ - { - "joinphrase": " & ", - "name": "Jonathan Coulton", - "artist": { - "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df", - "name": "Jonathan Coulton", - "id": "d8df7087-06d5-4545-9024-831bb8558ad1", - "sort-name": "Coulton, Jonathan", - "disambiguation": "", - "type": "Person" - } - }, - { - "artist": { - "type": "Person", - "disambiguation": "", - "id": "7b5b87d3-f3ee-4b5d-b111-1f2e87f87124", - "sort-name": "Roderick, John", - "name": "John Roderick", - "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df" - }, - "name": "John Roderick", - "joinphrase": "" - } - ] -} -``` - -To catalogue multi-artist content, Funkwhale needs to: - -1. Fetch information for **each** contributing artist and create `Artist` objects for any that don't exist -2. Create `ArtistCredit` objects associated with each release and recording for each **unique** combination of `artist_id`, `credit`, and `joinphrase` -3. If a matching `ArtistCredit` entry is found, Funkwhale should link to this - -```{mermaid} -sequenceDiagram - Funkwhale ->> MusicBrainz: /release/{mbid}?fmt=json&inc=artists - MusicBrainz -->> Funkwhale: Album and ArtistCredit information - Funkwhale ->> MusicBrainz: /recording/{mbid}?fmt=json&inc=artists - MusicBrainz -->> Funkwhale: Track and ArtistCredit information - loop For each unique artist mbid - Funkwhale ->> MusicBrainz: /artist/{mbid}?fmt=json&inc=aliases - MusicBrainz -->> Funkwhale: Artist information - end -``` - -Given the above example, Funkwhale would create the following `ArtistCredit` object: - -| id | artist_id | credit | joinphrase | -| --- | --------- | ---------------- | ---------- | -| 1 | 1 | Jonathan Coulton | & | -| 2 | 2 | John Roderick | | - -#### API behavior - -The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. - -Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. - -To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: - -```text -https://open.audio/api/v2/albums?credited_artist=6451,6452 -``` - -The `credit` field of the `artist_credit` object must also be searchable using a standard query: - -```text -https://tanukitunes.com/api/v2/albums?q=jonathan+coulton -``` - -#### Migration - -To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: - -- `artist_id` = Artist `id` -- `credit` = Artist `name` -- `joinphrase` = `""` - -Each album/track must have at least one `artist_credit` entry listed against it. - -### Frontend - -Data needs to be clearly presented in the web app to ensure that users can easily see which artists collaborated on a work and discover more of their work. - -#### Representation in releases and tracks - -The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. - -The frontend should format the results as follows for **each** artist: - -```html - - {credit}{joinphrase} - -``` - -For example, given the following `artist_credit` response: - -```json -[ - { - "artist_id": 25, - "credit": "Jonathan Coulton", - "joinphrase": " & " - }, - { - "artist_id": 395, - "credit": "John Roderick", - "joinphrase": "" - } -] -``` - -The frontend would render the following: - -```html - - Jonathan Coulton & - John Roderick - -``` - -#### "Also appears in" section - -To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. - -Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. - -#### "Compilations" page - -The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. - -### Documentation - -The following needs to be documented: - -- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content -- The environment setting to override the join phrase list -- Any tasks or script functions which are created to automate the update of historical content - -## Availability - -- [ ] Admin panel -- [x] App frontend -- [ ] CLI - -## Responsible parties - -- The backend developers in the **Development** group are responsible for: - - Creating the new `ArtistCredit` model - - Updating the `Album` and `Track` models to link to `ArtistCredit` entries - - Creating the strategies for populating `ArtistCredit` during the upload process - - Updating the API/creating new endpoints - - Creating the database migration to add the new field and that artist information is copied over -- The frontend developers in the **Development** group are responsible for: - - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response - - Creating the new "Also appears in" section for the artist discography pages -- The **Design** group is responsible for: - - Providing designs for how multi-artist content should be rendered responsively - - Providing designs for the new "Compilations" page - - Providing designs for the updated Artist page -- The **Documentation** group is responsible for: - - Documenting the new feature behavior - - Documenting the new environment settings - - Providing docstrings for API development - -## Open questions - -- What should be used as the default join words list? -- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? - -## Minimum viable product - -The MVP for this product is an implementation of the backend behavior. It should: - -1. Set up the new models -2. Create the database migration -3. Implement the token splitting and data fetching for new files - -### Next steps - -1. Create a `manage.py` script that enables admins to update entries in the database -2. Create a task that updates files imported in-place diff --git a/docs/specs/multi-artist/mb-content.md b/docs/specs/multi-artist/mb-content.md new file mode 100644 index 000000000..9533c668e --- /dev/null +++ b/docs/specs/multi-artist/mb-content.md @@ -0,0 +1,369 @@ +# Multi-artist support for MusicBrainz-tagged content + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +A `fetch_credit` strategy should be used to fetch artist credit directly from MusicBrainz's entry for releases and recordings. + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|yes| query(Funkwhale queries the MusicBrainz API to\nretrieve artist information for each\nunique mbid) + query --> create(Funkwhale fetches artist information\nand creates Artist entries for any\nartists not present in the database) + create --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags when a MusicBrainz ID **isn't** present in the file metadata and creating `Artist` entries for new artists +2. Querying the MusicBrainz API when a MusicBrainz ID **is** present and creating `Artist` entries for new artists +3. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +4. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> fetch_credit: Fetch credit from MusicBrainz + fetch_credit -->> ArtistCredit: Return credit information from MusicBrainz +``` + +If MusicBrainz tags are present in the file metadata, the `fetch_credit` strategy should always be preferred to ensure that content aligns with MusicBrainz's tagging. + +To maintain compatibility with MusicBrainz and ensure that Funkwhale can parse multi-artist releases, the MusicBrainz API should be used to fetch contributor information relating to the release. + +The [`/release` and `/recording` endpoints](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) return `artist-credit` information when called with a `inc=artists` parameter. This information can be parsed to fetch relevant information: + +- The `joinphrase` +- The MusicBrainz `id` of the `artist` +- The artist's `name` + +```text +https://musicbrainz.org/ws/2/release/ef140c88-8bf1-4e50-9555-5c1d1ed5865c?fmt=json&inc=artists +``` + +```json +{ + "asin": null, + "cover-art-archive": { + "darkened": false, + "artwork": true, + "front": true, + "back": false, + "count": 1 + }, + "release-events": [ + { + "area": { + "id": "525d4e18-3d00-31b9-a58b-a146a916de8f", + "type": null, + "name": "[Worldwide]", + "disambiguation": "", + "sort-name": "[Worldwide]", + "iso-3166-1-codes": ["XW"], + "type-id": null + }, + "date": "2012-11-15" + } + ], + "quality": "normal", + "barcode": "", + "date": "2012-11-15", + "status-id": "4e304316-386d-3409-af2e-78857eec5cfe", + "status": "Official", + "title": "One Christmas at a Time", + "disambiguation": "", + "text-representation": { + "script": "Latn", + "language": "eng" + }, + "packaging-id": "119eba76-b343-3e02-a292-f0f00644bb9b", + "packaging": "None", + "country": "XW", + "id": "ef140c88-8bf1-4e50-9555-5c1d1ed5865c", + "artist-credit": [ + { + "joinphrase": " & ", + "name": "Jonathan Coulton", + "artist": { + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df", + "name": "Jonathan Coulton", + "id": "d8df7087-06d5-4545-9024-831bb8558ad1", + "sort-name": "Coulton, Jonathan", + "disambiguation": "", + "type": "Person" + } + }, + { + "artist": { + "type": "Person", + "disambiguation": "", + "id": "7b5b87d3-f3ee-4b5d-b111-1f2e87f87124", + "sort-name": "Roderick, John", + "name": "John Roderick", + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df" + }, + "name": "John Roderick", + "joinphrase": "" + } + ] +} +``` + +To catalogue multi-artist content, Funkwhale needs to: + +1. Fetch information for **each** contributing artist and create `Artist` objects for any that don't exist +2. Create `ArtistCredit` objects associated with each release and recording for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Funkwhale ->> MusicBrainz: /release/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Album and ArtistCredit information + Funkwhale ->> MusicBrainz: /recording/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Track and ArtistCredit information + loop For each unique artist mbid + Funkwhale ->> MusicBrainz: /artist/{mbid}?fmt=json&inc=aliases + MusicBrainz -->> Funkwhale: Artist information + end +``` + +Given the above example, Funkwhale would create the following `ArtistCredit` object: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ---------------- | ---------- | +| 1 | 1 | Jonathan Coulton | & | +| 2 | 2 | John Roderick | | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +Data needs to be clearly presented in the web app to ensure that users can easily see which artists collaborated on a work and discover more of their work. + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html + + {credit}{joinphrase} + +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html + + Jonathan Coulton & + John Roderick + +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place diff --git a/docs/specs/multi-artist/non-mb-content.md b/docs/specs/multi-artist/non-mb-content.md new file mode 100644 index 000000000..b0b16933b --- /dev/null +++ b/docs/specs/multi-artist/non-mb-content.md @@ -0,0 +1,348 @@ +# Multi-artist support for non-MusicBrainz-tagged content + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +To account for content tagged in tagged in systems **other than MusicBrainz**, a `parse_credit` strategy should be used to parse artist credit from a file's metadata using join phrase parsing. + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|no| parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + artist --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags in the file's metadata and creating `Artist` entries for new artists +2. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> parse_credit: Parse credit from tags + parse_credit -->> ArtistCredit: Return credit information +``` + +Funkwhale should provide the following to enable artist parsing in non-MusicBrainz-tagged content: + +1. A sensible list of default **join phrases** that are commonly found in artist tags +2. A setting to enable admins to override or add to the list of join phrases + +Funkwhale should tokenize the `ALBUMARTIST` and `ARTIST` fields using a list of **join phrases**. For each token in the list, Funkwhale should do the following: + +1. Store content split at the **join phrase** token as the `credit` +2. Search for any artist with the same name as the `credit` and store the id as the `artist_id` + - If no existing artist is found, create a new artist and return the ID as `artist_id` +3. Store the join phrase token that it split at as the `joinphrase` +4. Create an `ArtistCredit` object for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +5. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Upload ->> parse_content: Read file metadata + loop For each artist name + parse_content ->> Artist: Search Artist entries + Artist -->> parse_content: Return entry (if exists) + parse_content ->> Artist: Create Artist entry (if none found) + end + loop For each unique artist credit combination + parse_content ->> ArtistCredit: Search ArtistCredit entries + ArtistCredit -->> parse_content: Return entry (if exists) + parse_content ->> ArtistCredit: Create ArtistCredit entry (if none found) + parse_content ->> Track: Create Track with artist_credit entries + parse_content ->> Album: Create Album with artist_credit entries + end +``` + +Funkwhale should do the following automatically: + +- Trim whitespace from the artist `credit` +- Preserve whitespace around **both sides** of the `joinphrase` for readability +- Use an **empty** string (`""`) as the `joinphrase` for the last entry in the list + +For example, given a list of join phrases like this: + +- `$`, `|`, `&`, `/`, `feat.` + +And the following tags: + +| Tag | Values | +| ----------- | ------------------------------------------------------- | +| ALBUMARTIST | Tommy J. & Bobby Forth | +| ARTIST | Tommy J. feat. Robin Devil, Jerry Sabbath & Sammy Burns | + +Funkwhale would create the following `ArtistCredit` entries for the `Album`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ----------- | ---------- | +| 1 | 1 | Tommy J. | & | +| 2 | 2 | Bobby Forth | | + +And the following for the `Track`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ------------- | ---------- | +| 3 | 1 | Tommy J. | " feat. " | +| 4 | 3 | Robin Devil | ", " | +| 5 | 4 | Jerry Sabbath | " & " | +| 6 | 5 | Sammy Burns | "" | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +To prevent issues with tagging, the user should be presented a summary of artist credits that are separated using the `parse_credit` strategy. + +Once the upload has been processed by the server, the user should be shown a summary of the uploaded content with artists listed against each recording and release. The user should then be able to amend these results and send a request to update the values. Upon receiving a new value, the server should perform the same deduplication it performs during a new upload. + +1. The user uploads new content to Funkwhale +2. Funkwhale parses the artist credits and saves the new credit objects in case the upload is interrupted +3. Funkwhale displays a summary of the changes + 1. If the results are **correct**, the user accepts the changes and finishes the upload + 2. If the results are **incorrect**, the user modifies the artist credits and submits the changes + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + artist --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> verify(Funkwhale displays the results to the user) + verify --> correct{Are the artist tags correct?} + correct -->|no| tweak(The user corrects the details and\nsubmits the new information to Funkwhale) + tweak & correct -->|yes| finish(The user finishes the upload process) +``` + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html + + {credit}{joinphrase} + +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html + + Jonathan Coulton & + John Roderick + +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages + - Creating a workflow to enable users to verify uploaded data and fix any broken artist credits +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration +3. Implement the token splitting and data fetching for new files + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place From 935aa257b8c4fba8bc6e8466946de94429af33dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Wed, 8 Nov 2023 10:04:48 +0000 Subject: [PATCH 048/371] fix(docs): update public profile wording Part-of: --- changes/changelog.d/follow.doc | 1 + docs/index.md | 1 + docs/specs/user-follow/index.md | 295 ++++++++++++++++++++++++++++++++ 3 files changed, 297 insertions(+) create mode 100644 changes/changelog.d/follow.doc create mode 100644 docs/specs/user-follow/index.md diff --git a/changes/changelog.d/follow.doc b/changes/changelog.d/follow.doc new file mode 100644 index 000000000..db91ce854 --- /dev/null +++ b/changes/changelog.d/follow.doc @@ -0,0 +1 @@ +Add spec for user following. diff --git a/docs/index.md b/docs/index.md index 6566d65bf..1c1224a86 100644 --- a/docs/index.md +++ b/docs/index.md @@ -106,6 +106,7 @@ specs/nodeinfo21/index specs/offline-mode/index specs/quality-filter/index specs/multi-artist/index +specs/user-follow/index ``` diff --git a/docs/specs/user-follow/index.md b/docs/specs/user-follow/index.md new file mode 100644 index 000000000..1bca3a39d --- /dev/null +++ b/docs/specs/user-follow/index.md @@ -0,0 +1,295 @@ +# User following + +## Terminology + +The following terminology is used throughout this document: + +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Follow +: The act of subscribing to a user's activities to render them in a feed as they occur. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object representing an entity capbable of performing actions. See the [ActivityPub specification][actor] for more details. + +Requesting user +: The user who sends a request. For example: If **Bob** requests to follow **Alice**, **Bob** is the requesting user. + +Target user +: The user who is the subject of a request. For example: If **Bob** requests to follow **Alice**, **Alice** is the target user. + +## The issue + +Funkwhale is an audio platform with an emphasis on social interaction across a federated network of servers. To this end, Funkwhale users should be able to interact with one another in meaningful ways. + +Funkwhale users broadcast the following activity when using the software: + +1. **Favoriting** content +2. **Listening** to content + +Users across the federated web should be able to follow Funkwhale accounts to receive this activity in their streams. + +## Proposed solution + +To facilitate this, Funkwhale uses the following mechanisms: + +- The **Funkwhale client API** for user to user interactions on the same server +- [ActivityPub](https://www.w3.org/TR/activitypub) for server-to-server (S2S) interactions between users + +Users should be able to discover other users using the [Webfinger protocol][webfinger] and render their public details in a manner compliant with the platform they use. Within Funkwhale, user activity should be rendered natively. Other Fediverse software may choose how to render this information. + +This specification outlines the workflows for the following actions for **local** and **remote** requests: + +1. User discovery +2. User follows +3. User unfollows +4. User blocking + +### User discovery + +Funkwhale implements the [Webfinger protocol][webfinger] for account discovery. When the **requesting user** enters the **target user's** federation handle, Funkwhale should attempt to resolve the location of the **target user** by querying the `acct:` resource with the URL encoded handle. + +#### Webfinger request + +```console +$ curl -X GET \ +-H "Content-type: application/json" \ +'https://open.audio/.well-known/webfinger?resource=acct:user%40open.audio' +``` + +#### Response + +```json +{ + "subject": "acct:user@open.audio", + "links": [ + { + "rel": "self", + "href": "https://open.audio/federation/actors/user", + "type": "application/activity+json" + } + ], + "aliases": ["https://open.audio/federation/actors/user"] +} +``` + +#### Web app behavior + +When a requesting user enters the handle of a target user in the search bar, Funkwhale does the following: + +1. Verifies the handle is well-formed +2. Forwards the request to the server + +The server is responsible for dereferencing the Webfinger query. The server does the following: + +1. Queries the domain for the account using Webfinger + - **If** the domain doesn't have a Webfinger endpoint, returns a meaningful error message. This must be displayed to the user. + - **If** the server is subject to a domain filter, or is filtering the requesting server, returns a meaningful error message. This must be displayed to the user. + - **If** no user is found on the domain, returns a meaningful error message. +2. If a matching user is found, the server should return the URL of the resource to the web app. The web app should then redirect the requesting user to a user page that shows the target user's profile image and preferred username + - **If** the target user has set their activity to **public**, the web app should render their **Favorites** and **Recently Listened** activity + +```{mermaid} +flowchart TD + search([A requesting user enters a fediverse handle\nin the search bar]) --> query(Funkwhale queries the target domain) + query --> webfinger{Does the target server\support Webfinger?} + subgraph Request verification + webfinger -->|no| error([The server returns an error message]) + webfinger -->|yes| filter{Is the requesting server subject\nto a domain filter or vice versa?} + filter -->|yes| error + filter -->|no| userfound{Was the target user found\non the server?} + userfound -->|no| error + end + userfound -->|yes| redirect([The user is redirected to a profile page\nin the web app]) +``` + +### Following users + +Following a user is a process by which a **requesting user** subscribes to the activities of a **target user**. If the **target user** accepts the follow request, the **requesting user** receives any new activities in their home feed. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/follow +``` + +When the server receives a `follow` request, it creates a `follow_request` object containing the status of the follow request which is used to display request information to the target user in their notifications. + +:::{note} +If the **target user** has configured their profile to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Follow` activity][follow]: + +1. A [`Follow` activity][follow] is posted to the **requesting user's** [outbox collection][outbox] with the **target user** as the recipient +2. The **target user** receives the request in their [inbox collection][inbox] +3. The **target user** then needs to [`Accept`][accept] or [`Reject`][reject] the [`Follow`][follow] + - If the **target user** accepts the follow, the **requesting user** is added to the **target user's** [following collection][following]. The **target user** is added to the **requesting user's** [followers collection][followers] + - If the **target user** rejects the follow, the **requesting user** is _not_ added to the **target user's** [following collection][following]. The **target user** is _not_ added to the **requesting user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Follow request + note over Bob's Outbox, Bob's Inbox : Bob's ActivityPub collections + Bob's Outbox ->> Alice's Inbox : Follow request + note over Alice's Inbox, Alice's Outbox : Alice's ActivityPub collections + Alice's Inbox ->> Alice : Display follow request + activate Alice + alt if Alice accepts Bob's request + Alice -->> Alice's Outbox : Accept follow + Alice's Outbox --> Bob's Inbox : Accept + Bob's Inbox --> Bob : Display following + end + alt if Alice rejects Bob's request + Alice -->> Alice's Inbox : Reject follow + end +``` + +:::{note} +If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### Web app behavior + +In the Funkwhale web app, the **requesting user** sees a **Follow** button on the **target user's** profile page. When they select this button, the following happens: + +1. If the **target user's** profile can be followed, an action button is displayed. +2. When the **requesting user** attempts the follow the **target user**, the button should change to a {guilabel}`Pending` status. +3. If the **target user** `Accepts` the follow request, the button should update to show a {guilabel}`Following` status. + +### Unfollowing users + +Following a user is a process by which a **requesting user** unsubscribes from the activities of a **target user**. A **requesting user** may unfollow a **target user** unilaterally at any time to stop receiving updates. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unfollow +``` + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Undo` activity][undo]: + +1. An [`Undo` activity][undo] is posted to the **requesting user's** [outbox collection][outbox] with a [`Follow activity`][follow] as the target +2. The **target user** is removed from the **requesting user's** [following collection][following] +3. The **target user** receives the undo request in their [inbox collection][inbox] +4. The **requesting user** is removed from the **target user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Undo request + note over Bob, Bob's Outbox : The target user is removed + Bob's Outbox ->> Alice's Inbox : Undo Follow + note over Alice's Inbox, Alice : The requesting user is removed +``` + +#### Web app behavior + +When a **requesting user** unfollows a **target user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **target user** must be visually hidden. + +### Blocking users + +When one user blocks another, no information may be shared between them. Blocking is a unilateral action that can be taken by both **requesting** and **target** actors to prevent the other from interacting with them. + +#### API behavior + +Block requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/block +``` + +#### ActivityPub behavior + +If the the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Block` activity][block] with the **blocked user's** [`Actor`][actor] as a target. + +1. A [`Block` activity][block] is posted to the **blocking user's** [outbox collection][outbox] with the **blocked user's** [`Actor`][actor] the target + - If the **blocked user** was previously in the **blocking user's** [following collection][following], they are removed + - If the **blocked user** was previously in the **blocking user's** [followers collection][followers], they are removed + +:::{warning} +As noted in the ActivityPub spec, the **blocked user** must _not_ be informed of the `Block` activity. +::: + +#### Web app behavior + +When a **blocking user** blocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **blocked user** must be visually hidden. + +If a **blocking user** navigates to the profile of a **blocked user** who has blocked them, the UI _must not_ reflect that they are blocked. The **blocking user** must be able to send a follow request which is _not_ sent to the **blocked user**. + +### Unblocking users + +**Blocking users** can unilaterally reverse blocks they have imposed on **blocked users**. This enables them to request to follow the **blocked user's** activities again. + +#### API behavior + +Unblock requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unblock +``` + +#### ActivityPub behavior + +If the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Undo` activity][undo]. + +#### Web app behavior + +When a **blocking user** unblocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. The **Follow** button must become active and interactive again. + +## Availability + +- [x] App frontend +- [x] CLI + +## Responsible parties + +The following working groups are responsible for implementing this feature: + +- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic +- The **Design group** is responsible for drafting designs for the web app interactions +- The **Frontend group** is responsible for implementing the desigs from the **Design group** and adding support for the new API +- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users + +## Open questions + +- The API actions and endpoint names are placeholders. We need to decide what they should be called +- What limitations are there when fetching activities from remote actors? +- How should a user's followers collection, following collection, and pending requests be displayed in the web app? +- How are followed activities fetched and displayed to a user? + +## Minimum viable product + +The MVP for this feature is to implement the backend logic to enable Funkwhale users to follow one another. This can be added to the web app using existing profile fetching logic. + +### Next steps + +Once the backend logic is implemented, the frontend implementation should be revisited to improve the UX and discoverability. Additional features such as showing federated favorites on audio objects should also be considered. + +[webfinger]: https://www.rfc-editor.org/rfc/rfc7033 +[outbox]: https://www.w3.org/TR/activitypub/#outbox +[inbox]: https://www.w3.org/TR/activitypub/#inbox +[accept]: https://www.w3.org/TR/activitypub/#accept-activity-inbox +[reject]: https://www.w3.org/TR/activitypub/#reject-activity-inbox +[follow]: https://www.w3.org/TR/activitypub/#follow-activity-outbox +[actor]: https://www.w3.org/TR/activitypub/#actors +[following]: https://www.w3.org/TR/activitypub/#following +[followers]: https://www.w3.org/TR/activitypub/#followers +[undo]: https://www.w3.org/TR/activitypub/#undo-activity-outbox +[block]: https://www.w3.org/TR/activitypub/#block-activity-outbox From debd334b388fa75196afefe005877c4d5b0734f9 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 1 Nov 2023 11:48:54 +0100 Subject: [PATCH 049/371] chore(gitpod): Update workspace image to 2023-10-25-20-43-33 Part-of: --- .gitpod/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 7236a7e3e..32aaa42f2 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -1,4 +1,4 @@ -FROM gitpod/workspace-full:2022-11-15-17-00-18 +FROM gitpod/workspace-full:2023-10-25-20-43-33 USER gitpod RUN sudo apt update -y \ From b05bce3b37ffbd06de02217e81bf4234a68523ee Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 2 Nov 2023 08:38:37 +0000 Subject: [PATCH 050/371] chore(gitpod): Speed up workspace initialisation Part-of: --- .gitpod.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index d925d1925..473c802e2 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -59,9 +59,10 @@ tasks: ENV_FILE: /workspace/funkwhale/.gitpod/.env VUE_EDITOR: code DJANGO_SETTINGS_MODULE: config.settings.local - init: pre-commit install + init: | + pre-commit install + pre-commit run --all command: | - pre-commit run --all && clear echo "" echo -e " ā €ā €ā øā£æā£·ā£¦ā£„ā£ ā£¶ā£¾ā£æā ‡ā €ā € You can now start developing Funkwhale with gitpod!" echo -e " ā €ā €ā €ā ˆā ‰ā »ā£æā£æā Ÿā ‰ā ā €ā €ā €" From 1933a06cc089c65146d1bc893414face07aefebd Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 2 Nov 2023 08:40:38 +0000 Subject: [PATCH 051/371] feat(gitpod): Name the ports Part-of: --- .gitpod.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index 473c802e2..29f893054 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -73,31 +73,38 @@ tasks: echo "" ports: - - port: 8000 + - name: Funkwhale + port: 8000 visibility: public onOpen: notify - - port: 5000 + - name: Funkwhale API + port: 5000 visibility: private onOpen: ignore - - port: 5432 + - name: PostgreSQL + port: 5432 visibility: private onOpen: ignore - - port: 5678 + - name: Debugpy + port: 5678 visibility: private onOpen: ignore - - port: 6379 + - name: Redis + port: 6379 visibility: private onOpen: ignore - - port: 8080 + - name: Frontend + port: 8080 visibility: private onOpen: ignore - - port: 8001 + - name: Documentation + port: 8001 visibility: public onOpen: notify From 66bd79b6133627d169f66ace4c2b1f47b1586d93 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 2 Nov 2023 11:09:03 +0100 Subject: [PATCH 052/371] chore(gitpod): Pin python version to 3.11 Part-of: --- .gitpod/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 32aaa42f2..2761f490c 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -4,6 +4,8 @@ USER gitpod RUN sudo apt update -y \ && sudo apt install libsasl2-dev libldap2-dev libssl-dev ffmpeg gettext -y +RUN pyenv install 3.11 && pyenv global 3.11 + RUN pip install poetry pre-commit \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true From 8f4251bb6e91cbb45cfdc03fc5278ea89e9455ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Sun, 12 Nov 2023 13:42:23 +0100 Subject: [PATCH 053/371] feat(front): Add support for Funkwhale UI library Part-of: --- front/package.json | 1 + front/src/style/_main.scss | 1 + front/yarn.lock | 18 ++++++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/front/package.json b/front/package.json index 87003d8cb..f159c6238 100644 --- a/front/package.json +++ b/front/package.json @@ -17,6 +17,7 @@ "postinstall": "yarn run fix-fomantic-css" }, "dependencies": { + "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", "@vue/runtime-core": "3.3.2", diff --git a/front/src/style/_main.scss b/front/src/style/_main.scss index ddae53193..b537fd540 100644 --- a/front/src/style/_main.scss +++ b/front/src/style/_main.scss @@ -64,3 +64,4 @@ $bottom-player-height: 4rem; @import "./themes/light/_main.scss"; @import "./themes/dark/_main.scss"; +@import "@funkwhale/ui/style.css"; diff --git a/front/yarn.lock b/front/yarn.lock index bcf42c163..7e3128f84 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1247,6 +1247,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@funkwhale/ui@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@funkwhale/ui/-/ui-0.2.2.tgz#09a5f8e6b30d7a898b50f5fdcfce9b09b3071c5b" + integrity sha512-+rmChC/06XVSEwzSN7ldVjtdKJknqk2FUBTBuhN41+BrinRpySjM5PQoUfVN5IiQkL8Nff5sIjt2k8gluHZ85g== + dependencies: + dompurify "^2.4.3 || ^3.0.0" + showdown "^2.1.0" + transliteration "^2.3.5" + "@humanwhocodes/config-array@^0.11.8": version "0.11.11" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" @@ -3717,6 +3726,11 @@ dompurify@2.4.7: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== +"dompurify@^2.4.3 || ^3.0.0": + version "3.0.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.6.tgz#925ebd576d54a9531b5d76f0a5bef32548351dae" + integrity sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w== + domutils@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" @@ -6206,7 +6220,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -showdown@2.1.0: +showdown@2.1.0, showdown@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== @@ -6654,7 +6668,7 @@ tr46@^3.0.0: dependencies: punycode "^2.1.1" -transliteration@2.3.5: +transliteration@2.3.5, transliteration@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.3.5.tgz#8f92309575f69e4a8a525dab4ff705ebcf961c45" integrity sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw== From 7f12f5f9c3d475ff51bec8123c00a7b463c92b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Sun, 12 Nov 2023 13:45:16 +0100 Subject: [PATCH 054/371] chore: Add changelog snippet Part-of: --- changes/changelog.d/ui-lib.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/ui-lib.feature diff --git a/changes/changelog.d/ui-lib.feature b/changes/changelog.d/ui-lib.feature new file mode 100644 index 000000000..5c453ccff --- /dev/null +++ b/changes/changelog.d/ui-lib.feature @@ -0,0 +1 @@ +Add support for Funkwhale UI library. From 18136c7ae4fd09dce05d53ef7e202d1974e944fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Sun, 12 Nov 2023 14:10:01 +0100 Subject: [PATCH 055/371] fix(front): move library further up CSS imports Part-of: --- front/src/style/_main.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/front/src/style/_main.scss b/front/src/style/_main.scss index b537fd540..797948cba 100644 --- a/front/src/style/_main.scss +++ b/front/src/style/_main.scss @@ -5,6 +5,8 @@ $desktop-sidebar-width: 275px; $widedesktop-sidebar-width: 275px; $bottom-player-height: 4rem; +@import "@funkwhale/ui/style.css"; + @import "./globals/_fomantic.scss"; @import "./vendor/_media.scss"; @@ -64,4 +66,3 @@ $bottom-player-height: 4rem; @import "./themes/light/_main.scss"; @import "./themes/dark/_main.scss"; -@import "@funkwhale/ui/style.css"; From 4e79362aef1c46e920ec812adb24d0c48daec399 Mon Sep 17 00:00:00 2001 From: Petitminion Date: Thu, 9 Nov 2023 17:04:07 +0100 Subject: [PATCH 056/371] remove network internal from typesense docker compose file Part-of: --- deploy/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index fe32450ad..b947a6dbc 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -98,8 +98,6 @@ services: env_file: - .env image: typesense/typesense:0.24.0 - networks: - - internal volumes: - ./typesense/data:/data command: --data-dir /data --enable-cors From d6e5ba8acdd9da5211cefe5395994ec88685b2f9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 12 Nov 2023 12:34:57 +0000 Subject: [PATCH 057/371] chore(docs): pin dependency sphinx-autobuild to 2021.3.14 Part-of: --- docs/poetry.lock | 54 ++++----------------------------------------- docs/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 51 deletions(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index 5ce14e355..f63674c48 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -16,7 +15,6 @@ files = [ name = "asgiref" version = "3.7.2" description = "ASGI specs, helper code, and adapters" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -34,7 +32,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] name = "babel" version = "2.13.1" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -53,7 +50,6 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -65,7 +61,6 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -165,7 +160,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -180,7 +174,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -192,7 +185,6 @@ files = [ name = "django" version = "3.2.20" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -213,7 +205,6 @@ bcrypt = ["bcrypt"] name = "django-environ" version = "0.10.0" description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." -category = "main" optional = false python-versions = ">=3.5,<4" files = [ @@ -222,15 +213,14 @@ files = [ ] [package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] [[package]] name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -242,7 +232,6 @@ files = [ name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -254,7 +243,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -266,7 +254,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -286,7 +273,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -304,7 +290,6 @@ i18n = ["Babel (>=2.7)"] name = "livereload" version = "2.6.3" description = "Python LiveReload is an awesome tool for web developers" -category = "dev" optional = false python-versions = "*" files = [ @@ -320,7 +305,6 @@ tornado = {version = "*", markers = "python_version > \"2.7\""} name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -345,7 +329,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -415,7 +398,6 @@ files = [ name = "mdit-py-plugins" version = "0.3.5" description = "Collection of plugins for markdown-it-py" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -435,7 +417,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -447,7 +428,6 @@ files = [ name = "myst-parser" version = "1.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -474,7 +454,6 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -486,7 +465,6 @@ files = [ name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -501,7 +479,6 @@ plugins = ["importlib-metadata"] name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -513,7 +490,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -573,7 +549,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -595,7 +570,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -612,7 +586,6 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -624,7 +597,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = false python-versions = "*" files = [ @@ -636,7 +608,6 @@ files = [ name = "sphinx" version = "5.3.0" description = "Python documentation generator" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -672,7 +643,6 @@ test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] name = "sphinx-autobuild" version = "2021.3.14" description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -692,7 +662,6 @@ test = ["pytest", "pytest-cov"] name = "sphinx-copybutton" version = "0.5.2" description = "Add a copy button to each of your code cells." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -711,7 +680,6 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-design" version = "0.3.0" description = "A sphinx extension for designing beautiful, view size responsive web components." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -735,7 +703,6 @@ theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] name = "sphinx-intl" version = "2.0.1" description = "Sphinx utility that make it easy to translate and to apply translation." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -756,7 +723,6 @@ transifex = ["transifex_client (>=0.11)"] name = "sphinx-rtd-theme" version = "1.1.1" description = "Read the Docs theme for Sphinx" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -775,7 +741,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -791,7 +756,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -807,7 +771,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -823,7 +786,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -838,7 +800,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-mermaid" version = "0.7.1" description = "Mermaid diagrams in yours Sphinx powered docs" -category = "main" optional = false python-versions = "*" files = [ @@ -850,7 +811,6 @@ files = [ name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -866,7 +826,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -882,7 +841,6 @@ test = ["pytest"] name = "sqlparse" version = "0.4.4" description = "A non-validating SQL parser." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -899,7 +857,6 @@ test = ["pytest", "pytest-cov"] name = "tornado" version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false python-versions = ">= 3.8" files = [ @@ -920,7 +877,6 @@ files = [ name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -932,7 +888,6 @@ files = [ name = "urllib3" version = "2.0.7" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -950,7 +905,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "zipp" version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -965,4 +919,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "4b3f45e96f90e41f1d8b767463353fe420cee43794fb13383100f134e0ad23d6" +content-hash = "dbd54a5a67c078888da718f27a2d25cc3b012cb42f9f20ff42b0d094aa86e499" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 99a23a659..e4924b661 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -20,7 +20,7 @@ django = "==3.2.20" django-environ = "==0.10.0" [tool.poetry.group.dev.dependencies] -sphinx-autobuild = "^2021.3.14" +sphinx-autobuild = "2021.3.14" [build-system] requires = ["poetry-core>=1.0.0"] From 28989d8ed661f19004f254dafa8d6e283a8fe4f9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 13 Nov 2023 08:47:12 +0000 Subject: [PATCH 058/371] chore(front): lock file maintenance Part-of: --- front/yarn.lock | 2003 ++++++++++++++++++++++++----------------------- 1 file changed, 1021 insertions(+), 982 deletions(-) diff --git a/front/yarn.lock b/front/yarn.lock index 4164d3094..538bc63dc 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -42,38 +42,38 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" + integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== "@babel/core@^7.11.1": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.15.tgz#15d4fd03f478a459015a4b94cfbb3bd42c48d2f4" - integrity sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" + "@babel/generator" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.15" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.2" + "@babel/parser" "^7.23.3" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" - convert-source-map "^1.7.0" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== +"@babel/generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" + integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.23.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -85,14 +85,14 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== @@ -103,7 +103,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== @@ -118,7 +118,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -127,10 +127,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" + integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -138,18 +138,18 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" @@ -158,30 +158,30 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" - integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== +"@babel/helper-member-expression-to-functions@^7.22.15": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz#40ad2f6950f143900e9c1c72363c0b431a606082" - integrity sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" "@babel/helper-simple-access" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.15" + "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" @@ -195,22 +195,22 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" - integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.9" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== +"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": @@ -239,63 +239,71 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.22.15", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044" - integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== "@babel/helper-validator-option@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== -"@babel/helper-wrap-function@^7.22.9": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" - integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.10" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== +"@babel/helpers@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" + integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.23.2" + "@babel/types" "^7.23.0" "@babel/highlight@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" - integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.16.4", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7": - version "7.22.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" - integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== +"@babel/parser@^7.16.4", "@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -337,17 +345,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -429,211 +437,211 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz#9df2627bad7f434ed13eef3e61b2b65cafd4885b" + integrity sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" - integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== +"@babel/plugin-transform-block-scoping@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz#e99a3ff08f58edd28a8ed82481df76925a4ffca7" + integrity sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz#56f2371c7e5bf6ff964d84c5dc4d4db5536b5159" + integrity sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" + integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" - integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz#82625924da9ed5fb11a428efb02e43bc9a3ab13e" + integrity sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz#dcd066d995f6ac6077e5a4ccb68322a01e23ac49" + integrity sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" + integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz#489724ab7d3918a4329afb4172b2fd2cf3c8d245" + integrity sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz#3a406d6083feb9487083bca6d2334a3c9b6c4808" + integrity sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" - integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" - integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -644,198 +652,199 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz#8a613d514b521b640344ed7c56afeff52f9413f8" + integrity sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz#2f8da42b75ba89e5cfcd677afd0856d52c0c2e68" + integrity sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz#509373753b5f7202fe1940e92fd075bd7874955f" + integrity sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz#362c0b545ee9e5b0fa9d9e6fe77acf9d4c480027" + integrity sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" - integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== +"@babel/plugin-transform-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz#92fc83f54aa3adc34288933fa27e54c13113f4be" + integrity sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz#5cd34a2ce6f2d008cc8f91d8dcc29e2c41466da6" + integrity sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.15.tgz#142716f8e00bc030dae5b2ac6a46fbd8b3e18ff8" - integrity sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.3.tgz#d299e0140a7650684b95c62be2db0ef8c975143e" + integrity sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -847,59 +856,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.3" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.3" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.3" + "@babel/plugin-transform-classes" "^7.23.3" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.3" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.3" + "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.3" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" + "@babel/plugin-transform-numeric-separator" "^7.23.3" + "@babel/plugin-transform-object-rest-spread" "^7.23.3" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.3" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.15" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" @@ -917,21 +925,14 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.10", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.23.2": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5": +"@babel/template@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -940,29 +941,29 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.15.tgz#75be4d2d6e216e880e93017f4e2389aeb77ef2d9" - integrity sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ== +"@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" + integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== dependencies: "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/generator" "^7.23.3" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/parser" "^7.23.3" + "@babel/types" "^7.23.3" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.15.tgz#266cb21d2c5fd0b3931e7a91b6dd72d2f617d282" - integrity sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA== +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.4.4": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" + integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.15" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1198,9 +1199,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.0.tgz#11195513186f68d42fbf449f9a7136b2c0c92005" - integrity sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg== + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== "@eslint/eslintrc@^1.2.0", "@eslint/eslintrc@^1.4.0": version "1.4.1" @@ -1218,11 +1219,11 @@ strip-json-comments "^3.1.1" "@humanwhocodes/config-array@^0.11.8": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -1231,10 +1232,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@intlify/bundle-utils@^4.0.0": version "4.0.0" @@ -1247,16 +1248,6 @@ source-map "0.6.1" yaml-eslint-parser "^0.3.2" -"@intlify/core-base@9.3.0", "@intlify/core-base@^9.1.9": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0.tgz#fa42e32f89f06d421772fcedeec7dfba845ba98f" - integrity sha512-SRzn8TMnPZ6MY8OFrgouRq4DGaf01SHcJEF6FglYFYvRkgPzziEcQe+v2PD+O5lUp/rJafP4dabm1CmsVAA7rA== - dependencies: - "@intlify/devtools-if" "9.3.0" - "@intlify/message-compiler" "9.3.0" - "@intlify/shared" "9.3.0" - "@intlify/vue-devtools" "9.3.0" - "@intlify/core-base@9.3.0-beta.19": version "9.3.0-beta.19" resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0-beta.19.tgz#f89de10d183f4352500beb9c844632c96c5308b0" @@ -1267,12 +1258,13 @@ "@intlify/shared" "9.3.0-beta.19" "@intlify/vue-devtools" "9.3.0-beta.19" -"@intlify/devtools-if@9.3.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0.tgz#ae5a4d3577e05577e65bb6abbb0506d8af9309f6" - integrity sha512-5aKZnqj0Ff4dfwBX2Oo+MheVs00CBnC0RzWK26aT2M4AF0cxdFLOJAs51/eHT01jmzrxSvfBMjdArUWHwgetfg== +"@intlify/core-base@^9.1.9": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.6.5.tgz#af92cae122fb99e882b3d7f1433f682065a3e164" + integrity sha512-LzbGXiZkMWPIHnHI0g6q554S87Cmh2mmCmjytK/3pDQfjI84l+dgGoeQuKj02q7EbULRuUUgYVZVqAwEUawXGg== dependencies: - "@intlify/shared" "9.3.0" + "@intlify/message-compiler" "9.6.5" + "@intlify/shared" "9.6.5" "@intlify/devtools-if@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1302,14 +1294,6 @@ vue-eslint-parser "^9.0.0" yaml-eslint-parser "^1.0.0" -"@intlify/message-compiler@9.3.0", "@intlify/message-compiler@^9.1.9", "@intlify/message-compiler@next": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0.tgz#203366fe7448255731e951507c4d79093bf898b1" - integrity sha512-D8tSJEhTCSFcCzkThjE4Sbk1tIdvzkYa1FaVIzUtZ8hKPATvokNrOiDw1i/h671m8A80l9Ywq594i/LPTB6EJA== - dependencies: - "@intlify/shared" "9.3.0" - source-map-js "^1.0.2" - "@intlify/message-compiler@9.3.0-beta.19": version "9.3.0-beta.19" resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.19.tgz#1b66bf87d15843c9354a0d07d26e417f44b65182" @@ -1318,16 +1302,37 @@ "@intlify/shared" "9.3.0-beta.19" source-map "0.6.1" -"@intlify/shared@9.3.0", "@intlify/shared@next": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0.tgz#8875120f1e6826be0e99b623e2618167402bfe41" - integrity sha512-MMGRz6zWxtz7rHtxIIdnyb8SYOIaaseN1IvUhAEs9tOW4u77RD4DFp4qgPXesp2Gxo/5QitH9kwSs0jnxGUNEw== +"@intlify/message-compiler@9.6.5", "@intlify/message-compiler@^9.1.9": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.6.5.tgz#3a33882497417c63b23b012731d60a485c8e5558" + integrity sha512-WeJ499thIj0p7JaIO1V3JaJbqdqfBykS5R8fElFs5hNeotHtPAMBs4IiA+8/KGFkAbjJusgFefCq6ajP7F7+4Q== + dependencies: + "@intlify/shared" "9.6.5" + source-map-js "^1.0.2" + +"@intlify/message-compiler@next": + version "9.4.1" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.4.1.tgz#aa00629a455e23cece3464293834a02994b4fb04" + integrity sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw== + dependencies: + "@intlify/shared" "9.4.1" + source-map-js "^1.0.2" "@intlify/shared@9.3.0-beta.19": version "9.3.0-beta.19" resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.19.tgz#090bdd5d6ed1eabbb92ee2f2ead2668edc576596" integrity sha512-+lhQggrLvlQ/O5OmIYAc9gadcYXMoaDi0Doef+X/f6TLZFr9PTMjOpBWmpwNNHi026e54jckntUn6GzqDtIN4w== +"@intlify/shared@9.4.1", "@intlify/shared@next": + version "9.4.1" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz#bd0d221aaac476b6778a10ddcd0472f812c64e27" + integrity sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng== + +"@intlify/shared@9.6.5": + version "9.6.5" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.6.5.tgz#a81f384d804e99ceac55bb061c344f156bd96590" + integrity sha512-gD7Ey47Xi4h/t6P+S04ymMSoA3wVRxGqjxuIMglwRO8POki9h164Epu2N8wk/GHXM/hR6ZGcsx2HArCCENjqSQ== + "@intlify/unplugin-vue-i18n@0.8.2": version "0.8.2" resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.8.2.tgz#4196cb5bee4243bb3a33af76ce9663f3e106809a" @@ -1346,14 +1351,6 @@ source-map "0.6.1" unplugin "^1.0.0" -"@intlify/vue-devtools@9.3.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0.tgz#f3137319fadaa92686de11be5ef28209dc828455" - integrity sha512-kEaxIz1VEgsz2q5RhoS+fBGTkXr/4+pxmK9mN14+speVGb82HPRntKBmz0GO18I1JisD4Z0vAva+KCTHGeAqbQ== - dependencies: - "@intlify/core-base" "9.3.0" - "@intlify/shared" "9.3.0" - "@intlify/vue-devtools@9.3.0-beta.19": version "9.3.0-beta.19" resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0-beta.19.tgz#e3053ec984d28028a3ce15cffd74ce1af40c37f7" @@ -1394,15 +1391,15 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1462,12 +1459,12 @@ magic-string "^0.25.7" "@rollup/plugin-replace@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz#45f53501b16311feded2485e98419acb8448c61d" - integrity sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA== + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" + integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== dependencies: "@rollup/pluginutils" "^5.0.1" - magic-string "^0.27.0" + magic-string "^0.30.3" "@rollup/pluginutils@^3.1.0": version "3.1.0" @@ -1486,10 +1483,10 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" - integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.5.tgz#bbb4c175e19ebfeeb8c132c2eea0ecb89941a66c" + integrity sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" @@ -1625,16 +1622,16 @@ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/chai-subset@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" - integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a" + integrity sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== dependencies: "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.4": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== + version "4.3.10" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.10.tgz#2ad2959d1767edee5b0e4efb1a0cd2b500747317" + integrity sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg== "@types/cookie@^0.3.3": version "0.3.3" @@ -1659,9 +1656,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/glob@5 - 7": version "7.2.0" @@ -1672,14 +1669,14 @@ "@types/node" "*" "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/jquery@*": - version "3.5.18" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.18.tgz#2a4979866954e601361ddc62ea304c9e46311b77" - integrity sha512-sNm7O6LECFhHmF+3KYo6QIl2fIbjlPYa0PDgDQwfOaEJzwpK20Eub9Ke7VKkGsSJ2K0HUR50S266qYzRX4GlSw== + version "3.5.27" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.27.tgz#d9d67a003d0292a36fe35868a618c82f8fd12b19" + integrity sha512-TR28Y8ezIGgfyA02UOh9x+Fy16/1qWYAnvtRd2gTBJuccX/vmddyti0MezLkTv7f+OLofVc2T961VPyKv1tXJQ== dependencies: "@types/sizzle" "*" @@ -1691,9 +1688,9 @@ "@types/sizzle" "*" "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -1708,9 +1705,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.198" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" - integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== + version "4.14.201" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" + integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== "@types/minimatch@*": version "5.1.2" @@ -1725,14 +1722,16 @@ axios ">=0.13.0" "@types/node@*": - version "20.5.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.9.tgz#a70ec9d8fa0180a314c3ede0e20ea56ff71aed9a" - integrity sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ== + version "20.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" + integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== + dependencies: + undici-types "~5.26.4" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/parse5@^5": version "5.0.3" @@ -1752,146 +1751,146 @@ "@types/node" "*" "@types/semantic-ui-accordion@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.2.tgz#2f3b9d60a981d9eddc3705619079defaacc3aee0" - integrity sha512-XClXI/20W7iFLQ7eyslZswbdv3A4qWEnFz8JvOylGatCW7biTLVhMBPcN0b17TZ1GeV4V/l3ctmvTEBCHvg8CA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.5.tgz#09591490950492705853410f00bf7d8af66e11f9" + integrity sha512-wDm0lvxFIW3TPolsj3gxoHwi6cQpQvaQJq2Tp7aIt5e2USE10ARrDMPWpNTF2WVkBKd6WoUoNb/Nyj8eblOnsA== dependencies: "@types/jquery" "*" "@types/semantic-ui-api@*": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-api/-/semantic-ui-api-2.2.4.tgz#ea9cad381b38b77f95fa3bf679d7c5273c7b20dd" - integrity sha512-6IvCjZDJ0TVb1EtnNFQPNyVmOZnLGPEKyEAs9G0FF3XuAyyOdtfD4NGHJ0kknnX1FD+++ye0EuSVFDutbwEFWw== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-api/-/semantic-ui-api-2.2.7.tgz#fc6e1ceac911f76682bdbfd659bfb6cbaf5f264d" + integrity sha512-QO11dj4pWs3Wph1z8cL80t1u9qpZB45geUKsCsMTovdJRFV3yosOjsHqHhsEzLFVdt6rt3ZmGhXsZRDIECi0SA== dependencies: "@types/jquery" "*" "@types/semantic-ui-checkbox@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.2.tgz#bb19b20d503103a724c9dc79f71132edb092a362" - integrity sha512-ZTAy3yNwOAaoznxsFoR33XopJnyyzAGrLeDpn7hVTkUYm7wgGsgOpRfG2psdM3fIOCkZkkE9IEAp1pLGBifL1g== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.5.tgz#82a834e34fe32ad7c58b349a9761e3f8a517c321" + integrity sha512-dCz6WtksYMUBQqBRRw56kW0FJhbhmFtJei9lbFJ7dnftyVa5xL3Zu7fzbCOyAn2AlsG+xinmgjTj1AGEdEiIGA== dependencies: "@types/jquery" "*" "@types/semantic-ui-dimmer@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dimmer/-/semantic-ui-dimmer-2.2.2.tgz#667185161c31d046a51a6d71097d2909829e1423" - integrity sha512-wK7da/70UJ9AU7Ju2MeOO9sjRPrhU6jf+VvHiTwlaCGm7+ALiJThd88D1iB6ODDQpm+ebjIbQkvAmDSkMpmKlg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dimmer/-/semantic-ui-dimmer-2.2.5.tgz#3be07a65857398a0ec8e4dd127c8b3bac393be06" + integrity sha512-0p0EMwJ1G/Vi7Vti9U+HdMk6aXhInQ6K84KHj7gSM1YI4qvFwed0nsm4CGR8IXUa6SkS8Da0mSVcCLlPduv/lg== dependencies: "@types/jquery" "*" "@types/semantic-ui-dropdown@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.5.tgz#09c1f57f6651580f043d5d77158479d25199cb59" - integrity sha512-WHzxdP2/nSs3G8vtF0UPllQ7VCuVOmOgyM0QRONSbJd/sTdcZaLbw9U+oMbp5QVkICPz+hpCDuZYhp8/YJmsdg== + version "2.2.8" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.8.tgz#4e18b9481573550142c03acb4b7f9a6505b77097" + integrity sha512-2SAkB777xo0VDv0cBoEOxVoPbkbTnhpOSeP6sWl+wzR7B8xt+EJqaVwbCZakdsgmjq4t7c36rpny3TZQBDKacA== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" "@types/semantic-ui-embed@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-embed/-/semantic-ui-embed-2.2.2.tgz#5b851bc966c06812550410348da7f8ea866e0c02" - integrity sha512-5sW99BtK2SIBs9/sSM/0vMr6tphPyPXHyClhFX1tJi0L5ZH0wEmf6XcBRZgROe3ueHYVaJ0Pt/zwPQ5SMW0xDg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-embed/-/semantic-ui-embed-2.2.5.tgz#ff7d9ede0cb5d182de555212051e4519a7f62a6b" + integrity sha512-4Cb+191etZwFqG9aV91v7zFQ32P7hzwwmFRP5DchQV+j4b6MJRFSzm3QQuuAez0YtuTKhThjvS/rEnh6DJa1wg== dependencies: "@types/jquery" "*" "@types/semantic-ui-form@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-form/-/semantic-ui-form-2.2.6.tgz#767c364c92fb3977f221b8c72e094e0928d4a024" - integrity sha512-khj3o6w2TWN9Bh7yZhsosUfAPMBRP/rD3DiApZrPUaioCHf0VrDtYuiqJXTd/Qt7cZW2w+NgZ1riV/3leXx8iA== + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-form/-/semantic-ui-form-2.2.9.tgz#22ac6bae981300a11e8c65a273953f7e7d89068d" + integrity sha512-EcURdJbpd/f1zcIVoeH+lI+W3fDKChksF7KE7jirGlg77uiMDbOFSlxJaXwIEYxU+vwZRXlSib8Hqegkxk/mCg== dependencies: "@types/jquery" "*" "@types/semantic-ui-modal@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.3.tgz#482e8ca3323b22e7247ff92249a52a8bc2fccc6d" - integrity sha512-Th48BFk1pd4kluFjCUDKn7Aml3xoLdFFK8wFQRz6UsOMdvsXx2OrNkubhjqc79tcBzONC7NszSW2ImslPPHNCg== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.6.tgz#dc4f2e7cd856e9ee981ee4479e00e9501aa61286" + integrity sha512-LtiE2PUIKFI3X1isKL15RbhTT61hKgt5MPsuxrg0UhOlEymK4/C4DJXvNLKDtMy7BG3XdhtZxdNhYCE5Z8dLvg== dependencies: "@types/jquery" "*" "@types/semantic-ui-dimmer" "*" "@types/semantic-ui-nag@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-nag/-/semantic-ui-nag-2.2.2.tgz#93e9cc410aa17b273ef73a705666815a7c2a09a6" - integrity sha512-gqjSFmMLw8vtPa6/Rv/mFBK1mdqaUbLkhUA4CsTDhkibUqnNqpvI/d1XFFLdC/ULu9v7UloMTCndSGKao+q5oA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-nag/-/semantic-ui-nag-2.2.5.tgz#aacd88ee78eb51477e2818490eccfd5fe4a025c4" + integrity sha512-ScjA2OrsPyxssg+1UpYpBoYQf1ruk5gExU08DEjJcrbEWYCOYa4+NbA/cUpsNogf6l0lgePdlBH3nJVezIY89Q== dependencies: "@types/jquery" "*" "@types/semantic-ui-popup@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.3.tgz#cdf391d0e16ffbfdc34c7fee85e85d20a9323c5a" - integrity sha512-tw7FXUTAs+GEU939RBpOCVq9H8vYpsr8uYvJC0RUxXCYXCUHsgYzgIIklKoD+xPvUCf34MHnMBwrrTCMJosxGg== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.6.tgz#3161db5acf0fc18fcb9c81048e589bf6f38a459f" + integrity sha512-g7SlW4fSo2gUBZb3a4tQt8ZMUdvKKqwMTD6mxLdVAS3VxIU/qVq8aTNEtYvOrtiia6BulmqcgLDlw2s/XJKExQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-progress@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-progress/-/semantic-ui-progress-2.2.3.tgz#2ad3e2b69c5c5927aa4c11634cdf0a04ab53b36f" - integrity sha512-gv0i4+/uVbUJnuTzNv2oEqJ8CMQPeAR6K+s2zm1r4waH+8ZQ0SKM1DZ4t3w4gEMxhXqZVlLlyIhfY1SmUI0GuQ== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-progress/-/semantic-ui-progress-2.2.6.tgz#bbb573577f27a0ecbf8457eb5bdd20134f7bdd88" + integrity sha512-HfWyQM6B4CmQFj4Oabh+Sah4HbePM71pKZ0eplXyv/0a8pQlQaX+gW3RSz8lG32IXEl0Lz0G4IUn97qzOPjJxQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-rating@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-rating/-/semantic-ui-rating-2.2.2.tgz#d35807b61ebc6b4f2a977b430fbd862fa5f5b5a7" - integrity sha512-9497T8bEnkadWtQDl5Hno9lviZ2bJjx5rKd/Gfq6PWZ1/4/71LrYdH1DSr+sHYJ5HkaSA0b7GFVCTxi9pEdd6Q== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-rating/-/semantic-ui-rating-2.2.5.tgz#d1c1de73bebf3ba829e82f77f2dd68409a236912" + integrity sha512-Oy1Wt6qKxq1WczW37NymYtne2gWRhxbRKKDrCl+va7fG6HAR+0hjzv7EddfSCOWwn/o7srQxjLKFj7FZxdi1JQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-search@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.3.tgz#7da1a62ed116a1aa0baee2a9c66196b16f643e13" - integrity sha512-JVrrW9uakXTudNm1MGrkRpirL2vm8NCVtrPyH6zIbBNqi08UPeHY8yxjnFpTPv5sMKBGGhkSn9cYrGz6Cweg2Q== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.6.tgz#ed2da8c0f85837f4dd15626824d2526f9745e9b9" + integrity sha512-IrvOhx4a5bSY8+5/Z7z/gDiAYRk1VHl8FUS2rdpU6gBJXzM0vrQ/5pMs7OOo8p71MLNHy83TGu2/N4Hy+QFtxg== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" "@types/semantic-ui-shape@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-shape/-/semantic-ui-shape-2.2.2.tgz#ce3bd95e4ec1127380343910c4766a4f070c1336" - integrity sha512-bXaeheuuDY3rAmA5QQRAA0fzMiEkhRgZts5i7w/d1XlMHCVNeHIIAbhTurl3bPwTlbr0NI7T3ZmxH0EKRVdIEg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-shape/-/semantic-ui-shape-2.2.5.tgz#3749a32c1e958dc32cd8f9ea712e5ae332a3ad34" + integrity sha512-4FWI3qjh2X3uDwST2NCww7w0P7dtjnak33G9ENdIepAa7JXqrmephg6BVB5MBGYzw11DUCtEL7x7ka9iToZ2WA== dependencies: "@types/jquery" "*" "@types/semantic-ui-sidebar@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-sidebar/-/semantic-ui-sidebar-2.2.2.tgz#792464d6e381354c8c1e935635c9010b1366f4a9" - integrity sha512-fm/whmNiyTzQwduc4maV9XjdwVc4pVlkhX5vippW9ukCCkVGY8qBgQKHFYhAHPhe7sCsGIuS+Vpr83t8X7Fg8w== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-sidebar/-/semantic-ui-sidebar-2.2.5.tgz#e0d8092fdbc7a6d8fa8caa50a18db1ea70c9e475" + integrity sha512-9oniXmN/rLTc2b2RO/2unsc0nHwvj6P9m6bEjxFgveMS8NnuiljF7skypJW0fSN37zHkb9yGxcP3jJyqsRNunQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-site@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-site/-/semantic-ui-site-2.2.2.tgz#25a358ca572aa0e811f2f912ab6872ef897c8bbe" - integrity sha512-XxwUxqpBLAlPpO7OqAYIdBRsZTmKLXvSzBLczms3JshnoChEZbxtKRYxSxgK93Y4XYCfKnpXQXEF6RIw5FF/mA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-site/-/semantic-ui-site-2.2.5.tgz#1973945cf5f9f891e5e42dd0a401dc30dfde15f6" + integrity sha512-hyL79qPrZM6bL7etQUE8SZYhgpXdlZth87yFYEhMHDENhGx5LiR5vRH+C78YDmf3ZemIUUKvY1US52VlfYaDhg== dependencies: "@types/jquery" "*" "@types/semantic-ui-sticky@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-sticky/-/semantic-ui-sticky-2.2.3.tgz#1317d2eac9b42d8088f8f0f3228684efa0ce6a84" - integrity sha512-HOhd+W75u9Hk0owQXUGdDKpvVhKl/207hueZqTTREZPTmxALAHbl6bHKxnvcJqRerhOFdObQcCFZGL5DEXRtcA== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-sticky/-/semantic-ui-sticky-2.2.6.tgz#97f71371688c24bbc3f9b0057537c5252fb580b6" + integrity sha512-k/In4CD6xhVK/VeZCaIdKBR35BaB5VKSl9Vw7fRGTnr5VK9gjRDs0pBJyH2IDzbUcJ2DitzMpMcIwX4Varyp2g== dependencies: "@types/jquery" "*" "@types/semantic-ui-tab@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-tab/-/semantic-ui-tab-2.2.2.tgz#4bae0c8ac1e970cd93fc31cf99f546e29ac9a069" - integrity sha512-o7a2TJAxjh7pVqRzpQmJd7hTcaDv/tAYJh2Aez5mYiRrFylhzwIrJAcXhSwVRVInPZkc8MDlBPg8Xm+QJ98rLw== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-tab/-/semantic-ui-tab-2.2.5.tgz#a9d518e76f0557a10af81661a2cce677a0ca6793" + integrity sha512-r8NHOqSrny5fTE6MsSrTcZp1eN2lpxYgWMfZXczH1FDsSaFfO1MF7FNJbB6XHlJO6hnYCfx58KxhxerPyPkDqg== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" "@types/semantic-ui-transition@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-transition/-/semantic-ui-transition-2.2.2.tgz#e03d9eec32c962a5c862112f75a53879c3628406" - integrity sha512-wZJICf3qCr+68zPvzTKC9nQJ3mneW+K/K9Y2KphxujWgMCkOQEetDNb5Dbt9YZe92L0SnaPaDgp1KVaKAortdw== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-transition/-/semantic-ui-transition-2.2.5.tgz#86cf536ed06754b4cd04544672d92154edef7ca7" + integrity sha512-MId2N23h6Jki2hkVw1m/JHHQFHoYrOJlsLsfQW5ZE0Pdcq0RETzcM7UWwaBjHX79EtjohGsewDKAvlVP92DbAg== dependencies: "@types/jquery" "*" "@types/semantic-ui-visibility@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-visibility/-/semantic-ui-visibility-2.2.3.tgz#254a126b502159e194fcbc9b8561e14c4ba215a1" - integrity sha512-4vfXjZHJhif8Rw4WQ691Zx2Y0vqdNF2D0AYT7ltQH1/mL/fCqEwTLndl3qvgCbxpniGbTnYRajqx1dk8+Ji/HQ== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-visibility/-/semantic-ui-visibility-2.2.6.tgz#a216881692d75d72f158a88163bf4a8b0490c8e9" + integrity sha512-b4dxITsys3mMwXyPzI6b21XwS7gHeTnB2ztdBvtbSBIO1SRxhHy0qW0sh+U4pK8xsXcqzFbTLr3/gO9A/kDdDA== dependencies: "@types/jquery" "*" @@ -1923,9 +1922,9 @@ "@types/semantic-ui-visibility" "*" "@types/semver@^7.3.12": - version "7.5.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.1.tgz#0480eeb7221eb9bc398ad7432c9d7e14b1a5a367" - integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" + integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== "@types/showdown@2.0.0": version "2.0.0" @@ -1933,14 +1932,14 @@ integrity sha512-70xBJoLv+oXjB5PhtA8vo7erjLDp9/qqI63SRHm4REKrwuPOLs8HhXwlZJBJaB4kC18cCZ1UUZ6Fb/PLFW4TCA== "@types/sizzle@*": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.6.tgz#e39b7123dac4631001939bd4c2a26d46010f2275" + integrity sha512-m04Om5Gz6kbjUwAQ7XJJQ30OdEFsSmAVsvn4NYwcTRyMVpKKa1aPuESw1n2CxS5fYkOQv3nHgDKeNa8e76fUkw== "@types/trusted-types@*", "@types/trusted-types@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" - integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.6.tgz#d12451beaeb9c3838f12024580dc500b7e88b0ad" + integrity sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg== "@types/vue-virtual-scroller@npm:@earltp/vue-virtual-scroller": version "1.0.1" @@ -2138,11 +2137,11 @@ "@volar/source-map" "1.10.0" "@volar/language-core@~1.10.0": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.1.tgz#76789c5b0c214eeff8add29cbff0333d89b6fc4a" - integrity sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA== + version "1.10.10" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.10.tgz#9c240a36dd4007b9c4f00739f6cecb81da54a49e" + integrity sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw== dependencies: - "@volar/source-map" "1.10.1" + "@volar/source-map" "1.10.10" "@volar/source-map@1.0.24": version "1.0.24" @@ -2158,10 +2157,10 @@ dependencies: muggle-string "^0.3.1" -"@volar/source-map@1.10.1", "@volar/source-map@~1.10.0": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.1.tgz#b806845782cc615f2beba94624ff34a700f302f5" - integrity sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA== +"@volar/source-map@1.10.10", "@volar/source-map@~1.10.0": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.10.tgz#ec807fe60b8afe29e19bf6d1c90d2e76502df541" + integrity sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg== dependencies: muggle-string "^0.3.1" @@ -2203,13 +2202,13 @@ "@vue-macros/common" "1.7.0" resolve.exports "^2.0.2" -"@vue-macros/api@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@vue-macros/api/-/api-0.8.5.tgz#d3d3c5ab8f90d6d5da280b7d39c358020a3211a4" - integrity sha512-gpWG2QToT8l0bN6UMuCw1UE38PGpof1FXsXs7XSRwvHC5leFS+bTJ0UljkjBv/qTKd1/1h2RX2NHrzbzy8eYAw== +"@vue-macros/api@0.8.6": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@vue-macros/api/-/api-0.8.6.tgz#5e40f50c1ac6d258bc6171fc2e08b1530bdd8492" + integrity sha512-g9ZO/z+LvSo4c0cIsLEJ+U4ZbCKYo1o6uJ87fry/+NZ6DeebOXuh5yJ0xkrpz+FCvLK3LsLtG/set467EstEuQ== dependencies: - "@babel/types" "^7.22.10" - "@vue-macros/common" "1.7.2" + "@babel/types" "^7.22.17" + "@vue-macros/common" "1.8.0" resolve.exports "^2.0.2" "@vue-macros/better-define@1.6.9": @@ -2222,11 +2221,11 @@ unplugin "^1.4.0" "@vue-macros/chain-call@^0.1.3": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@vue-macros/chain-call/-/chain-call-0.1.5.tgz#0bf05d36a479ed6526721554ebe6394044ca7be9" - integrity sha512-ci22RCZjCQDyTLB5ZFVTjRj94fLBg9nrTVoDWD3EdAJ7TShDr9r+de55eUYZDMDzBsjvpapEz4MQgcPIMYcuHQ== + version "0.1.6" + resolved "https://registry.yarnpkg.com/@vue-macros/chain-call/-/chain-call-0.1.6.tgz#b6ffe0562aec50b95e7a57e74672cbb81aef36c3" + integrity sha512-ACUnx9TbPvjjn3aCxpqN2yPC/1wyZTdJnEfh+KLn2rgl5mQUFvi/oOs4rKz/koPSU76fYhPnhbVK4oDv/wQMwg== dependencies: - "@vue-macros/common" "1.7.2" + "@vue-macros/common" "1.8.0" unplugin "^1.4.0" "@vue-macros/common@1.7.0": @@ -2241,7 +2240,19 @@ local-pkg "^0.4.3" magic-string-ast "^0.3.0" -"@vue-macros/common@1.7.2", "@vue-macros/common@~1.7.0": +"@vue-macros/common@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.8.0.tgz#885f1e7095b3b4e32773a35fd8f768f82a6c0e5c" + integrity sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA== + dependencies: + "@babel/types" "^7.22.17" + "@rollup/pluginutils" "^5.0.4" + "@vue/compiler-sfc" "^3.3.4" + ast-kit "^0.11.2" + local-pkg "^0.4.3" + magic-string-ast "^0.3.0" + +"@vue-macros/common@~1.7.0": version "1.7.2" resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.7.2.tgz#e160b5d7f8089c97053284c283a7fbe33706e6a7" integrity sha512-0/2A4kWLTCNEx+DDQKLvs7zXpfjgAbGBZ58SIvDN1DjGXhG4WaIUZtgMqzA6bvc5dNN7RaOatZYubkVumwmjWA== @@ -2254,13 +2265,13 @@ magic-string-ast "^0.3.0" "@vue-macros/define-emit@^0.1.13": - version "0.1.15" - resolved "https://registry.yarnpkg.com/@vue-macros/define-emit/-/define-emit-0.1.15.tgz#a0e42cd40d333fc20ae74bd612597f2ab3f25d19" - integrity sha512-SRX3eYjVxzg6foZ8bo1QZL4lJbVjzJjJwakA0yza4TuR1qUDivNAEsdCjibJicNpXHOZnbuPiedK752/GyyigA== + version "0.1.16" + resolved "https://registry.yarnpkg.com/@vue-macros/define-emit/-/define-emit-0.1.16.tgz#67c44b37085bb529f72045c7bc5438f33826065a" + integrity sha512-8UWGYzopmV+fHFBesqHBPkL76Utzd+br1kjWhx655VLE4IbgnCJNRSBXAsMmbsVGqVFSS3jvFVcpz7J8O0N5rw== dependencies: - "@vue-macros/api" "0.8.5" - "@vue-macros/common" "1.7.2" - rollup "^3.28.0" + "@vue-macros/api" "0.8.6" + "@vue-macros/common" "1.8.0" + rollup "^3.29.1" unplugin "^1.4.0" "@vue-macros/define-models@1.0.13": @@ -2273,13 +2284,13 @@ unplugin "^1.4.0" "@vue-macros/define-prop@^0.2.4": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@vue-macros/define-prop/-/define-prop-0.2.7.tgz#5d13831dbe5bd1f52bbc2e14b73163236856f27f" - integrity sha512-Bnu26JaBuufJ1krsPuyI4iZDZC74DiUhRq6REbeF576UQDQu9HXIwXRRe1GEF1RaxCTzrVIhur6DQGk2o1J10g== + version "0.2.8" + resolved "https://registry.yarnpkg.com/@vue-macros/define-prop/-/define-prop-0.2.8.tgz#e73c95dff60a41992aa157b98fe666e0e56c4f2d" + integrity sha512-ML0bHlOQ2NvxGTgHnGyWlCisb97WmTHKzcKYKYuK+YBTi5h7kimTft4W1Gnw38P1sKIdnknj393qSVHEg7MASw== dependencies: - "@vue-macros/api" "0.8.5" - "@vue-macros/common" "1.7.2" - rollup "^3.28.0" + "@vue-macros/api" "0.8.6" + "@vue-macros/common" "1.8.0" + rollup "^3.29.1" unplugin "^1.4.0" "@vue-macros/define-props-refs@1.1.7": @@ -2315,12 +2326,12 @@ unplugin "^1.4.0" "@vue-macros/devtools@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@vue-macros/devtools/-/devtools-0.1.3.tgz#05108904369160d8446628d4d7f35d8d412c6e2b" - integrity sha512-aQRC9/TfmQajTMbZZ1BJn61rrraQztJqf64JdXRIpotbGR+xufLY/KIyTTB4SgL1pE1eW/ar5FaZTSjMqyVGIg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@vue-macros/devtools/-/devtools-0.1.4.tgz#c27432a090a524fecd13e0a38e2b9c0f27b74061" + integrity sha512-md5WzjC4qgOOjnYKaqEfZknSeiEeGX13k/Hqi+aqvb+kIF0F6/5oxroqaPQemuNN/gUNMn8ZfA/JmcOYxGVFcQ== dependencies: sirv "^2.0.3" - vue "^3.3.4" + vue "^3.3.7" "@vue-macros/export-expose@0.0.10": version "0.0.10" @@ -2449,13 +2460,13 @@ estree-walker "^2.0.2" source-map "^0.6.1" -"@vue/compiler-core@3.3.4", "@vue/compiler-core@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128" - integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g== +"@vue/compiler-core@3.3.8", "@vue/compiler-core@^3.3.4": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz#301bb60d0245265a88ed5b30e200fbf223acb313" + integrity sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g== dependencies: - "@babel/parser" "^7.21.3" - "@vue/shared" "3.3.4" + "@babel/parser" "^7.23.0" + "@vue/shared" "3.3.8" estree-walker "^2.0.2" source-map-js "^1.0.2" @@ -2475,13 +2486,13 @@ "@vue/compiler-core" "3.2.47" "@vue/shared" "3.2.47" -"@vue/compiler-dom@3.3.4", "@vue/compiler-dom@^3.2.45", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151" - integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w== +"@vue/compiler-dom@3.3.8", "@vue/compiler-dom@^3.2.45", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b" + integrity sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ== dependencies: - "@vue/compiler-core" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/compiler-core" "3.3.8" + "@vue/shared" "3.3.8" "@vue/compiler-sfc@3.2.45": version "3.2.45" @@ -2515,20 +2526,20 @@ postcss "^8.1.10" source-map "^0.6.1" -"@vue/compiler-sfc@3.3.4", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df" - integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ== +"@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.4": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" + integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA== dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.4" - "@vue/compiler-dom" "3.3.4" - "@vue/compiler-ssr" "3.3.4" - "@vue/reactivity-transform" "3.3.4" - "@vue/shared" "3.3.4" + "@babel/parser" "^7.23.0" + "@vue/compiler-core" "3.3.8" + "@vue/compiler-dom" "3.3.8" + "@vue/compiler-ssr" "3.3.8" + "@vue/reactivity-transform" "3.3.8" + "@vue/shared" "3.3.8" estree-walker "^2.0.2" - magic-string "^0.30.0" - postcss "^8.1.10" + magic-string "^0.30.5" + postcss "^8.4.31" source-map-js "^1.0.2" "@vue/compiler-ssr@3.2.45": @@ -2547,18 +2558,18 @@ "@vue/compiler-dom" "3.2.47" "@vue/shared" "3.2.47" -"@vue/compiler-ssr@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777" - integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ== +"@vue/compiler-ssr@3.3.8": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz#136eed54411e4694815d961048a237191063fbce" + integrity sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w== dependencies: - "@vue/compiler-dom" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/compiler-dom" "3.3.8" + "@vue/shared" "3.3.8" "@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.4.5", "@vue/devtools-api@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" - integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + version "6.5.1" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" + integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== "@vue/eslint-config-standard@8.0.1": version "8.0.1" @@ -2617,16 +2628,16 @@ estree-walker "^2.0.2" magic-string "^0.25.7" -"@vue/reactivity-transform@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" - integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw== +"@vue/reactivity-transform@3.3.8": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz#6d07649013b0be5c670f0ab6cc7ddd3150ad03f2" + integrity sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw== dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.4" - "@vue/shared" "3.3.4" + "@babel/parser" "^7.23.0" + "@vue/compiler-core" "3.3.8" + "@vue/shared" "3.3.8" estree-walker "^2.0.2" - magic-string "^0.30.0" + magic-string "^0.30.5" "@vue/reactivity@3.2.45": version "3.2.45" @@ -2635,12 +2646,12 @@ dependencies: "@vue/shared" "3.2.45" -"@vue/reactivity@3.3.4", "@vue/reactivity@^3.2.45", "@vue/reactivity@^3.3.0": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253" - integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ== +"@vue/reactivity@3.3.8", "@vue/reactivity@^3.2.45", "@vue/reactivity@^3.3.0": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.8.tgz#cce8a03a3fd3539c3eeda53e277ba365d160dd4d" + integrity sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw== dependencies: - "@vue/shared" "3.3.4" + "@vue/shared" "3.3.8" "@vue/runtime-core@3.2.45": version "3.2.45" @@ -2650,13 +2661,13 @@ "@vue/reactivity" "3.2.45" "@vue/shared" "3.2.45" -"@vue/runtime-core@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1" - integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA== +"@vue/runtime-core@3.3.8": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz#fba5a632cbf2b5d29e171489570149cb6975dcdb" + integrity sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw== dependencies: - "@vue/reactivity" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/reactivity" "3.3.8" + "@vue/shared" "3.3.8" "@vue/runtime-dom@3.2.45": version "3.2.45" @@ -2667,14 +2678,14 @@ "@vue/shared" "3.2.45" csstype "^2.6.8" -"@vue/runtime-dom@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566" - integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ== +"@vue/runtime-dom@3.3.8": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz#e2d7aa795cf50914dda9a951887765a594b38af4" + integrity sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA== dependencies: - "@vue/runtime-core" "3.3.4" - "@vue/shared" "3.3.4" - csstype "^3.1.1" + "@vue/runtime-core" "3.3.8" + "@vue/shared" "3.3.8" + csstype "^3.1.2" "@vue/server-renderer@3.2.45": version "3.2.45" @@ -2684,13 +2695,13 @@ "@vue/compiler-ssr" "3.2.45" "@vue/shared" "3.2.45" -"@vue/server-renderer@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c" - integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ== +"@vue/server-renderer@3.3.8": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz#9b1779010e75783edeed8fcfb97d9c95fc3ac5d2" + integrity sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg== dependencies: - "@vue/compiler-ssr" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/compiler-ssr" "3.3.8" + "@vue/shared" "3.3.8" "@vue/shared@3.2.45": version "3.2.45" @@ -2702,10 +2713,10 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c" integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ== -"@vue/shared@3.3.4", "@vue/shared@^3.2.45", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780" - integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== +"@vue/shared@3.3.8", "@vue/shared@^3.2.45", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": + version "3.3.8" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" + integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== "@vue/test-utils@2.2.7": version "2.2.7" @@ -2783,9 +2794,9 @@ acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.2, acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== acorn@^7.1.1, acorn@^7.4.1: version "7.4.1" @@ -2793,9 +2804,9 @@ acorn@^7.1.1, acorn@^7.4.1: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.1.0, acorn@^8.10.0, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== agent-base@6: version "6.0.2" @@ -2869,7 +2880,7 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-includes@^3.1.4, array-includes@^3.1.6: +array-includes@^3.1.4, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -2885,7 +2896,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: +array.prototype.findlastindex@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== @@ -2896,7 +2907,7 @@ array.prototype.findlastindex@^1.2.2: es-shim-unscopables "^1.0.0" get-intrinsic "^1.2.1" -array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1: +array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -2906,7 +2917,7 @@ array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -2916,7 +2927,7 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.1: +arraybuffer.prototype.slice@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== @@ -2943,6 +2954,15 @@ ast-kit@^0.10.0: "@rollup/pluginutils" "^5.0.3" pathe "^1.1.1" +ast-kit@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.11.2.tgz#5951329c7fd311304cd30729619639323974893f" + integrity sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ== + dependencies: + "@babel/parser" "^7.22.14" + "@rollup/pluginutils" "^5.0.4" + pathe "^1.1.1" + ast-kit@^0.9.4, ast-kit@^0.9.5: version "0.9.5" resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.9.5.tgz#88c0ba76b6f7f24c04ccf9ae778e33afc187dc80" @@ -2961,9 +2981,9 @@ ast-walker-scope@^0.5.0: ast-kit "^0.9.4" async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -2975,15 +2995,7 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -automation-events@^6.0.1, automation-events@^6.0.8: - version "6.0.9" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.9.tgz#2fb5fba8a46c1a8f77c424540692f4f1b8d70b93" - integrity sha512-JEJzZRfRb26FMWR8zE2D/H/n5n+NNFZh1BtmDcpZVJOhLYKLGFCImBuxChRBhpZaOyIxqobPtM839amAeu2H9g== - dependencies: - "@babel/runtime" "^7.22.6" - tslib "^2.6.1" - -automation-events@^6.0.11: +automation-events@^6.0.1, automation-events@^6.0.11: version "6.0.11" resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.11.tgz#c90be5a58faf6633e1556a7acab0f23af0124551" integrity sha512-tUqFMJalQ3OAcbQOXzzNDpxzkuygMQ3eM92lJWJRn6YWJnH4oYIU3pzKipANOul/6L2vDFrOzgXVE21Dv4z/zw== @@ -3019,37 +3031,37 @@ axios@1.2.3: proxy-from-env "^1.1.0" axios@>=0.13.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + version "1.6.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" + integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" + integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" + integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" + "@babel/helper-define-polyfill-provider" "^0.4.3" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" + integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" balanced-match@^1.0.0: version "1.0.2" @@ -3088,15 +3100,15 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== +browserslist@^4.21.9, browserslist@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" node-releases "^2.0.13" - update-browserslist-db "^1.0.11" + update-browserslist-db "^1.0.13" buffer-from@^1.0.0: version "1.1.2" @@ -3150,36 +3162,37 @@ c8@^7.12.0: yargs "^16.2.0" yargs-parser "^20.2.9" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001517: - version "1.0.30001527" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001527.tgz#813826554828245ccee776c850566dce12bdeaba" - integrity sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ== +caniuse-lite@^1.0.30001541: + version "1.0.30001561" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" + integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== chai@^4.3.7: - version "4.3.8" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" - integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== + version "4.3.10" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" + integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.0.8" chalk@^2.4.2: version "2.4.2" @@ -3198,10 +3211,12 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.5.3" @@ -3297,22 +3312,22 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0: - version "3.32.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.1.tgz#55f9a7d297c0761a8eb1d31b593e0f5b6ffae964" - integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.33.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" + integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.1" cosmiconfig@^7.0.1: version "7.1.0" @@ -3371,7 +3386,7 @@ csstype@^2.6.8: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== -csstype@^3.1.1: +csstype@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== @@ -3416,7 +3431,7 @@ decimal.js@^10.4.2, decimal.js@^10.4.3: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -deep-eql@^4.1.2: +deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== @@ -3433,11 +3448,21 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -3531,10 +3556,10 @@ ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.477: - version "1.4.510" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.510.tgz#446c50d7533c1e71a84b00a3b37ab06dd601d890" - integrity sha512-xPfLIPFcN/WLXBpQ/K4UgE98oUBO5Tia6BD4rkSR0wE7ep/PwBVlgvPJQrIBpmJGVAmUzwPKuDbVt9XV6+uC2g== +electron-to-chromium@^1.4.535: + version "1.4.581" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz#23b684c67bf56d4284e95598c05a5d266653b6d8" + integrity sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw== emoji-regex@^8.0.0: version "8.0.0" @@ -3553,26 +3578,26 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.20.4, es-abstract@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -3580,39 +3605,39 @@ es-abstract@^1.20.4, es-abstract@^1.22.1: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" typed-array-buffer "^1.0.0" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" + which-typed-array "^1.1.13" es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -3723,7 +3748,7 @@ eslint-import-resolver-custom-alias@^1.3.0: glob-parent "^6.0.2" resolve "^1.22.2" -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== @@ -3782,25 +3807,25 @@ eslint-plugin-import@2.26.0: tsconfig-paths "^3.14.1" eslint-plugin-import@^2.26.0: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" tsconfig-paths "^3.14.2" @@ -4020,9 +4045,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4084,18 +4109,18 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.2.7" + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== focus-trap@7.2.0: version "7.2.0" @@ -4105,9 +4130,9 @@ focus-trap@7.2.0: tabbable "^6.0.1" follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== fomantic-ui-css@2.9.3: version "2.9.3" @@ -4160,12 +4185,12 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: +function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -4190,20 +4215,20 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" @@ -4274,9 +4299,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.21.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" @@ -4337,11 +4362,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -4361,11 +4386,16 @@ has-tostringtag@^1.0.0: has-symbols "^1.0.2" has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" he@^1.2.0: version "1.2.0" @@ -4465,12 +4495,12 @@ inherits@2: integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: @@ -4519,12 +4549,12 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.8.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -4633,7 +4663,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: version "1.1.12" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== @@ -4663,9 +4693,9 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-report@^3.0.0: version "3.0.1" @@ -4836,9 +4866,9 @@ jsonc-eslint-parser@^1.0.1: semver "^6.3.0" jsonc-eslint-parser@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.3.0.tgz#7c2de97d01bff7227cbef2f25d1025d42a36198b" - integrity sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ== + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" + integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== dependencies: acorn "^8.5.0" eslint-visitor-keys "^3.0.0" @@ -4865,9 +4895,9 @@ just-extend@^4.0.2: integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -4936,12 +4966,12 @@ lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lru-cache@7.14.1: version "7.14.1" @@ -4976,17 +5006,10 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -magic-string@^0.30.0, magic-string@^0.30.2: - version "0.30.3" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" - integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== +magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5: + version "0.30.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" + integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -5094,9 +5117,9 @@ muggle-string@^0.3.1: integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare-lite@^1.4.0: version "1.4.0" @@ -5109,9 +5132,9 @@ natural-compare@^1.4.0: integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== nise@^5.1.2, nise@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.4.tgz#491ce7e7307d4ec546f5a659b2efe94a18b4bbc0" - integrity sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg== + version "5.1.5" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.5.tgz#f2aef9536280b6c18940e32ba1fbdc770b8964ee" + integrity sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw== dependencies: "@sinonjs/commons" "^2.0.0" "@sinonjs/fake-timers" "^10.0.2" @@ -5141,10 +5164,10 @@ nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -5161,7 +5184,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.fromentries@^2.0.6: +object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -5170,7 +5193,7 @@ object.fromentries@^2.0.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.groupby@^1.0.0: +object.groupby@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== @@ -5180,7 +5203,7 @@ object.groupby@^1.0.0: es-abstract "^1.22.1" get-intrinsic "^1.2.1" -object.values@^1.1.5, object.values@^1.1.6: +object.values@^1.1.5, object.values@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -5328,10 +5351,10 @@ postcss-selector-parser@^6.0.9: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.1.10, postcss@^8.4.20, postcss@^8.4.27: - version "8.4.29" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" - integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== +postcss@^8.1.10, postcss@^8.4.20, postcss@^8.4.27, postcss@^8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -5363,9 +5386,9 @@ psl@^1.1.33: integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== querystringify@^2.1.1: version "2.2.0" @@ -5392,9 +5415,9 @@ readdirp@~3.6.0: picomatch "^2.2.1" regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -5415,14 +5438,14 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" @@ -5474,9 +5497,9 @@ resolve.exports@^2.0.2: integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -5511,10 +5534,10 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" -rollup@^3.27.1, rollup@^3.28.0, rollup@^3.7.0, rollup@^3.7.2: - version "3.29.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.0.tgz#1b40e64818afc979c7e5bef93de675829288986b" - integrity sha512-nszM8DINnx1vSS+TpbWKMkxem0CDWk3cSit/WWCBVs9/JZ1I/XLwOsiUglYuYReaeWWSsW9kge5zE5NZtf/a4w== +rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.0, rollup@^3.7.2: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: fsevents "~2.3.2" @@ -5525,7 +5548,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.0: +safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== @@ -5589,6 +5612,25 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -5712,7 +5754,7 @@ standardized-audio-context-mock@9.6.18: tslib "^2.5.0" vehicles "^9.0.1" -standardized-audio-context@25.3.58: +standardized-audio-context@25.3.58, standardized-audio-context@^25.3.46: version "25.3.58" resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.58.tgz#6c5c61cfe25eb4b9f3a9f8cf43dc4991e7eb362d" integrity sha512-1p5wVGiy4MfmhEt9MRY8yjZdkX+fi5jMxG1lqnAS1YmLUpE9VrOowxSINQ9Gjs89dFZMaENVwcMSPeQCjlz90Q== @@ -5721,15 +5763,6 @@ standardized-audio-context@25.3.58: automation-events "^6.0.11" tslib "^2.6.2" -standardized-audio-context@^25.3.46: - version "25.3.55" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.55.tgz#4d87ea6052de80ecf5abf56eb71ecd71f7e52e4e" - integrity sha512-ym9g7FZ5S1FykbQ1///ktTJgk+zTtGF1hGR/BFRQjRkN6G2Xy9GbL5kOcM7DlzflV2yJtqVwfU2gL042b1oHwg== - dependencies: - "@babel/runtime" "^7.22.6" - automation-events "^6.0.8" - tslib "^2.6.1" - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -5740,9 +5773,9 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.matchall@^4.0.6: - version "4.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz#148779de0f75d36b13b15885fec5cadde994520d" - integrity sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA== + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" @@ -5751,27 +5784,28 @@ string.prototype.matchall@^4.0.6: has-symbols "^1.0.3" internal-slot "^1.0.5" regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" side-channel "^1.0.4" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: +string.prototype.trimstart@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== @@ -5863,9 +5897,9 @@ tempy@^0.6.0: unique-string "^2.0.0" terser@^5.0.0: - version "5.19.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" - integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== + version "5.24.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" + integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -5892,9 +5926,9 @@ text-table@^0.2.0: integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== tinybench@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.0.tgz#4711c99bbf6f3e986f67eb722fed9cddb3a68ba5" - integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA== + version "2.5.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" + integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== tinypool@^0.3.0: version "0.3.1" @@ -5969,7 +6003,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2: +tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -5988,7 +6022,7 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -6067,6 +6101,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -6111,9 +6150,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unplugin-combine@^0.7.0: version "0.7.0" @@ -6163,11 +6202,11 @@ unplugin-vue-macros@2.4.6: unplugin-vue-define-options "1.3.15" unplugin@^1.0.0, unplugin@^1.3.2, unplugin@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.4.0.tgz#b771373aa1bc664f50a044ee8009bd3a7aa04d85" - integrity sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" + integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== dependencies: - acorn "^8.9.0" + acorn "^8.10.0" chokidar "^3.5.3" webpack-sources "^3.2.3" webpack-virtual-modules "^0.5.0" @@ -6177,10 +6216,10 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -6211,22 +6250,22 @@ utility-types@3.10.0: integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== v8-to-istanbul@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + version "9.1.3" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" + integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + convert-source-map "^2.0.0" vehicles@^9.0.1: - version "9.0.10" - resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.10.tgz#498e672d5a2a2f30963e31711b4aaaa07c3b729b" - integrity sha512-sgXuXFwDIZqAq8IpoYkgKjM4jsv2K/1I7FJDwj7Wxs8dxR7BDOEyIBhyOxP5jNjQSsnF6+hRsvhhTX7QqaU7Hg== + version "9.0.12" + resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.12.tgz#15882d4ecc060b0d9e739b6e47228c357009b0bf" + integrity sha512-OYOqeFXkC7lSdwWW2iAa7NqRTv1WwqTK7+Y1IpDF1rUUgP3qXsSYhLgcq7pMHvSz3ERXFqODf0ue1DxuVbYn0Q== dependencies: - "@babel/runtime" "^7.22.10" + "@babel/runtime" "^7.23.2" decimal.js "^10.4.3" - tslib "^2.6.1" + tslib "^2.6.2" vite-plugin-pwa@0.14.1: version "0.14.1" @@ -6254,9 +6293,9 @@ vite@4.0.4: fsevents "~2.3.2" "vite@^3.0.0 || ^4.0.0": - version "4.4.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" - integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26" + integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== dependencies: esbuild "^0.18.10" postcss "^8.4.27" @@ -6295,9 +6334,9 @@ vue-demi@^0.12.5: integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz#429955e041ae5371df5f9e37ebc29ba046496182" - integrity sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g== + version "9.3.2" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" + integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== dependencies: debug "^4.3.4" eslint-scope "^7.1.1" @@ -6340,9 +6379,9 @@ vue-router@4.1.6: "@vue/devtools-api" "^6.4.5" vue-template-compiler@^2.7.14: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== + version "2.7.15" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz#ec88ba8ceafe0f17a528b89c57e01e02da92b0de" + integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== dependencies: de-indent "^1.0.2" he "^1.2.0" @@ -6402,16 +6441,16 @@ vue@3.2.45: "@vue/server-renderer" "3.2.45" "@vue/shared" "3.2.45" -vue@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" - integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== +vue@^3.3.7: + version "3.3.8" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc" + integrity sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w== dependencies: - "@vue/compiler-dom" "3.3.4" - "@vue/compiler-sfc" "3.3.4" - "@vue/runtime-dom" "3.3.4" - "@vue/server-renderer" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/compiler-dom" "3.3.8" + "@vue/compiler-sfc" "3.3.8" + "@vue/runtime-dom" "3.3.8" + "@vue/server-renderer" "3.3.8" + "@vue/shared" "3.3.8" vuedraggable@4.1.0: version "4.1.0" @@ -6507,13 +6546,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.10, which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -6726,9 +6765,9 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.11.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.0.tgz#6c5792c5316dc9266ba8e780433fc45e6680aecd" - integrity sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg== + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== xml-name-validator@^4.0.0: version "4.0.0" @@ -6779,9 +6818,9 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" From 8f354135b5d83297e614620447927514dc80816b Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Mon, 13 Nov 2023 10:43:18 +0100 Subject: [PATCH 059/371] ci(cypress): Switch to cypress/included image in order to have the binary Part-of: --- .gitlab-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dd06473ce..d9a38f573 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -312,7 +312,9 @@ test_integration: - if: $RUN_CYPRESS interruptible: true - image: cypress/base:18.12.1 + image: + name: cypress/included:12.14.0 + entrypoint: [""] cache: - *front_cache - key: From d0dc7d223266e549752d6bb589bb34e6b4c2f2ee Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Nov 2023 09:35:44 +0000 Subject: [PATCH 060/371] chore(api): lock file maintenance Part-of: --- api/poetry.lock | 521 +++++++++++++++++++++++++----------------------- 1 file changed, 271 insertions(+), 250 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 3d655fc87..6ec6748ae 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -140,17 +140,17 @@ frozenlist = ">=1.1.0" [[package]] name = "amqp" -version = "5.1.1" +version = "5.2.0" description = "Low-level AMQP client for Python (fork of amqplib)." optional = false python-versions = ">=3.6" files = [ - {file = "amqp-5.1.1-py3-none-any.whl", hash = "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359"}, - {file = "amqp-5.1.1.tar.gz", hash = "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2"}, + {file = "amqp-5.2.0-py3-none-any.whl", hash = "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637"}, + {file = "amqp-5.2.0.tar.gz", hash = "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd"}, ] [package.dependencies] -vine = ">=5.0.0" +vine = ">=5.0.0,<6.0.0" [[package]] name = "anyio" @@ -437,13 +437,13 @@ files = [ [[package]] name = "cachetools" -version = "5.3.1" +version = "5.3.2" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, + {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, + {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, ] [[package]] @@ -631,86 +631,101 @@ tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -1757,13 +1772,13 @@ test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments" [[package]] name = "jedi" -version = "0.19.0" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] @@ -1772,7 +1787,7 @@ parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jmespath" @@ -2211,13 +2226,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -2369,13 +2384,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "4.0.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, + {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, ] [package.dependencies] @@ -3344,13 +3359,13 @@ unidecode = "*" [[package]] name = "unidecode" -version = "1.3.6" +version = "1.3.7" description = "ASCII transliterations of Unicode text" optional = false python-versions = ">=3.5" files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, + {file = "Unidecode-1.3.7-py3-none-any.whl", hash = "sha256:663a537f506834ed836af26a81b210d90cbde044c47bfbdc0fbbc9f94c86a6e4"}, + {file = "Unidecode-1.3.7.tar.gz", hash = "sha256:3c90b4662aa0de0cb591884b934ead8d2225f1800d8da675a7750cbc3bd94610"}, ] [[package]] @@ -3366,17 +3381,17 @@ files = [ [[package]] name = "urllib3" -version = "1.26.16" +version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] @@ -3408,57 +3423,62 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "uvloop" -version = "0.17.0" +version = "0.18.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false -python-versions = ">=3.7" +python-versions = ">=3.7.0" files = [ - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, - {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, - {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, + {file = "uvloop-0.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f354d669586fca96a9a688c585b6257706d216177ac457c92e15709acaece10"}, + {file = "uvloop-0.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:280904236a5b333a273292b3bcdcbfe173690f69901365b973fa35be302d7781"}, + {file = "uvloop-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad79cd30c7e7484bdf6e315f3296f564b3ee2f453134a23ffc80d00e63b3b59e"}, + {file = "uvloop-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99deae0504547d04990cc5acf631d9f490108c3709479d90c1dcd14d6e7af24d"}, + {file = "uvloop-0.18.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:edbb4de38535f42f020da1e3ae7c60f2f65402d027a08a8c60dc8569464873a6"}, + {file = "uvloop-0.18.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:54b211c46facb466726b227f350792770fc96593c4ecdfaafe20dc00f3209aef"}, + {file = "uvloop-0.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:25b714f07c68dcdaad6994414f6ec0f2a3b9565524fba181dcbfd7d9598a3e73"}, + {file = "uvloop-0.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1121087dfeb46e9e65920b20d1f46322ba299b8d93f7cb61d76c94b5a1adc20c"}, + {file = "uvloop-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74020ef8061678e01a40c49f1716b4f4d1cc71190d40633f08a5ef8a7448a5c6"}, + {file = "uvloop-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f4a549cd747e6f4f8446f4b4c8cb79504a8372d5d3a9b4fc20e25daf8e76c05"}, + {file = "uvloop-0.18.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6132318e1ab84a626639b252137aa8d031a6c0550250460644c32ed997604088"}, + {file = "uvloop-0.18.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:585b7281f9ea25c4a5fa993b1acca4ad3d8bc3f3fe2e393f0ef51b6c1bcd2fe6"}, + {file = "uvloop-0.18.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:61151cc207cf5fc88863e50de3d04f64ee0fdbb979d0b97caf21cae29130ed78"}, + {file = "uvloop-0.18.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c65585ae03571b73907b8089473419d8c0aff1e3826b3bce153776de56cbc687"}, + {file = "uvloop-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3d301e23984dcbc92d0e42253e0e0571915f0763f1eeaf68631348745f2dccc"}, + {file = "uvloop-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:680da98f12a7587f76f6f639a8aa7708936a5d17c5e7db0bf9c9d9cbcb616593"}, + {file = "uvloop-0.18.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:75baba0bfdd385c886804970ae03f0172e0d51e51ebd191e4df09b929771b71e"}, + {file = "uvloop-0.18.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ed3c28337d2fefc0bac5705b9c66b2702dc392f2e9a69badb1d606e7e7f773bb"}, + {file = "uvloop-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8849b8ef861431543c07112ad8436903e243cdfa783290cbee3df4ce86d8dd48"}, + {file = "uvloop-0.18.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211ce38d84118ae282a91408f61b85cf28e2e65a0a8966b9a97e0e9d67c48722"}, + {file = "uvloop-0.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a8f706b943c198dcedf1f2fb84899002c195c24745e47eeb8f2fb340f7dfc3"}, + {file = "uvloop-0.18.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:58e44650cbc8607a218caeece5a689f0a2d10be084a69fc32f7db2e8f364927c"}, + {file = "uvloop-0.18.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b8b7cf7806bdc745917f84d833f2144fabcc38e9cd854e6bc49755e3af2b53e"}, + {file = "uvloop-0.18.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:56c1026a6b0d12b378425e16250acb7d453abaefe7a2f5977143898db6cfe5bd"}, + {file = "uvloop-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:12af0d2e1b16780051d27c12de7e419b9daeb3516c503ab3e98d364cc55303bb"}, + {file = "uvloop-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b028776faf9b7a6d0a325664f899e4c670b2ae430265189eb8d76bd4a57d8a6e"}, + {file = "uvloop-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53aca21735eee3859e8c11265445925911ffe410974f13304edb0447f9f58420"}, + {file = "uvloop-0.18.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:847f2ed0887047c63da9ad788d54755579fa23f0784db7e752c7cf14cf2e7506"}, + {file = "uvloop-0.18.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6e20bb765fcac07879cd6767b6dca58127ba5a456149717e0e3b1f00d8eab51c"}, + {file = "uvloop-0.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e14de8800765b9916d051707f62e18a304cde661fa2b98a58816ca38d2b94029"}, + {file = "uvloop-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f3b18663efe0012bc4c315f1b64020e44596f5fabc281f5b0d9bc9465288559c"}, + {file = "uvloop-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6d341bc109fb8ea69025b3ec281fcb155d6824a8ebf5486c989ff7748351a37"}, + {file = "uvloop-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:895a1e3aca2504638a802d0bec2759acc2f43a0291a1dff886d69f8b7baff399"}, + {file = "uvloop-0.18.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d90858f32a852988d33987d608bcfba92a1874eb9f183995def59a34229f30d"}, + {file = "uvloop-0.18.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db1fcbad5deb9551e011ca589c5e7258b5afa78598174ac37a5f15ddcfb4ac7b"}, + {file = "uvloop-0.18.0.tar.gz", hash = "sha256:d5d1135beffe9cd95d0350f19e2716bc38be47d5df296d7cc46e3b7557c0d1ff"}, ] [package.extras] -dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] [[package]] name = "vine" -version = "5.0.0" -description = "Promises, promises, promises." +version = "5.1.0" +description = "Python promises." optional = false python-versions = ">=3.6" files = [ - {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, - {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, + {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, + {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, ] [[package]] @@ -3537,13 +3557,13 @@ anyio = ">=3.0.0" [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.10" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, + {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, ] [[package]] @@ -3638,86 +3658,81 @@ files = [ [[package]] name = "wrapt" -version = "1.15.0" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] @@ -3825,48 +3840,54 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [[package]] name = "zope-interface" -version = "6.0" +version = "6.1" description = "Interfaces for Python" optional = false python-versions = ">=3.7" files = [ - {file = "zope.interface-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990"}, - {file = "zope.interface-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f"}, - {file = "zope.interface-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518"}, - {file = "zope.interface-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb"}, - {file = "zope.interface-6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc"}, - {file = "zope.interface-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f"}, - {file = "zope.interface-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2"}, - {file = "zope.interface-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5"}, - {file = "zope.interface-6.0.tar.gz", hash = "sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"}, + {file = "zope.interface-6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb"}, + {file = "zope.interface-6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe81def9cf3e46f16ce01d9bfd8bea595e06505e51b7baf45115c77352675fd"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dc998f6de015723196a904045e5a2217f3590b62ea31990672e31fbc5370b41"}, + {file = "zope.interface-6.1-cp310-cp310-win_amd64.whl", hash = "sha256:239a4a08525c080ff833560171d23b249f7f4d17fcbf9316ef4159f44997616f"}, + {file = "zope.interface-6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1"}, + {file = "zope.interface-6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de"}, + {file = "zope.interface-6.1-cp311-cp311-win_amd64.whl", hash = "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1"}, + {file = "zope.interface-6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8bb9c990ca9027b4214fa543fd4025818dc95f8b7abce79d61dc8a2112b561a"}, + {file = "zope.interface-6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b51b64432eed4c0744241e9ce5c70dcfecac866dff720e746d0a9c82f371dfa7"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa6fd016e9644406d0a61313e50348c706e911dca29736a3266fc9e28ec4ca6d"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e30506bcb03de8983f78884807e4fd95d8db6e65b69257eea05d13d519b83ac0"}, + {file = "zope.interface-6.1-cp312-cp312-win_amd64.whl", hash = "sha256:e33e86fd65f369f10608b08729c8f1c92ec7e0e485964670b4d2633a4812d36b"}, + {file = "zope.interface-6.1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:2f8d89721834524a813f37fa174bac074ec3d179858e4ad1b7efd4401f8ac45d"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef43ee91c193f827e49599e824385ec7c7f3cd152d74cb1dfe02cb135f264d83"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e441e8b7d587af0414d25e8d05e27040d78581388eed4c54c30c0c91aad3a379"}, + {file = "zope.interface-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f89b28772fc2562ed9ad871c865f5320ef761a7fcc188a935e21fe8b31a38ca9"}, + {file = "zope.interface-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70d2cef1bf529bff41559be2de9d44d47b002f65e17f43c73ddefc92f32bf00f"}, + {file = "zope.interface-6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ad54ed57bdfa3254d23ae04a4b1ce405954969c1b0550cc2d1d2990e8b439de1"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef467d86d3cfde8b39ea1b35090208b0447caaabd38405420830f7fd85fbdd56"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6af47f10cfc54c2ba2d825220f180cc1e2d4914d783d6fc0cd93d43d7bc1c78b"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9559138690e1bd4ea6cd0954d22d1e9251e8025ce9ede5d0af0ceae4a401e43"}, + {file = "zope.interface-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:964a7af27379ff4357dad1256d9f215047e70e93009e532d36dcb8909036033d"}, + {file = "zope.interface-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:387545206c56b0315fbadb0431d5129c797f92dc59e276b3ce82db07ac1c6179"}, + {file = "zope.interface-6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57d0a8ce40ce440f96a2c77824ee94bf0d0925e6089df7366c2272ccefcb7941"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ebc4d34e7620c4f0da7bf162c81978fce0ea820e4fa1e8fc40ee763839805f3"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a804abc126b33824a44a7aa94f06cd211a18bbf31898ba04bd0924fbe9d282d"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac"}, + {file = "zope.interface-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40"}, + {file = "zope.interface-6.1.tar.gz", hash = "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"}, ] [package.dependencies] setuptools = "*" [package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface"] +docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] From 3b287b1d37bcdea72e5a1b3e51b0f59caaa51966 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Nov 2023 09:04:21 +0000 Subject: [PATCH 061/371] chore(api): update dependency prompt-toolkit to v3.0.41 Part-of: --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 6ec6748ae..1543fa2c7 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2431,13 +2431,13 @@ files = [ [[package]] name = "prompt-toolkit" -version = "3.0.39" +version = "3.0.41" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, + {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, ] [package.dependencies] @@ -3894,4 +3894,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "1ebda1967d7df47ed3e22d5c5c9f24b59422f9df2bab319399a737ae5b152711" +content-hash = "a0434a4ab1ab1e02648da15bcf0f5517ec2a7b2291d696fb0595666a91f8737c" diff --git a/api/pyproject.toml b/api/pyproject.toml index 57e59ec2b..428e6d725 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -104,7 +104,7 @@ factory-boy = "==3.2.1" faker = "==15.3.4" flake8 = "==3.9.2" ipdb = "==0.13.13" -prompt-toolkit = "==3.0.39" +prompt-toolkit = "==3.0.41" pytest = "==7.2.1" pytest-asyncio = "==0.20.3" pytest-cov = "==4.0.0" From 65d36e59fa88c1a889b3d6b8ed91bbf142a0ed14 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Nov 2023 12:35:34 +0000 Subject: [PATCH 062/371] chore(docs): lock file maintenance Part-of: --- docs/poetry.lock | 228 ++++++++++++++++++++++++++--------------------- 1 file changed, 128 insertions(+), 100 deletions(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index c384ab135..8236d1d5d 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -32,18 +32,22 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "babel" -version = "2.12.1" +version = "2.13.1" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +setuptools = {version = "*", markers = "python_version >= \"3.12\""} + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "backports-zoneinfo" @@ -88,87 +92,102 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -364,6 +383,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -457,14 +486,14 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -578,20 +607,20 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "68.2.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.0-py3-none-any.whl", hash = "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"}, - {file = "setuptools-68.2.0.tar.gz", hash = "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "snowballstemmer" @@ -850,14 +879,14 @@ test = ["pytest", "pytest-cov"] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] @@ -874,36 +903,35 @@ files = [ [[package]] name = "urllib3" -version = "2.0.4" +version = "2.1.0" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] From 376e1fb01959253328d22ee998f167d788c96aa4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Nov 2023 12:36:33 +0000 Subject: [PATCH 063/371] chore(front): lock file maintenance Part-of: --- front/yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/front/yarn.lock b/front/yarn.lock index 538bc63dc..22d7892f9 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -3177,9 +3177,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001541: - version "1.0.30001561" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz#752f21f56f96f1b1a52e97aae98c57c562d5d9da" - integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== + version "1.0.30001562" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz#9d16c5fd7e9c592c4cd5e304bc0f75b0008b2759" + integrity sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng== chai@^4.3.7: version "4.3.10" @@ -3557,9 +3557,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.535: - version "1.4.581" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz#23b684c67bf56d4284e95598c05a5d266653b6d8" - integrity sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw== + version "1.4.582" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz#4908215182266793499ac57d80e2680d7dd9b3db" + integrity sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA== emoji-regex@^8.0.0: version "8.0.0" From 64b3fdf273b15e25a4cf2d5e288a92197430c3bf Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Thu, 16 Nov 2023 09:33:49 +0000 Subject: [PATCH 064/371] Version bump and changelog for 1.3.4 --- CHANGELOG | 25 +++++++++++++++++++ api/funkwhale_api/__init__.py | 2 +- changes/changelog.d/howler.bugfix | 1 - .../moderator-docs-redirect-loop.doc | 1 - 4 files changed, 26 insertions(+), 3 deletions(-) delete mode 100644 changes/changelog.d/howler.bugfix delete mode 100644 changes/changelog.d/moderator-docs-redirect-loop.doc diff --git a/CHANGELOG b/CHANGELOG index ca4f0ef20..75f74ab54 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -10,6 +10,31 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog. .. towncrier +1.3.4 (2023-11-16) +------------------ + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Remove dangling dependency howler + + +Documentation: + +- Fix a redirect loop on documentation for moderators + +Contributors to our Merge Requests: + +- Georg Krause +- Thomas + +Committers: + +- Georg Krause + + 1.3.3 (2023-09-07) ------------------ diff --git a/api/funkwhale_api/__init__.py b/api/funkwhale_api/__init__.py index fa79c7320..f73b22bce 100644 --- a/api/funkwhale_api/__init__.py +++ b/api/funkwhale_api/__init__.py @@ -1,4 +1,4 @@ -__version__ = "1.3.3" +__version__ = "1.3.4" __version_info__ = tuple( [ int(num) if num.isdigit() else num diff --git a/changes/changelog.d/howler.bugfix b/changes/changelog.d/howler.bugfix deleted file mode 100644 index 718bc48e1..000000000 --- a/changes/changelog.d/howler.bugfix +++ /dev/null @@ -1 +0,0 @@ -Remove dangling dependency howler diff --git a/changes/changelog.d/moderator-docs-redirect-loop.doc b/changes/changelog.d/moderator-docs-redirect-loop.doc deleted file mode 100644 index 59b32af01..000000000 --- a/changes/changelog.d/moderator-docs-redirect-loop.doc +++ /dev/null @@ -1 +0,0 @@ -Fix a redirect loop on documentation for moderators From 3d5381760ffcd9f0aef4d0a50d32f00789551311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Tue, 14 Nov 2023 16:29:08 +0000 Subject: [PATCH 065/371] feat(docs): add usage statistics to nodeinfo specs Part-of: --- changes/changelog.d/nodeinfo-usage.doc | 1 + docs/specs/nodeinfo21/index.md | 15 ++++++--------- docs/specs/nodeinfo21/schema.yml | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 changes/changelog.d/nodeinfo-usage.doc diff --git a/changes/changelog.d/nodeinfo-usage.doc b/changes/changelog.d/nodeinfo-usage.doc new file mode 100644 index 000000000..8b26cfd1e --- /dev/null +++ b/changes/changelog.d/nodeinfo-usage.doc @@ -0,0 +1 @@ +Updated nodeinfo spec to include usage statistics. diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md index 69797822a..4927170ca 100644 --- a/docs/specs/nodeinfo21/index.md +++ b/docs/specs/nodeinfo21/index.md @@ -37,15 +37,9 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `longDescription` (String) : A longer description of the pod -`rules` (String) -: A collection of rules users of the pod must abide by - `contactEmail` (Email address) : The email address of the pod administrator -`terms` (String) -: The terms of use associated with the pod - `nodeName`(String) : The name of the pod @@ -140,16 +134,19 @@ Example response: "activeMonth": 0 }, "localPosts": 0, - "localComments": 0 + "localComments": 0, + "listenings": 0, + "downloads": 0, + "favorites": { + "tracks": 0 + } }, "metadata": { "actorId": "string", "private": true, "shortDescription": "string", "longDescription": "string", - "rules": "string", "contactEmail": "user@example.com", - "terms": "string", "nodeName": "string", "banner": "string", "defaultUploadQuota": 0, diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index f59d1d337..0210a2593 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -444,6 +444,18 @@ components: localComments: type: integer minimum: 0 + listenings: + type: integer + minimum: 0 + downloads: + type: integer + minimum: 0 + favorites: + type: object + properties: + tracks: + type: integer + minimum: 0 metadata: type: object properties: @@ -456,13 +468,9 @@ components: type: string longDescription: type: string - rules: - type: string contactEmail: type: string format: email - terms: - type: string nodeName: type: string banner: From 473cc1be258c2828527e4468ce52c50e9fb48521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Wed, 15 Nov 2023 10:01:00 +0000 Subject: [PATCH 066/371] Move information to metadata, reformat genres Part-of: --- docs/specs/nodeinfo21/index.md | 53 +++++++++++++++++---------- docs/specs/nodeinfo21/schema.yml | 61 ++++++++++++++++++++------------ 2 files changed, 74 insertions(+), 40 deletions(-) diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md index 4927170ca..57219f733 100644 --- a/docs/specs/nodeinfo21/index.md +++ b/docs/specs/nodeinfo21/index.md @@ -67,22 +67,22 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `content.local` (Object) : An object containing a summary of local content -`content.local.artists` (number) +`content.local.artists` (Number) : The number of artists associated with local uploads on the pod -`content.local.releases` (number) +`content.local.releases` (Number) : The number of albums or series associated with local uploads on the pod -`content.local.recordings` (number) +`content.local.recordings` (Number) : The number of tracks or episodes associated with local uploads on the pod -`content.local.hoursOfContent` (number) +`content.local.hoursOfContent` (Number) : The total number of hours of content associated with local uploads on the pod -`content.topMusicCategories` (Array\) +`content.topMusicCategories` (Array\<{ `name`: String, `count`: Number}>) : The top three music genres and the number of uploads tagged with them -`content.topPodcastCategories` (Array\) +`content.topPodcastCategories` (Array\<{ `name`: String, `count`: Number}>) : The top three podcast categories and the number of uploads tagged with them `languages` (Array\) @@ -97,6 +97,15 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `federation.followingInstances` (Number) : The number of Funkwhale pods that publicly follow the target pod +`usage.listenings` (Number) +: The total number of listenings on the pod + +`usage.downloads` (Number) +: The total number of downloads (streams) the pod has served + +`usage.favorites.tracks` (Number) +: The total number of track favorites recorded on the pod. + `features` (Array\) : A list of enabled features @@ -134,12 +143,7 @@ Example response: "activeMonth": 0 }, "localPosts": 0, - "localComments": 0, - "listenings": 0, - "downloads": 0, - "favorites": { - "tracks": 0 - } + "localComments": 0 }, "metadata": { "actorId": "string", @@ -168,24 +172,30 @@ Example response: }, "topMusicCategories": [ { - "rock": 1256 + "name": "rock", + "count": 1256 }, { - "jazz": 604 + "name": "jazz", + "count": 604 }, { - "classical": 308 + "name": "classical", + "count": 308 } ], "topPodcastCategories": [ { - "comedy": 12 + "name": "comedy", + "count": 12 }, { - "politics": 4 + "name": "politics", + "count": 4 }, { - "nature": 1 + "name": "nature", + "count": 1 } ], "federation": { @@ -193,6 +203,13 @@ Example response: "followingInstances": 0 } }, + "usage": { + "listenings": 0, + "downloads": 0, + "favorites": { + "tracks": 0 + } + }, "features": [ "channels", "podcasts", diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index 0210a2593..fa5fc2411 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -444,18 +444,6 @@ components: localComments: type: integer minimum: 0 - listenings: - type: integer - minimum: 0 - downloads: - type: integer - minimum: 0 - favorites: - type: object - properties: - tracks: - type: integer - minimum: 0 metadata: type: object properties: @@ -524,22 +512,36 @@ components: type: array items: type: object - additionalProperties: - type: integer + properties: + name: + type: string + count: + type: integer + minimum: 0 example: - - "rock": 1256 - - "jazz": 604 - - "classical": 308 + - name: "rock" + count: 1256 + - name: "jazz" + count: 604 + - name: "classical" + count: 308 topPodcastCategories: type: array items: type: object - additionalProperties: - type: integer + properties: + name: + type: string + count: + type: integer + minimum: 0 example: - - "comedy": 12 - - "politics": 4 - - "nature": 1 + - name: "comedy" + count: 12 + - name: "politics" + count: 4 + - name: "nature" + count: 1 federation: type: object properties: @@ -547,6 +549,21 @@ components: type: integer followingInstances: type: integer + usage: + type: object + properties: + listenings: + type: integer + minimum: 0 + downloads: + type: integer + minimum: 0 + favorites: + type: object + properties: + tracks: + type: integer + minimum: 0 features: type: array items: From 95c8e798abe54cacb628eebe63f64116d6c2b96f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Wed, 15 Nov 2023 13:40:04 +0100 Subject: [PATCH 067/371] fix(docs): Add nullable fields to Nodeinfo schema Part-of: --- docs/specs/nodeinfo21/schema.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index fa5fc2411..9658c4321 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -464,6 +464,7 @@ components: banner: type: string format: url + nullable: true defaultUploadQuota: type: integer supportedUploadExtensions: @@ -477,6 +478,7 @@ components: type: boolean domains: type: array + nullable: true items: type: string funkwhaleSupportMessageEnabled: From e5bd8a056019be585fbe41596a2d9e3106c81c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Wed, 15 Nov 2023 13:41:03 +0100 Subject: [PATCH 068/371] fix(docs): Clarify metadata object Part-of: --- docs/specs/nodeinfo21/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md index 57219f733..e8d100956 100644 --- a/docs/specs/nodeinfo21/index.md +++ b/docs/specs/nodeinfo21/index.md @@ -23,7 +23,7 @@ The NodeInfo endpoint is used to communicate the features and capabilities of a Read [the NodeInfo specification for more information](https://nodeinfo.diaspora.software/docson/index.html#/ns/schema/2.1#$$expand). ::: -The NodeInfo endpoint must contain all mandatory elements listed in the specification. In addition to this, Funkwhale's implementation should list additional details about the instance. +The NodeInfo endpoint must contain all mandatory elements listed in the specification. In addition to this, Funkwhale's implementation should list additional details about the instance in the `metadata` object. `actorId` (URL) : The URL of the pod service actor From 0a12fedaff5a870a00929abc6a4e38867ef29e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Thu, 16 Nov 2023 11:25:12 +0100 Subject: [PATCH 069/371] fix(docs): make linter happy Part-of: --- docs/specs/user-follow/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/specs/user-follow/index.md b/docs/specs/user-follow/index.md index 1bca3a39d..de3dced5b 100644 --- a/docs/specs/user-follow/index.md +++ b/docs/specs/user-follow/index.md @@ -17,7 +17,7 @@ Activity : A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. Actor -: An ActivityPub object representing an entity capbable of performing actions. See the [ActivityPub specification][actor] for more details. +: An ActivityPub object representing an entity capable of performing actions. See the [ActivityPub specification][actor] for more details. Requesting user : The user who sends a request. For example: If **Bob** requests to follow **Alice**, **Bob** is the requesting user. @@ -264,7 +264,7 @@ The following working groups are responsible for implementing this feature: - The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic - The **Design group** is responsible for drafting designs for the web app interactions -- The **Frontend group** is responsible for implementing the desigs from the **Design group** and adding support for the new API +- The **Frontend group** is responsible for implementing the designs from the **Design group** and adding support for the new API - The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users ## Open questions From 82a0a040d2166efa0b6deb823b0460a90fe890d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Fri, 17 Nov 2023 12:30:39 +0100 Subject: [PATCH 070/371] fix(docs): update website links in UI Part-of: --- changes/changelog.d/2235.bugfix | 1 + front/src/components/Home.vue | 2 +- front/src/views/Notifications.vue | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 changes/changelog.d/2235.bugfix diff --git a/changes/changelog.d/2235.bugfix b/changes/changelog.d/2235.bugfix new file mode 100644 index 000000000..72c265822 --- /dev/null +++ b/changes/changelog.d/2235.bugfix @@ -0,0 +1 @@ +Updated links to the Funkwhale website in the UI. (#2235) diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue index 23e16ea77..9b6cd4d80 100644 --- a/front/src/components/Home.vue +++ b/front/src/components/Home.vue @@ -264,7 +264,7 @@ whenever(() => store.state.auth.authenticated, () => {
diff --git a/front/src/views/Notifications.vue b/front/src/views/Notifications.vue index 95e612271..0b5a9694e 100644 --- a/front/src/views/Notifications.vue +++ b/front/src/views/Notifications.vue @@ -163,7 +163,7 @@ const markAllAsRead = async () => { {{ $t('views.Notifications.message.funkwhaleSupport') }}

Date: Sat, 18 Nov 2023 13:21:02 +0000 Subject: [PATCH 071/371] fix: update link in README Part-of: --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 361e9a1fc..2400701de 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,4 @@ If you find a security issue or vulnerability, please report it on our [GitLab i ## Code of conduct -The Funkwhale collective adheres to a [code of conduct](https://funkwhale.audio/en_US/code-of-conduct) in all our community spaces. Please familiarize yourself with this code and follow it when participating in discussions in our spaces. +The Funkwhale collective adheres to a [code of conduct](https://funkwhale.audio/code-of-conduct) in all our community spaces. Please familiarize yourself with this code and follow it when participating in discussions in our spaces. From 739e5fa3b71c49d784d955da52bd5bb4d7f9ee18 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Nov 2023 11:36:54 +0000 Subject: [PATCH 072/371] chore(api): update dependency aioresponses to v0.7.5 Part-of: --- api/poetry.lock | 38 ++++++++++++++++---------------------- api/pyproject.toml | 2 +- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index b7556a88a..ac71aef89 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -20,14 +20,14 @@ speedups = ["Brotli", "aiodns", "cchardet"] [[package]] name = "aioresponses" -version = "0.7.4" +version = "0.7.5" description = "Mock out requests made by ClientSession from aiohttp package" category = "dev" optional = false python-versions = "*" [package.dependencies] -aiohttp = ">=2.0.0,<4.0.0" +aiohttp = ">=3.3.0,<4.0.0" [[package]] name = "aiosignal" @@ -596,7 +596,7 @@ django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extr djangorestframework = ">=3.7.0" [package.extras] -with_social = ["django-allauth (>=0.40.0,<0.53.0)"] +with-social = ["django-allauth (>=0.40.0,<0.53.0)"] [[package]] name = "Django" @@ -1600,8 +1600,8 @@ pylint = ">=2.0,<3" pylint-plugin-utils = ">=0.7" [package.extras] -for_tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] -with_django = ["Django"] +for-tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] +with-django = ["Django"] [[package]] name = "pylint-plugin-utils" @@ -1904,7 +1904,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-http-message-signatures" @@ -1998,7 +1998,7 @@ grpcio = ["grpcio (>=1.21.1)"] httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -pure_eval = ["asttokens", "executing", "pure-eval"] +pure-eval = ["asttokens", "executing", "pure-eval"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] @@ -2186,25 +2186,19 @@ typing-extensions = ">=4.2.0" zope-interface = ">=5" [package.extras] -all-non-platform = ["twisted[conch,http2,serial,test,tls]"] -all_non_platform = ["twisted[conch,http2,serial,test,tls]"] +all-non-platform = ["twisted[conch,http2,serial,test,tls]", "twisted[conch,http2,serial,test,tls]"] conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)"] -dev_release = ["pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)"] -gtk-platform = ["pygobject", "twisted[all-non-platform]"] -gtk_platform = ["pygobject", "twisted[all-non-platform]"] +dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "towncrier (>=23.6,<24.0)"] +gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] -macos-platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "twisted[all-non-platform]"] -macos_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "twisted[all-non-platform]"] +macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] mypy = ["mypy (>=1.5.1,<1.6.0)", "mypy-zope (>=1.0.1,<1.1.0)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] -osx-platform = ["twisted[macos-platform]"] -osx_platform = ["twisted[macos-platform]"] +osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] -windows-platform = ["pywin32 (!=226)", "twisted[all-non-platform]"] -windows_platform = ["pywin32 (!=226)", "twisted[all-non-platform]"] +windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platform]", "twisted[all-non-platform]"] [[package]] name = "twisted-iocpsupport" @@ -2437,7 +2431,7 @@ typesense = ["typesense"] [metadata] lock-version = "1.1" python-versions = "^3.8,<3.12" -content-hash = "8a4a22c105efc0a430d62a535d2dc893e41373052d9c4b31e22e14a105200f20" +content-hash = "85939cb972d9f931f7f77e47422637e2ffc6cc792ea85fa2a1d1568364635b25" [metadata.files] aiohttp = [ @@ -2530,8 +2524,8 @@ aiohttp = [ {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, ] aioresponses = [ - {file = "aioresponses-0.7.4-py2.py3-none-any.whl", hash = "sha256:1160486b5ea96fcae6170cf2bdef029b9d3a283b7dbeabb3d7f1182769bfb6b7"}, - {file = "aioresponses-0.7.4.tar.gz", hash = "sha256:9b8c108b36354c04633bad0ea752b55d956a7602fe3e3234b939fc44af96f1d8"}, + {file = "aioresponses-0.7.5-py2.py3-none-any.whl", hash = "sha256:0af13b077bde04ae965bc21981a1c6afd7dd17b861150d858de477d1c39c26a6"}, + {file = "aioresponses-0.7.5.tar.gz", hash = "sha256:794b3e04837a683fd2c0c099bdf77f8d7ecdd284bc2c15203003518bf5cb8da8"}, ] aiosignal = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, diff --git a/api/pyproject.toml b/api/pyproject.toml index 0f37035f6..ab2d6a47c 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -98,7 +98,7 @@ service-identity = "==21.1.0" unicode-slugify = "==0.1.5" [tool.poetry.group.dev.dependencies] -aioresponses = "==0.7.4" +aioresponses = "==0.7.5" asynctest = "==0.13.0" black = "==23.3.0" coverage = { version = "==6.5.0", extras = ["toml"] } From 58fe1c4e57a85cf09f31204fbbdd95f34e18b12e Mon Sep 17 00:00:00 2001 From: Alexander Dunkel Date: Thu, 24 Aug 2023 09:07:21 +0200 Subject: [PATCH 073/371] docs: update command for postgres migrate Part-of: --- changes/changelog.d/develop-patch-96a1.bugfix | 1 + docs/administrator/upgrade/docker.md | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 changes/changelog.d/develop-patch-96a1.bugfix mode change 100644 => 100755 docs/administrator/upgrade/docker.md diff --git a/changes/changelog.d/develop-patch-96a1.bugfix b/changes/changelog.d/develop-patch-96a1.bugfix new file mode 100644 index 000000000..cfe79949d --- /dev/null +++ b/changes/changelog.d/develop-patch-96a1.bugfix @@ -0,0 +1 @@ +`postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command. diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md old mode 100644 new mode 100755 index 0427aee44..1f1a7236d --- a/docs/administrator/upgrade/docker.md +++ b/docs/administrator/upgrade/docker.md @@ -83,6 +83,8 @@ Funkwhale depends on Postgres for its database container. To upgrade Postgres, y To update your Postgres container, follow these steps: + + 1. Stop all Funkwhale services ```console @@ -92,9 +94,9 @@ To update your Postgres container, follow these steps: 2. Create a backup of your Funkwhale database. We will import this into the new postgres container later. ```console - # docker compose exec -i postgres pg_dump -U postgres postgres > db_dump.sql + # docker compose run --rm postgres pg_dump -U postgres postgres > db_dump.sql ``` - + 3. Move the {file}`data/postgres` directory to another location to back it up ```console From ce4b576b86a28a79684f8080f2ec1ad8818ad63e Mon Sep 17 00:00:00 2001 From: Alexander Dunkel Date: Thu, 24 Aug 2023 09:07:40 +0200 Subject: [PATCH 074/371] Fix chmod Part-of: --- docs/administrator/upgrade/docker.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 docs/administrator/upgrade/docker.md diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md old mode 100755 new mode 100644 From 96b74d2984a18a1e7a578d99b250d0a4a0184564 Mon Sep 17 00:00:00 2001 From: Alexander Dunkel Date: Thu, 24 Aug 2023 11:01:38 +0200 Subject: [PATCH 075/371] Prettify Part-of: --- docs/administrator/upgrade/docker.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) mode change 100644 => 100755 docs/administrator/upgrade/docker.md diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md old mode 100644 new mode 100755 index 1f1a7236d..8bbfe5adf --- a/docs/administrator/upgrade/docker.md +++ b/docs/administrator/upgrade/docker.md @@ -83,8 +83,6 @@ Funkwhale depends on Postgres for its database container. To upgrade Postgres, y To update your Postgres container, follow these steps: - - 1. Stop all Funkwhale services ```console @@ -96,7 +94,7 @@ To update your Postgres container, follow these steps: ```console # docker compose run --rm postgres pg_dump -U postgres postgres > db_dump.sql ``` - + 3. Move the {file}`data/postgres` directory to another location to back it up ```console From 048b20130f7f00647ba1d3c859f486e79694f662 Mon Sep 17 00:00:00 2001 From: Alexander Dunkel Date: Thu, 24 Aug 2023 11:02:10 +0200 Subject: [PATCH 076/371] fix chmod Part-of: --- docs/administrator/upgrade/docker.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 docs/administrator/upgrade/docker.md diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md old mode 100755 new mode 100644 From b11b0dfd522d51c8deb52fa3147e47f77ee2508c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Thu, 16 Nov 2023 11:27:48 +0000 Subject: [PATCH 077/371] fix(docs): update Docker steps in backup guide Part-of: --- docs/administrator/upgrade/backup.md | 73 ++++++++++++++++------------ 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/docs/administrator/upgrade/backup.md b/docs/administrator/upgrade/backup.md index 6ef6eb0a7..bd5d72fbe 100644 --- a/docs/administrator/upgrade/backup.md +++ b/docs/administrator/upgrade/backup.md @@ -9,8 +9,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - sudo -u postgres -H pg_dumpall -c funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + ```console + $ sudo -u postgres -H pg_dumpall -c funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql ``` ::: @@ -18,8 +18,16 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - sudo docker compose exec postgres pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + 1. Stop the running containers: + + ```console + $ sudo docker compose down + ``` + + 2. Dump the database to a backup file: + + ```console + $ sudo docker compose run --rm postgres pg_dump -U postgres postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql ``` ::: @@ -32,9 +40,9 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media - rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music + ```console + $ rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media + $ rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music ``` ::: @@ -42,10 +50,9 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - - rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media - rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music + ```console + $ rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media + $ rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music ``` ::: @@ -58,8 +65,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env + ```console + $ rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env ``` ::: @@ -67,8 +74,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env + ```console + $ rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env ``` ::: @@ -84,16 +91,16 @@ To restart your files, do the following: 1. Rename your current file directories. - ```{code-block} sh - mv /srv/funkwhale/data/media /srv/funkwhale/data/media.bak - mv /srv/funkwhale/data/music /srv/funkwhale/data/music.bak + ```console + $ mv /srv/funkwhale/data/media /srv/funkwhale/data/media.bak + $ mv /srv/funkwhale/data/music /srv/funkwhale/data/music.bak ``` 2. Restore your backed-up files to the original directories. - ```{code-block} sh - mv /patht/to/your/backup/media /srv/funkwhale/data/media - mv /path/to/your/backup/music /srv/funkwhale/data/music + ```console + $ mv /path/to/your/backup/media /srv/funkwhale/data/media + $ mv /path/to/your/backup/music /srv/funkwhale/data/music ``` ### Restore the database @@ -107,15 +114,15 @@ To restore your database, do the following: 1. Restore your database backup: - ```{code-block} sh - sudo -u postgres psql -f /path/to/your/backup/dump.sql funkwhale + ```console + $ sudo -u postgres psql -f /path/to/your/backup/dump.sql funkwhale ``` 2. Run the `funkwhale-manage migrate` command to set up the database. - ```{code-block} sh - cd /srv/funkwhale - venv/bin/funkwhale-manage migrate + ```console + $ cd /srv/funkwhale + $ venv/bin/funkwhale-manage migrate ``` ::: @@ -125,14 +132,20 @@ To restore your database, do the following: 1. Restore your database backup. - ```{code-block} sh - sudo docker compose run --rm -T postgres psql -U postgres postgres < "/path/to/your/backup/dump.sql" + ```console + $ sudo docker compose run --rm -T postgres psql -U postgres postgres < "/path/to/your/backup/dump.sql" ``` 2. Run the `funkwhale-manage migrate` command to set up the database. - ```{code-block} sh - sudo docker compose run --rm api funkwhale-manage migrate + ```console + $ sudo docker compose run --rm api funkwhale-manage migrate + ``` + +3. Restart the services. + + ```console + $ sudo docker compose up -d ``` ::: From b345d4d4298af81464d893aee148678b70721b30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= Date: Fri, 17 Nov 2023 10:10:57 +0000 Subject: [PATCH 078/371] feat(docs): archived the pre-1.0 changelog Part-of: --- changes/changelog.d/archive-changelog.doc | 1 + docs/changes/funkwhale-0-changelog.rst | 3530 +++++++++++++++++++++ docs/index.md | 1 + 3 files changed, 3532 insertions(+) create mode 100644 changes/changelog.d/archive-changelog.doc create mode 100644 docs/changes/funkwhale-0-changelog.rst diff --git a/changes/changelog.d/archive-changelog.doc b/changes/changelog.d/archive-changelog.doc new file mode 100644 index 000000000..875bf98bc --- /dev/null +++ b/changes/changelog.d/archive-changelog.doc @@ -0,0 +1 @@ +Archived the pre-1.0 changelog diff --git a/docs/changes/funkwhale-0-changelog.rst b/docs/changes/funkwhale-0-changelog.rst new file mode 100644 index 000000000..fddd3771c --- /dev/null +++ b/docs/changes/funkwhale-0-changelog.rst @@ -0,0 +1,3530 @@ +Funkwhale 0.x changelog +=== + +0.21.2 (2020-07-27) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added a new ?related=obj_id filter for artists, albums and tracks, based on tags +- Can now filter subscribed content through API (#1116) +- Support ordering=random for artists, albums, tracks and channels endpoints (#1145) +- Use role=alert on forms/toast message to improve accessibility (#1134) + + +Bugfixes: + +- Fix embedded player not working on channel series/album (#1175) +- Fixed broken mimetype detection during import (#1165) +- Fixed crash when loading recent albums via Subsonic (#1158) +- Fixed crash with null help text in admin (#1161) +- Fixed invalid metadata when importing multi-artists tracks/albums (#1104) +- Fixed player crash when using Funkwhale as a PWA (#1157) +- Fixed wrong convert art displaying in some situations (#1138) +- Make channel card updated times more humanly readable, add internationalization (#1089) + +Contributors to this release (development, documentation, reviews): + +- Agate +- Bheesham Persaud +- CiarĆ”n Ainsworth + + +0.21.1 (2020-06-11) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + + +Features: + +- Support a --watch mode with ``import_files`` to automatically add, update and remove files when filesystem is updated (#721) + +Enhancements: + +- Added new channels widget on pod landing page (#1113) +- Fix HTML not including instance name in some situations (#1107) +- Make URL-building logic more resilient against reverse proxy misconfiguration (#1085) +- Removed unused masonry dependency (#1112) +- Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154) +- Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151) + + +Bugfixes: + +- Added safeguard to ensure local uploads are never purged from cache (#1086) +- Ensure firefox password manager dont autofill username in search bar (#1090) +- Ensure player doesn't disappear when last queue track is removed manually (#1092) +- Ensure tracks linked to skipped upload can be pruned (#1011) +- Fix playlist modal only listing 50 first playlists (#1087) +- Fixed a wording issue on artist channel page (#1117) +- Fixed crash on python 3.5 with cli importer (#1155) +- Fixed issue when displaying starred tracks on subsonic (#1082) +- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper mimetypes on existing uploads. +- Fixed page not refreshing when switching between My Library and Explore sections (#1091) +- Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147) +- Fixed wrong album and track count in admin artist API (#1096) +- Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078) + +Small API breaking change in ``/api/v1/libraries`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To allow easier crawling of public libraries on a pod,we had to make a slight breaking change +to the behaviour of ``GET /api/v1/libraries``. + +Before, it returned only libraries owned by the current user. + +Now, it returns all the accessible libraries (including ones from other users and pods). + +If you are consuming the API via a third-party client and need to retrieve your libraries, +use the ``scope`` parameter, like this: ``GET /api/v1/libraries?scope=me`` + + +Contributors to this release (development, documentation, reviews, testing): + +- Agate +- CiarĆ”n Ainsworth +- Creak +- gisforgabriel +- Siren +- Tony Wasserka + + +0.21 "Agate" (2020-04-24) +------------------------- + +This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3 + +We are truly grateful as well to the dozens of people who contributed to this release with translations, development, documentation, reviews, design, testing, feedback, financial support, third-party projects and integrationsā€¦ You made it possible! + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html, there are also additional operations you need to execute, listed in the changelog below (search "Manual action"). + +Channels and podcasts +^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale 0.21 includes a brand new feature: Channels! + +Channels can be used as a replacement to public libraries, +to publish audio content, both musical and non-musical. They federate with other Funkwhale pods, but also other +fediverse software, in particular Mastodon, Pleroma, Friendica and Reel2Bits, meaning people can subscribe to your channel +from any of these software. To get started with publication, simply visit your profile and create a channel from there. + +Each Funkwhale channel also comes with RSS feed that is compatible with existing podcasting applications, like AntennaPod +on Android and, within Funkwhale, you can also subscribe to any podcast from its RSS feed! + +Many, many thanks to the numerous people who helped with the feature design, development and testing, and in particular +to the members of the working group who met every week for months in order to get this done, and the members of other third-party +projects who took the time to work with us to ensure compatibility. + +Redesigned navigation, player and queue +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This release includes a full redesign of our navigation, player and queue. Overall, it should provide +a better, less confusing experience, especially on mobile devices. This redesign was suggested +14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done! + +Improved search bar for searching remote objects +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly: + +- Subscribe to a remote library via its URL +- Listen a public track from another pod +- Subscribe to a channel + +Screening for sign-ups and custom sign-up form +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Instance admins can now configure their pod so that registrations required manual approval from a moderator. This +is especially useful on private or semi-private pods where you don't want to close registrations completely, +but don't want spam or unwanted users to join your pod. + +When this is enabled and a new user register, their request is put in a moderation queue, and moderators +are notified by email. When the request is approved or refused, the user is also notified by email. + +In addition, it's also possible to customize the sign-up form by: + +- Providing a custom help text, in markdown format +- Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods + +Federated reports +^^^^^^^^^^^^^^^^^ + +It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed. + +This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers. + +Improved search performance +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Our search engine went through a full rewrite to make it faster. This new engine is enabled +by default when using the search bar, or when searching for artists, albums and tracks. It leverages +PostgreSQL full-text search capabilities. + +During our tests, we observed huge performance improvements after the switch, by an order of +magnitude. This should be especially perceptible on pods with large databases, more modest hardware +or hard drives. + +We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, +you can switch back by setting ``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file. + +Enforced email verification +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used to make email verification +mandatory for your users. It defaults to ``false``, and doesn't apply to superuser accounts created through +the CLI. + +If you enable this, ensure you have a SMTP server configured too. + +More reliable CLI importer [manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger) + +We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly. + +If you use the ``import_files`` command, this means you should replace scripts that look like this:: + + python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput + +By this:: + + python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput + +And Funkwhale will happily import any supported audio file from the specified directory. + +User management through the server CLI +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We now support user creation (incl. non-admin accounts), update and removal directly +from the server CLI. Typical use cases include: + +- Changing a user password from the command line +- Creating or updating users from deployments scripts or playbooks +- Removing or granting permissions or upload quota to multiple users at once +- Marking multiple users as inactive + +All user-related commands are available under the ``python manage.py fw users`` namespace. +Please refer to the `Admin documentation <https://docs.funkwhale.audio/admin/commands.html#user-management>`_ for +more information and instructions. + +Progressive web app [Manual action sugFull list of changes +^^^^^^^^^^^^^^^^^^^^gested, non-docker only] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience +during offline use, and on mobile devices. + +In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure +the following instruction is present in your nginx configuration:: + + location /front/ { + # Add the following line in the /front/ location + add_header Service-Worker-Allowed "/"; + } + +Postgres docker changed environment variable [manual action required, docker multi-container only] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658) + +You need to add this to your .env file: ``POSTGRES_HOST_AUTH_METHOD=trust`` + +Newer deployments aren't affected. + +Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now includes PostgreSQL 11. + +In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below:: + + # open a shell as the Funkwhale user + sudo -u funkwhale -H bash + + # move to the funkwhale data directory + # (replace this with your own if you used a different path) + cd /srv/funkwhale/data + + # stop the funkwhale container + docker stop funkwhale + + # backup the database files + cp -r data/ ../postgres.bak + + # Upgrade the database + docker run --rm \ + -v $(pwd)/data:/var/lib/postgresql/10/data \ + -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ + -e PGUSER=funkwhale \ + -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ + tianon/postgres-upgrade:10-to-11 + + # replace the Postgres 10 files with Postgres 11 files + mv data/ postgres-10 + mv upgraded-postgresql/ data + +Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, +you can remove the backups/old files:: + + sudo -u funkwhale -H bash + cd /srv/funkwhale/data + rm -rf ../postgres.bak + rm -rf postgres-10 + +Full list of changes +^^^^^^^^^^^^^^^^^^^^ + +Features: + +- Support for publishing and subscribing to podcasts (#170) +- Brand new navigation, queue and player redesign (#594) +- Can now browse a library content through the UI (#926) +- Federated reports (#1038) +- Screening for sign-ups (#1040) +- Make it possible to enforce email verification (#1039) +- Added a new radio based on another user listenings (#1060) +- User management through the server CLI + +Enhancements: + +- Added ability to reject library follows from notifications screen (#859) +- Added periodic background task and CLI command to associate genre tags to artists and albums based on identical tags found on corresponding tracks (#988) +- Added support for CELERYD_CONCURRENCY env var to control the number of worker processes (#997) +- Added the ability to sort albums by release date (#1013) +- Added two new radios to play your own content or a given library tracks +- Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled +- Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012) +- Favor local uploads when playing a track with multiple uploads (#1036) +- Include only local content in nodeinfo stats, added downloads count +- Make media and static files serving more reliable when reverse proxy X_FORWARDED_* headers are incorrect (#947) +- Order the playlist columns by modification date in the Browse tab (#775) +- Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042) +- Remember display settings in Album, Artist, Radio and Playlist views (#391) +- Removed unnecessary "Federation music needs approval" setting (#959) +- Replaced our slow research logic by PostgreSQL full-text search (#994) +- Support autoplay when loading embed frame from Mastodon and third-party websites (#1041) +- Support filtering playlist by name and several additional UX improvements in playlists modal (#974) +- Support modifying album cover art through the web UI (#588) +- Use a dedicated scope for throttling subsonic to avoid intrusive rate-limiting +- Use same markdown widget for all content fields (rules, description, reports, notes, etc.) +- CLI Importer is now more reliable and less resource-hungry on large libraries +- Add support custom domain for S3 storage +- Better placeholders for channels when there are no episodes or series +- Updated documentation for 0.21 release +- Improved performance and error handling when fetching remote attachments + +Bugfixes: + +- Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961) +- Fix issue with browser shortcuts such as search and focus URL not being recognised (#340, #985) +- Fixed admin dropdown not showing after login (#1042) +- Fixed an issue with celerybeat container failing to restart (#1004) +- Fixed invalid displayed number of tracks in playlist (#986) +- Fixed issue with recent results not being loaded from the API (#948) +- Fixed issue with sorting by album name not working (#960) +- Fixed short audio glitch when switching switching to another track with player paused (#970) +- Improved deduplication logic to prevent skipped files during import (#348, #474, #557, #740, #928) +- More resilient tag parsing with empty release date or album artist (#1037) +- More robust importer against malformed dates (#966) +- Removed "nodeinfo disabled" setting, as nodeinfo is required for the UI to work (#982) +- Replaced PDF icon by List icon in playlist placeholder (#943) +- Resolve an issue where disc numbers were not taken into consideration when playing an album from the album card (#1006) +- Set correct size for album covers in playlist cards (#680) +- Remove double spaces in ChannelForm +- Deduplicate tags in Audio ActivityPub representation +- Add support custom domain for S3 storage +- Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075) +- Exclude external podcasts from library home +- Fixed broken channel save when description is too long +- Fixed 500 error when federation is disabled and application+json is requested +- Fixed minor subsonic API crash +- Fixed broken local profile page when allow-list is enabled +- Fixed issue with confirmation email not sending when signup-approval was enabled +- Ensure 0 quota on user is honored +- Fixed attachments URL not honoring media URL +- Fix grammar in msg string in TrackBase.vue +- Fix typo in SubscribeButton.vue + +Translations: + +- Arabic +- Catalan +- English (United Kingdom) +- German +- Hungarian +- Japanese +- Occitan +- Portuguese (Brazil) +- Russian + +Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects): + +- Agate +- annando +- Anton Strƶmkvist +- Audrey +- ButterflyOfFire +- CiarĆ”n Ainsworth +- Creak +- Daniele Lira Mereb +- dashie +- Eloisa +- eorn +- Francesc GalĆ­ +- gerhardbeck +- GinnyMcQueen +- guillermau +- Haelwenn +- jinxx +- Jonathan Aylard +- Keunes +- M.G +- marzzzello +- MathĆ© Grievink +- MĆ©lanie Chauvel +- Mjourdan +- Morgan Kesler +- Noe Gaumont +- Noureddine HADDAG +- Ollie +- Peter Wickenberg +- Quentin PAGƈS +- Renon +- Satsuki Yanagi +- Shlee +- SpcCw +- techknowlogick +- ThibG +- Tony Wasserka +- unklebonehead +- wakest +- wxcafĆ© +- Xaloc +- XosĆ© M + +0.20.1 (2019-10-28) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + + +Denormalized audio permission logic in a separate table to enhance performance +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With this release, we're introducing a performance enhancement that should reduce the load on the database and API +servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939). + +Under the hood, we now maintain a separate table to link users to the tracks they are allowed to see. This change is **disabled** +by default, but should be enabled by default starting in Funkwhale 0.21. + +If you want to try it now, add +``MUSIC_USE_DENORMALIZATION=True`` to your ``.env`` file, restart Funkwhale, and run the following command:: + + python manage.py rebuild_music_permissions + +This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual +behaviour regarding tracks, albums and artists visibility. + + +Enhancements: + +- Added a retry option for failed uploads (#942) +- Added feedback via loading spinner when searching a remote library +- Denormalized audio permission logic in a separate table to enhance performance +- Placeholders will now be shown if no content is available across the application (#750) +- Reduce the number of simultaneous DB connections under some deployment scenario +- Support byYear filtering in Subsonic API (#936) + + +Bugfixes: + +- Ensure password input doesn't overflow outside of container (#933) +- Fix audio serving issues under S3/nginx when signatures are enabled +- Fix import crash when importing M4A file with no embedded cover (#946) +- Fix tag exclusion in custom radios (#950) +- Fixed an issue with embed player CSS being purged during build (#935) +- Fixed escaped pod name displayed on home/about page (#945) +- Fixed pagination in subsonic getSongsByGenre endpoint (#954) +- Fixed style glitches in dropdowns + + +Documentation: + +- Documented how to create DB extension by hand in case of permission error during migrations (#934) + + +Contributors to this release (translation, development, documentation, reviews, design): + +- CiarĆ”n Ainsworth +- Dag Stenstad +- Daniele Lira Mereb +- Agate +- Esteban +- Johannes H. +- knuxify +- Mateus Mattei Garcia +- Quentin PAGƈS + + +0.20 (2019-10-04) +----------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + + +Support for genres via tags +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +One of our most requested missing features is now available! + +Starting with Funkwhale 0.20, +Funkwhale will automatically extract genre information from uploaded files and associate it +with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). +Please refer to `our tagging documentation <https://docs.funkwhale.audio/users/upload.html#tagging-files>`_ +for more information regarding the tagging process. + +Tags can also be associated with artists and albums, and updated after upload through the UI using +the edit system released in Funkwhale 0.19. Tags are also fetched when retrieving content +via federation. + +Tags are used in various places to enhance user experience: + +- Tags are listed on tracks, albums and artist profiles +- Each tag has a dedicated page were you can browse corresponding content and quickly start a radio +- The custom radio builder now supports using tags +- Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well + +If you are a pod admin and want to extract tags from already uploaded content, you run `this snippet <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__ +and `this snippet <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ in a ``python manage.py shell``. + +Content and account reports +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, +who can review it and delete reported content, block accounts or take any other action they deem necessary. + +By default, both anonymous and authenticated users can submit these reports. This makes sure moderators can receive and handle +takedown requests and other reports for illegal content that may be sent by third-parties without an account on the pod. However, +you can disable anonymous reports completely via your pod settings. + +Federation of the reports will be supported in a future release. + +For more information about this feature, please check out our documentation: + +- `User documentation <https://docs.funkwhale.audio/moderator/reports.html>`__ +- `Moderator documentation <https://docs.funkwhale.audio/users/reports.html>`__ + +Account deletion +^^^^^^^^^^^^^^^^ + +Users can now delete their account themselves, without involving an administrator. + +The deletion process will remove any local data and objects associated with the account, +but the username won't be able to new users to avoid impersonation. Deletion is also broadcasted +to other known servers on the federation. + +For more information about this feature, please check out our documentation: + +- `User documentation <https://docs.funkwhale.audio/users/account.html>`__ + +Landing and about page redesign [Manual action suggested] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod +configuration. Among other things, the landing page will now include: + +- your pod and an excerpt from your pod's description +- your pod banner image, if any +- your contact email, if any +- the login form +- the signup form (if registrations are open on your pod) +- some basic statistics about your pod +- a widget including recently uploaded albums, if anonymous access is enabled + +The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before. + +Additionally, the about page now includes: + +- your pod name, description, rules and terms +- your pod banner image, if any +- your contact email, if any +- comprehensive statistics about your pod +- some info about your pod configuration, such as registration and federation status or the default upload quota for new users + +With this redesign, we've added a handful of additional pod settings: + +- Pod banner image +- Contact email +- Rules +- Terms of service + +We recommend taking a few moments to fill these accordingly to your needs, by visiting ``/manage/settings``. + +Allow-list to restrict federation to trusted domains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Allow-Listing feature grants pod moderators +and administrators greater control over federation +by allowing you to create a pod-wide allow-list. + +When allow-listing is enabled, your pod's users will only +be able to interact with pods included in the allow-list. +Any messages, activity, uploads, or modifications to +libraries and playlists will only be shared with pods +on the allow-list. Pods which are not included in the +allow-list will not have access to your pod's content +or messages and will not be able to send anything to +your pod. + +If you want to enable this feature on your pod, or learn more, please refer to `our documentation <https://docs.funkwhale.audio/moderator/listing.html>`_! + +Periodic message to incite people to support their pod and Funkwhale +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. + +If specified by the pod admin, a separate and custom message will also be displayed in a similar way to provide instructions and links to support the pod. + +Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely. + + +Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To improve the performance, stability and reliability of Funkwhale's web processes, +we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as: + +- zero-downtime upgrades +- configurable number of web worker processes + +Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne. + +To benefit from this enhancement on existing instances, you need to add ``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file +(use a higher number if you want to have more web worker processes). + +Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and replace the ``ExecStart=`` line with +``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`` + +Then reload the configuration change with ``sudo systemctl daemon-reload`` and ``sudo systemctl restart funkwhale-server``. + + +Content-Security-Policy and additional security headers [manual action suggested] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To improve the security and reduce the attack surface in case of a successful exploit, we suggest +you add the following Content-Security-Policy to your nginx configuration. + +..note:: + + If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers + + .. code-block:: + + add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; + +**On non-docker setups**, in ``/etc/nginx/sites-available/funkwhale.conf``:: + + server { + + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location /front/ { + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN"; + # ā€¦ existing content here + } + + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; + } + } + +Then reload nginx with ``systemctl reload nginx``. + +**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``:: + + server { + + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location /front/ { + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN"; + # ā€¦ existing content here + } + + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias /frontend/embed.html; + } + } + +Then reload nginx with ``docker-compose restart nginx``. + +Rate limiting +^^^^^^^^^^^^^ + +With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure +regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error. + +For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit +is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests. + +You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your ``.env`` file and restarting the +services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/. + +Broken audio streaming when using S3/Minio and DSub [manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded +to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage +such as Minio, please add the following in your nginx ``~ /_protected/media/(.+)`` location:: + + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 + proxy_set_header Authorization ""; + +And reload your nginx process. + +Detail +^^^^^^ + +Features: + +- Added periodical message to incite people to support their pod and Funkwhale (#839) +- Admins can now add custom CSS from their pod settings (#879) +- Allow-list to restrict federation to trusted domains (#853) +- Content and account reports (#890) +- Dark theme (#756) +- Enforce a configurable rate limit on the API to mitigate abuse (#261) +- Redesign of the landing and about pages (#872) +- Support for genres, via tags (#432) +- Users can now delete their account without admin intervention (#852) + + +Enhancements: + +- Added a info message on embed wizard when anonymous access to content is disabled (#878) +- Added Catalan translation files +- Added Czech translation (#844) +- Added field to manage user upload quota in Django backend (#903) +- Added the option to replace the queue's current contents with a selected album or track (#761) +- Artists with no albums will now show track count on artist card (#895) +- Ensure API urls answer with and without a trailing slash (#877) +- Hardcoded list of supported browsers to avoid unexpected regressions (#854) +- Hardened security thanks to CSP and additional HTTP headers (#880) +- Improve display of search results by including artist and album data +- Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature +- Mods can now change a library visibility through the admin UI (#548) +- New keyboard shortcuts added for enhanced control over audio player (#866) +- Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data +- Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873) +- Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898) +- Prevent usage of too weak passwords (#883) +- Reduced CSS size by 30% using purgecss +- Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862) +- Simplified embedded docker reverse proxy IP configuration (#834) +- Support embeds on public playlists +- Support for M4A/AAC files (#661) +- Switched from Semantic-UI to Fomentic-UI +- Add dropdown menu to track table (#531) +- Display placeholder on homepage when there are no playlists (#892) +- Make album cards height independent (#710) + + +Bugfixes: + +- Added context strings to en_GB translations so that picking the language changes the interface as expected +- Ensure selected locale is not reset to browser default when refreshing app +- Fix missing license information on track details page (#913) +- Fix regression to quota bar color (#897) +- Fixed a responsive display issues on 1024px wide screens (#904) +- Fixed album art not being retrieved from Ogg/Opus files +- Fixed broken embedded player layout after dependency update (#875) +- Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL +- Fixed broken less listened radio (#912) +- Fixed broken URL to artist and album on album and track pages (#871) +- Fixed empty contentType causing client crash in some Subsonic payloads (#893) +- Fixed import crashing with empty cover file or too long values on some fields +- Fixed in-place imported files not playing under nginx when filename contains ? or % (#924) +- Fixed remaining transcoding issue with Subsonic API (#867) +- Fixed search usability issue when browsing artists, albums, radios and playlists (#902) +- Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865) +- Updated docs to ensure streaming works when using Minio/S3 and DSub (#932) + +Contributors to this release (translation, development, documentation, reviews, design): + +- Amaranthe +- ButterflyOfFire +- CiarĆ”n Ainsworth +- Agate +- Esteban +- Francesc GalĆ­ +- Freyja Wildes +- hellekin +- IISergII +- jiri-novacek +- Johannes H. +- Keunes +- Koen +- Manuel Cortez +- Mehdi +- MĆ©lanie Chauvel +- nouts +- QuentĆ­ +- Reg +- Rodrigo Leite +- Romain Failliot +- SpcCw +- Sylke Vicious +- Tobias Reisinger +- Xaloc +- XosĆ© M + + +0.19.1 (2019-06-28) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- The currently playing track is now highlighted with an orange play icon (#832) +- Support for importing files with no album tag (#122) +- Redirect from / to /library when user is logged in (#864) +- Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) +- Added button to search for objects on Discogs (#368) +- Added copy-to-clipboard button with Subsonic password input (#814) +- Added opus to the list of supported mimetypes and extensions (#868) +- Aligned search headers with search results in the sidebar (#708) +- Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) +- Favorites radio will not be visible if the user does not have any favorites (#419) + + +Bugfixes: + +- Ensure empty but optional fields in file metadata don't error during import (#850) +- Fix broken upload for specific files when using S3 storage (#857) +- Fixed broken translation on home and track detail page (#833) +- Fixed broken user admin for users with non-digit or letters in their username (#869) +- Fixed invalid file extension for transcoded tracks (#848) +- Fixed issue with French translation for "Start radio" (#849) +- Fixed issue with player changing height when hovering over the volume slider (#838) +- Fixed secondary menus truncated on narrow screens (#855) +- Fixed wrong og:image url when using S3 storage (#851) +- Hide pod statistics on about page if those are disabled (#835) +- Use ASCII filename before upload to S3 to avoid playback issues (#847) + + +Contributors to this release (committers and reviewers): + +- CiarĆ”n Ainsworth +- Creak +- ealgase +- Agate +- Esteban +- Freyja Wildes +- hellekin +- Johannes H. +- Mehdi +- Reg + + +0.19.0 (2019-05-16) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + + +Edits on tracks, albums and artists +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles +were created from audio file tags, but basically immutable after that (unless you had +admin access to Django's UI, which wasn't ideal to do this kind of changes). + +With this release, everyone can suggest changes on track, album and artist pages. Users +with the "library" permission can review suggested edits in a dedicated interface +and apply/reject them. + +Approved edits are broadcasted via federation, to ensure other instances get the information +too. + +Not all fields are currently modifiable using this feature. Especially, it's not possible +to suggest a new album cover, or reassign a track to a different album or artist. Those will +be implemented in a future release. + +Admin UI for tracks, albums, artists, libraries and uploads +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As part of our ongoing effort to make Funkwhale easier to manage for instance owners, +this release includes a brand new administration interface to deal with: + +- tracks +- albums +- artists +- libraries +- uploads + +You can use this UI to quickly search for any object, delete objects in batch, understand +where they are coming from etc. This new UI should remove the need to go through Django's +admin in the vast majority of cases (but also includes a link to Django's admin when needed). + +Artist hiding in the interface +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +It's now possible for users to hide artists they don't want to see. + +Content linked to hidden artists will not show up in the interface anymore. Especially: + +- Hidden artists tracks are removed from the current queue +- Starting a playlist will skip tracks from hidden artists +- Recently favorited, recently listened and recently added widgets on the homepage won't include content from hidden artists +- Radio suggestions will exclude tracks from hidden artists +- Hidden artists won't appear in Subsonic apps + +Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. + +OAuth2 authorization for better integration with third-party apps +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale now support the OAuth2 authorization and authentication protocol which will allow +third-party apps to interact with Funkwhale on behalf of users. + +This feature makes it possible to build third-party apps that have the same capabilities +as Funkwhale's Web UI. The only exception at the moment is for actions that requires +special permissions, such as modifying instance settings or moderation (but this will be +enabled in a future release). + +If you want to start building an app on top of Funkwhale's API, please check-out +https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html. + +Better error handling and display during import +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale should now be more resilient to missing tags in imported files, and give +you more insights when something goes wrong, including the specific tags that were missing +or invalid, and additional debug information to share in your support requests. + +This information is available in all pages that list uploads, when clicking on the button next to the upload status. + +Support for S3-compatible storages to store media files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Storing all media files on the Funkwhale server itself may not be possible or desirable +in all scenarios. You can now configure Funkwhale to store those files in a S3 +bucket instead. + +Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use +this feature. + +Prune library command +^^^^^^^^^^^^^^^^^^^^^ + +Users are often surprised by Funkwhale's tendency to keep track, album and artist +metadata even if no associated files exist. + +To help with that, we now offer a ``prune_library`` management command you can run +to purge your database from obsolete entries. `Please refer to our documentation +for usage instructions <https://docs.funkwhale.audio/admin/commands.html#pruning-library>`__. + +Check in-place files command +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When using in-place import with a living audio library, you'll quite often rename or +remove files from the file system. Unfortunately, Funkwhale keeps a reference to those +files in the database, which results in unplayable tracks. + +To help with that, we now offer a ``check_inplace_files`` management command you can run +to purge your database from obsolete files. `Please refer to our documentation +for usage instructions <https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database>`__. + + +Features: + +- Added albums view. Similar to artists view, it's viewable by clicking on the "Albums" link on the top bar. (#356) +- Allow artists hiding (#701) +- Change the document title to display current track information. (#359) +- Display a confirmation dialog when adding duplicate songs to a playlist (#784) +- Improved error handling and display during import (#252, #718, #583, #501, #544) +- Support embedding full artist discographies (#747) +- Support metadata update on tracks, albums and artists and broadcast those on the federation (#689) +- Support OAuth2 authorization for better integration with third-party apps (#752) +- Support S3-compatible storages for media files (#565) + + +Enhancements: + +- [Experimental] Added a new "Similar" radio based on users history (suggested by @gordon) +- Added a "load more" button on artist pages to load more tracks/albums (#719) +- Added a `check_inplace_files` management command to remove purge the database from references to in-place imported files that don't exist on disk anymore (#781) +- Added a prune_library management command to remove obsolete metadata from the database (#777) +- Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809) +- Added standardized translation context for all strings in the frontend to give accurate hints to translators. +- Added twitter:* meta tags to detect tracks and albums players automatically on more sites (#578) + Improved responsiveness of embedded player +- Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808) +- Better handling of follow/accept messages to avoid and recover from desync between instances (#830) +- Better workflow for connecting to another instance (#715) + + Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers. +- Bumped dependencies to latest versions (#815) +- Descriptions will now be shown underneath user libraries (#768) +- Don't store unhandled ActivityPub messages in database (#776) +- Enhanced the design of the embed wizard. (!619) +- Ensure the footer always stays at the bottom of the page +- Expose an instance-level actor (service@domain) in nodeinfo endpoint (#689) +- Improved readability of logo (#385) +- Keep persistent connections to the database instead of recreating a new one for each request +- Labels for privacy levels are now consistently grabbed from a common source instead of being hardcoded every time they are needed. +- Merged artist/album buttons with title text on artist and album pages (#725) +- Now honor maxBitrate parameter in Subsonic API (#802) +- Preload next track in queue (#572) +- Reduced app size for regular users by moving admin-related code in a dedicated chunk (#805) +- Removed broken/instable lyrics feature (#799) +- Show remaining storage space during import and prevent file upload if not enough space is remaining (#550) +- The buttons displaying an icon now always show a little divider between the icon and the text. (!620) +- Use attributedTo instead of actor in library ActivityPub payload (#619) +- Use network/depends_on instead of links in docker-compose.yml (!716) + + +Bugfixes: + +- Add missing command from contributing file (#754) +- Add required envvar for dev environment (!668) +- Added env variable to set AWS region and signature version to serve media without proxy (#826) +- Allow users with dots in their usernames to request a subsonic password (#798) +- Better handling of featuring/multi-artist tracks tagged with MusicBrainz (#782) +- Do not consider tracks as duplicates during import if they have different positions (#740) +- Ensure all our ActivityPub fetches are authenticated (#758) +- Ensure correct track duration and playable status when browsing radios (#812) +- Fixed alignment/size issue with some buttons (#702) +- Fixed an encoding issue with instance name on about page (#828) +- Fixed cover not showing in queue/player when playing tracks from "albums" tab (#795) +- Fixed crashing upload processing on invalid date format (#718) +- Fixed dev command for fake data creation (!664) +- Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824) +- Fixed invalid required fields in Upload django's admin (#819) +- Fixed issue with querying the albums api endpoint (#356) +- Fixed non-transparent background for volume range on Firefox (#722) +- Fixed overflowing input on account detail page (#791) +- Fixed unplayable radios for anonymous users (#563) +- Prevent skipping on file import if album_mbid is different (#772) +- Use proper site name/domain in emails (#806) +- Width of filter menus for radios has been set to stop text from overlapping the borders + + +Documentation: + +- Document how to use Redis over unix sockets (#770) + +Contributors to this release (committers and translators): + +- Ale London +- Alexander +- Ben Finney +- ButterflyOfFire +- CiarĆ”n Ainsworth +- Damien Nicolas +- Daniele Lira Mereb +- Agate +- Elza Gelez +- gerry_the_hat +- gordon +- interfect +- jake +- Jee +- jovuit +- MĆ©lanie Chauvel +- nouts +- Pierrick +- Qasim Ali +- QuentĆ­ +- Renon +- Rodrigo Leite +- Sylke Vicious +- Thomas Brockmƶller +- Tixie +- Vierkantor +- Von +- Zach Halasz + +0.18.3 (2019-03-21) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + + +Avoid mixed content when deploying mono-container behind proxy [Manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +*You are only concerned if you use the mono-container docker deployment behind a reverse proxy* + +Because of `an issue in our mono-container configuration <https://github.com/thetarkus/docker-funkwhale/issues/19>`_, users deploying Funkwhale via docker +using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) +when browsing the Web UI. + +This is fixed in this release, but on existing deployments, you'll need to add ``NESTED_PROXY=1`` in your container +environment (either in your ``.env`` file, or via your container management tool), then recreate your funkwhale container. + + +Enhancements: + +- Added title on hover for truncated content (#766) +- Ask for confirmation before leaving upload page if there is a an upload in process (#630) +- Exclude in-place imported files from quota computation (#570) +- Truncate filename in library file table to ensure correct display of the table. (#735) + + +Bugfixes: + +- Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19) +- Display new notifications immediately on notifications page (#729) +- Ensure cover art from uploaded files is picked up properly on existing albums (#757) +- Fixed a crash when federating a track with unspecified position +- Fixed broken Activity and Actor modules in django admin (#767) +- Fixed broken sample apache configuration (#764) +- Fixed constant and unpredictable reordering during file upload (#716) +- Fixed delivering of local activities causing unintended side effects, such as rollbacking changes (#737) +- Fixed escaping issues in translated strings (#652) +- Fixed saving moderation policy when clicking on "Cancel" (#751) +- i18n: Update page title when changing the App's language. (#511) +- Include disc number in Subsonic responses (#765) +- Do not send notification when rejecting a follow on a local library (#743) + + +Documentation: + +- Added documentation on mono-container docker upgrade (#713) +- Added documentation to set up let's encrypt certificate (#745) + + +0.18.2 (2019-02-13) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added a 'fix_federation_ids' management command to deal with protocol/domain issues in federation + IDs after deployments (#706) +- Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) + + +Bugfixes: + +- Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) +- Fixed cards display issues on medium/small screens (#707) +- Fixed Embed component name that could lead to issue when developing on OSX (#696) +- Fixed resizing issues for album cards on artist pages (#694) + + +0.18.1 (2019-01-29) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + + +Fix Gzip compression to avoid BREACH exploit [security] [manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In the 0.18 release, we've enabled Gzip compression by default for various +content types, including HTML and JSON. Unfortunately, enabling Gzip compression +on such content types could make BREACH-type exploits possible. + +We've removed the risky content-types from our nginx template files, to ensure new +instances are safe, however, if you already have an instance, you need +to double check that your host nginx virtualhost do not include the following +values for the ``gzip_types`` settings:: + + application/atom+xml + application/json + application/ld+json + application/activity+json + application/manifest+json + application/rss+xml + application/xhtml+xml + application/xml + +For convenience, you can also replace the whole setting with the following snippet:: + + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + +Many thanks to @jibec for the report! + +Fix Apache configuration file for 0.18 [manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens. + +If you are on an Apache setup, you will have to replace the `<Location "/api">` block with the following:: + + <Location "/"> + # similar to nginx 'client_max_body_size 100M;' + LimitRequestBody 104857600 + + ProxyPass ${funkwhale-api}/ + ProxyPassReverse ${funkwhale-api}/ + </Location> + +And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way:: + + ProxyPass "/front" "!" + Alias /front /srv/funkwhale/front/dist + + ProxyPass "/media" "!" + Alias /media /srv/funkwhale/data/media + + ProxyPass "/staticfiles" "!" + Alias /staticfiles /srv/funkwhale/data/static + +In case you are using custom css and theming, you also need to match this block:: + + ProxyPass "/settings.json" "!" + Alias /settings.json /srv/funkwhale/custom/settings.json + + ProxyPass "/custom" "!" + Alias /custom /srv/funkwhale/custom + + +Enhancements: + +- Added name attributes on all inputs to improve UX, especially with password managers (#686) +- Disable makemigrations in production and misleading message when running migrate (#685) +- Display progress during file upload +- Hide pagination when there is only one page of results (#681) +- Include shared/public playlists in Subsonic API responses (#684) +- Use proper locale for date-related/duration strings (#670) + + +Bugfixes: + +- Fix transcoding of in-place imported tracks (#688) +- Fixed celery worker defaulting to development settings instead of production +- Fixed crashing Django admin when loading track detail page (#666) +- Fixed list icon alignment on landing page (#668) +- Fixed overescaping issue in notifications and album page (#676) +- Fixed wrong number of affected elements in bulk action modal (#683) +- Fixed wrong URL in documentation for funkwhale_proxy.conf file when deploying using Docker +- Make Apache configuration file work with 0.18 changes (#667) +- Removed potential BREACH exploit because of Gzip compression (#678) +- Upgraded kombu to fix an incompatibility with redis>=3 + + +Documentation: + +- Added user upload documentation at https://docs.funkwhale.audio/users/upload.html + + +0.18 "Naomi" (2019-01-22) +------------------------- + +This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. +Her positivity, love and support have been incredibly helpful and helped shape the project +as you can enjoy it today. Thank you so much Naomi <3 + +Many thanks to the dozens of people that contributed to this release: translators, developers, +bug hunters, admins and backers. You made it possible! + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html, ensure you also execute the instructions +marked with ``[manual action required]`` and ``[manual action suggested]``. + +See ``Full changelog`` below for an exhaustive list of changes! + +Audio transcoding is back! +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +After removal of our first, buggy transcoding implementation, we're proud to announce +that this feature is back. It is enabled by default, and can be configured/disabled +in your instance settings! + +This feature works in the browser, with federated/non-federated tracks and using Subsonic clients. +Transcoded tracks are generated on the fly, and cached for a configurable amount of time, +to reduce the load on the server. + + +Licensing and copyright information +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale is now able to parse copyright and license data from file and store +this information. Apart from displaying it on each track detail page, +no additional behaviour is currently implemented to use this new data, but this +will change in future releases. + +License and copyright data is also broadcasted over federation. + +License matching is done on the content of the ``License`` tag in the files, +with a fallback on the ``Copyright`` tag. + +Funkwhale will successfully extract licensing data for the following licenses: + +- Creative Commons 0 (Public Domain) +- Creative Commons 1.0 (All declinations) +- Creative Commons 2.0 (All declinations) +- Creative Commons 2.5 (All declinations and countries) +- Creative Commons 3.0 (All declinations and countries) +- Creative Commons 4.0 (All declinations) + +Support for other licenses such as Art Libre or WTFPL will be added in future releases. + + +Instance-level moderation tools +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This release includes a first set of moderation tools that will give more control +to admins about the way their instance federates with other instance and accounts on the network. +Using these tools, it's now possible to: + +- Browse known accounts and domains, and associated data (storage size, software version, etc.) +- Purge data belonging to given accounts and domains +- Block or partially restrict interactions with any account or domain + +All those features are usable using a brand new "moderation" permission, meaning +you can appoint one or multiple moderators to help with this task. + +I'd like to thank all Mastodon contributors, because some of the these tools are heavily +inspired from what's being done in Mastodon. Thank you so much! + + +Iframe widget to embed public tracks and albums [manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale now supports embedding a lightweight audio player on external websites +for album and tracks that are available in public libraries. Important pages, +such as artist, album and track pages also include OpenGraph tags that will +enable previews on compatible apps (like sharing a Funkwhale track link on Mastodon +or Twitter). + +To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have +to modify your nginx configuration when upgrading to keep your instance working. + +**On docker setups**, edit your ``/srv/funkwhale/nginx/funkwhale.template`` and replace +the ``location /api/`` and `location /` blocks by the following snippets:: + + location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; + } + + location /front/ { + alias /frontend/; + } + +The change of configuration will be picked when restarting your nginx container. + +**On non-docker setups**, edit your ``/etc/nginx/sites-available/funkwhale.conf`` file, +and replace the ``location /api/`` and `location /` blocks by the following snippets:: + + + location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; + } + + location /front/ { + alias ${FUNKWHALE_FRONTEND_PATH}/; + } + +Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from your .env file, +which should be ``/srv/funkwhale/front/dist`` by default, then reload your nginx process with +``sudo systemctl reload nginx``. + + +Alternative docker deployment method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, +we're now able to provide an alternative and easier Docker deployment method! + +In contrast with our current, multi-container offer, this method integrates +all Funkwhale processes and services (database, redis, etc.) into a single, easier to deploy container. + +Both methods will coexist in parallel, as each one has pros and cons. You can learn more +about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html! + +Automatically load .env file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +On non-docker deployments, earlier versions required you to source +the config/.env file before launching any Funkwhale command, with ``export $(cat config/.env | grep -v ^# | xargs)`` +This led to more complex and error prone deployment / setup. + +This is not the case anymore, and Funkwhale will automatically load this file if it's available. + + +Delete pre 0.17 federated tracks [manual action suggested] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you were using Funkwhale before the 0.17 release and federated with other instances, +it's possible that you still have some unplayable federated files in the database. + +To purge the database of those entries, you can run the following command: + +On docker setups:: + + docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input + +On non-docker setups:: + + python manage.py script delete_pre_017_federated_uploads --no-input + + +Enable gzip compression [manual action suggested] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Gzip compression will be enabled on new instances by default +and will reduce the amount of bandwidth consumed by your instance. + +If you want to benefit from gzip compression on your instance, +edit your reverse proxy virtualhost file (located at ``/etc/nginx/sites-available/funkwhale.conf``) and add the following snippet +in the server block, then reload your nginx server:: + + server { + # ... exiting configuration + + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings + } + +Full changelog +^^^^^^^^^^^^^^ + +Features: + +- Allow embedding of albums and tracks available in public libraries via an <iframe> (#578) +- Audio transcoding is back! (#272) +- First set of instance level moderation tools (#580, !521) +- Store licensing and copyright information from file metadata, if available (#308) + + +Enhancements: + +- Add UI elements for multi-disc albums (#631) +- Added alternative funkwhale/all-in-one docker image (#614) +- Broadcast library updates (name, description, visibility) over federation +- Based Docker image on alpine to have a smaller (and faster to build) image +- Improved front-end performance by stripping unused dependencies, reducing bundle size + and enabling gzip compression +- Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612) +- The progress bar in the player now display loading state / buffer loading (#586) +- Added "type: funkwhale" and "funkwhale-version" in Subsonic responses (#573) +- Documented keyboard shortcuts, list is now available by pressing "h" or in the footer (#611) +- Documented which Subsonic endpoints are implemented (#575) +- Hide invitation code field during signup when it's not required (#410) +- Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present +- Improved keyboard accessibility on player, queue and various controls (#576) +- Improved performance when listing playable tracks, albums and artists +- Increased default upload limit from 30 to 100MB (#654) +- Load env file in config/.env automatically to avoid sourcing it by hand (#626) +- More resilient date parsing during audio import, will not crash anymore on + invalid dates (#622) +- Now start radios immediately, skipping any existing tracks in queue (#585) +- Officially support connecting to a password protected redis server, with + the redis://:password@localhost:6379/0 scheme (#640) +- Performance improvement when fetching favorites, down to a single, small http request +- Removed "Activity" page, since all the data is available on the "Browse" page (#600) +- Removed the need to specify the DJANGO_ALLOWED_HOSTS variable +- Restructured the footer, added useful links and removed unused content +- Show short entries first in search results to improve UX +- Store disc number and order tracks by disc number / position) (#507) +- Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374) +- Support blind key rotation in HTTP Signatures (#658) +- Support setting a server URL in settings.json (#650) +- Updated default docker postgres version from 9.4 to 11 (#656) +- Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657) +- Improved test suite speed by reducing / disabling expensive operations (#648) + + +Bugfixes: + +- Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469) +- Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643) +- Fix ".None" extension when downloading Flac file (#473) +- Fixed None extension when downloading an in-place imported file (#621) +- Added a script to prune pre 0.17 federated tracks (#564) +- Advertise public libraries properly in ActivityPub representations (#553) +- Allow opus file upload (#598) +- Do not display "view on MusicBrainz" button if we miss the mbid (#422) +- Do not try to create unaccent extension if it's already present (#663) +- Ensure admin links in sidebar are displayed for users with relevant permissions, and only them (#597) +- Fix broken websocket connection under Chrome browser (#589) +- Fix play button not starting playback with empty queue (#632) +- Fixed a styling inconsistency on about page when instance description was missing (#659) +- Fixed a UI discrepancy in playlist tracks count (#647) +- Fixed greyed tracks in radio builder and detail page (#637) +- Fixed inconsistencies in subsonic error responses (#616) +- Fixed incorrect icon for "next track" in player control (#613) +- Fixed malformed search string when redirecting to LyricsWiki (#608) +- Fixed missing track count on various library cards (#581) +- Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209) +- Fixed wrong album/track count on artist page (#599) +- Hide unplayable/empty playlists in "Browse playlist" pages (#424) +- Initial UI render using correct language from browser (#644) +- Invalid URI for reverse proxy websocket with apache (#617) +- Properly encode Wikipedia and lyrics search urls (#470) +- Refresh profile after user settings update to avoid cache issues (#606) +- Use role=button instead of empty links for player controls (#610) + + +Documentation: + +- Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642) +- Document how to find and use library id when importing files in CLI (#562) +- Fix documentation typos (#645) + + +0.17 (2018-10-07) +----------------- + +Per user libraries +^^^^^^^^^^^^^^^^^^ + +This release contains a big change in music management. This has a lot of impact +on how Funkwhale behaves, and you should have a look at +https://docs.funkwhale.audio/upgrading/0.17.html for information +about what changed and how to migrate. + + +Features: + +- Per user libraries (#463, also fixes #160 and #147) +- Authentication using a LDAP directory (#194) + + +Enhancements: + +- Add configuration option to set Musicbrainz hostname +- Add sign up link in the sidebar (#408) +- Added a library widget to display libraries associated with a track, album + and artist (#551) +- Ensure from_activity field is not required in django's admin (#546) +- Move setting link from profile page to the sidebar (#406) +- Simplified and less error-prone nginx setup (#358) + +Bugfixes: + +- Do not restart current song when rordering queue, deleting tracks from queue + or adding tracks to queue (#464) +- Fix broken icons in playlist editor (#515) +- Fixed a few untranslated strings (#559) +- Fixed split album when importing from federation (#346) +- Fixed toggle mute in volume bar does not restore previous volume level (#514) +- Fixed wrong env file URL and display bugs in deployment documentation (#520) +- Fixed wrong title in PlayButton (#435) +- Remove transparency on artist page button (#517) +- Set sane width default for ui cards and center play button (#530) +- Updated wrong icon and copy in play button dropdown (#436) + + +Documentation: + +- Fixed wrong URLs for docker / nginx files in documentation (#537) + + +Other: + +- Added a merge request template and more documentation about the changelog + + +Using a LDAP directory to authenticate to your Funkwhale instance +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale now support LDAP as an authentication source: you can configure +your instance to delegate login to a LDAP directory, which is especially +useful when you have an existing directory and don't want to manage users +manually. + +You can use this authentication backend side by side with the classic one. + +Have a look at https://docs.funkwhale.audio/installation/ldap.html +for detailed instructions on how to set this up. + + +Simplified nginx setup [Docker: Manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We've received a lot of user feedback regarding our installation process, +and it seems the proxy part is the one which is the most confusing and difficult. +Unfortunately, this is also the one where errors and mistakes can completely break +the application. + +To make things easier for everyone, we now offer a simplified deployment +process for the reverse proxy part. This will make upgrade of the proxy configuration +significantly easier on docker deployments. + +On non-docker instances, you have nothing to do. + +If you have a dockerized instance, here is the upgrade path. + +First, tweak your .env file:: + + # remove the FUNKWHALE_URL variable + # and add the next variables + FUNKWHALE_HOSTNAME=yourdomain.funkwhale + FUNKWHALE_PROTOCOL=https + + # add the following variable, matching the path your app is deployed + # leaving the default should work fine if you deployed using the same + # paths as the documentation + FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist + +Then, add the following block at the end of your docker-compose.yml file:: + + # existing services + api: + ... + celeryworker: + ... + + # new service + nginx: + image: nginx + env_file: + - .env + environment: + # Override those variables in your .env file if needed + - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" + volumes: + - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" + - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" + - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" + - "${STATIC_ROOT}:${STATIC_ROOT}:ro" + - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" + ports: + # override those variables in your .env file if needed + - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" + command: > + sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" + < /etc/nginx/conf.d/funkwhale.template + > /etc/nginx/conf.d/default.conf + && cat /etc/nginx/conf.d/default.conf + && nginx -g 'daemon off;'" + links: + - api + +By doing that, you'll enable a dockerized nginx that will automatically be +configured to serve your Funkwhale instance. + +Download the required configuration files for the nginx container: + +.. parsed-literal:: + + cd /srv/funkwhale + mkdir nginx + curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" + curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" + +Update the funkwhale.conf configuration of your server's reverse-proxy:: + + # the file should match something like that, upgrade all variables + # between ${} to match the ones in your .env file, + # and your SSL configuration if you're not using let's encrypt + # The important thing is that you only have a single location block + # that proxies everything to your dockerized nginx. + + sudo nano /etc/nginx/sites-enabled/funkwhale.conf + upstream fw { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; + } + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + listen 80; + listen [::]:80; + server_name ${FUNKWHALE_HOSTNAME}; + location / { return 301 https://$host$request_uri; } + } + server { + listen 443 ssl; + listen [::]:443 ssl; + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + + location / { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://fw/; + } + } + +Check that your configuration is valid then reload: + + sudo nginx -t + sudo systemctl reload nginx + + +0.16.3 (2018-08-21) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Bugfixes: + +- Fixed front-end not contacting the proper path on the API (!385) + + +0.16.2 (2018-08-21) +------------------- + +.. warning:: + + **This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** + + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Bugfixes: + +- Ensure we always have a default api url set on first load to avoid displaying + the instance picker (#490) +- Fixed CLI importer syntax error because of async reserved keyword usage + (#494) + + +0.16.1 (2018-08-19) +------------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Make funkwhale themable by loading external stylesheets (#456) + +Enhancements: + +- Add link to admin on "Staff member" button (#202) +- Can now add a description to radios and better radio cards (#331) +- Display track duration in track tables (#461) +- More permissive default permissions for front-end files (#388) +- Simpler configuration and toolchain for the front-end using vue-cli (!375) +- Use Howler to manage audio instead of our own dirty/untested code (#392) + + +Bugfixes: + +- Fix alignment issue on top bar in Admin tabs (#395) +- Fix Apache2 permission issue preventing `/media` folder from being served + correctly (#389) +- Fix loading on browse page lists causing them to go down, and dimming over + the top bar (#468) +- Fixed (again): administration section not showing up in sidebar after login + (#245) +- Fixed audio mimetype not showing up on track detail and list (#459) +- Fixed broken audio playback on Chrome and invisible volume control (#390) +- Fixed broken federation import on big imports due to missing transaction + logic (#397) +- Fixed crash on artist pages when no cover is available (#457) +- Fixed favorited status of tracks not appearing in interface (#398) +- Fixed invitation code not prefilled in form when accessing invitation link + (#476) +- Fixed typos in scheduled tasks configuration (#487) +- Removed release date error in case of empty date (#478) +- Removed white on white artist button on hover, on Album page (#393) +- Smarter date parsing during import by replacing arrow with pendulum (#376) +- Display public playlists properly for anonymous users (#488) + + +i18n: + +- Added portuguese, spanish and german translations + + +Custom themes for Funkwhale +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you ever wanted to give a custom look and feel to your instance, this is now possible. + +Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more! + + +Fix Apache2 configuration file for media block [Manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served. + +On Apache2 setups, you have to replace the following line:: + + <Directory /srv/funkwhale/data/media/albums> + +with:: + + <Directory /srv/funkwhale/data/media> + +You can now restart your server:: + + sudo systemctl restart apache2 + + +0.16 (2018-07-22) +----------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Complete redesign of the library home and playlist pages (#284) +- Expose ActivityPub actors for users (#317) +- Implemented a basic but functional Github-like search on federated tracks + list (#344) +- Internationalized interface as well as translations for Arabic, French, + Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167) +- Users can now upload an avatar in their settings page (#257) + + +Enhancements: + +- Added feedback when creating/updating radio (#302) +- Apply restrictions to username characters during signup +- Autoselect best language based on browser configuration (#386) +- Can now order tracks on federated track list (#326) +- Can now relaunch pending import jobs from the web interface (#323) +- Ensure we do not display pagination on single pages (#334) +- Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and + MUSIC_DIRECTORY_PATH in the deployment .env file (#350) +- Make some space for the volume slider to allow precise control (#318) +- Removed django-cacheops dependency +- Store track artist and album artist separately (#237) Better handling of + tracks with a different artist than the album artist +- The navigation bar of Library is now fixed (#375) +- Use thumbnails for avatars and covers to reduce bandwidth + + +Bugfixes: + +- Ensure 750 permissions on CI artifacts (#332) +- Ensure images are not cropped in queue (#337) +- Ensure we do not import artists with empty names (#351) +- Fix notifications not closing when clicking on the cross (#366) +- Fix the most annoying offset in the whole fediverse (#369) +- Fixed persistent message in playlist modal (#304) +- Fixed unfiltered results in favorites API (#384) +- Raise a warning instead of crashing when getting a broken path in file import + (#138) +- Remove parallelization of uploads during import to avoid crashing small + servers (#382) +- Subsonic API login is now case insensitive (#339) +- Validate Date header in HTTP Signatures (#328) + + +Documentation: + +- Added troubleshotting and technical overview documentation (#256) +- Arch Linux installation steps +- Document that users can use Ultrasonic on Android (#316) +- Fixed a couple of typos +- Some cosmetic improvements to the doc + + +i18n: + +- Arabic translation (!302) +- Polish translation (!304) + + +Library home and playlist page overhaul +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The library home page have been completely redesigned to include: + +- other users activity (listenings, playlists and favorites) +- recently imported albums + +We think this new version showcases more music in a more useful way, let us know +what you think about it! + +The playlist page have been updated as well. + + +Internationalized interface +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +After months of work, we're proud to announce our interface is now ready +for internationalization. + +Translators have already started the work of translating Funkwhale in 8 different languages, +and we're ready to add more as needed. + +You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/ + + +Better handling of tracks with a different artist than the album artist +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Some tracks involve a different artist than the album artist (e.g. a featuring) +and Funkwhale has been known to do weird things when importing such tracks, resulting +in albums that contained a single track, for instance. + +The situation should be improved with this release, as Funkwhale is now able to +store separately the track and album artist, and display it properly in the interface. + + +Users now have an ActivityPub Actor [Manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In the process of implementing federation for user activity such as listening +history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation. + +This does not means the federation is working, but this is a needed step to implement it. + +Those profiles will be created automatically for new users, but you have to run a command +to create them for existing users. + +On docker setups:: + + docker-compose run --rm api python manage.py script create_actors --no-input + +On non-docker setups:: + + python manage.py script create_actors --no-input + +This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times. + + +Image thumbnails [Manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To reduce bandwidth usage on slow or limited connexions and improve performance +in general, we now use smaller images in the front-end. For instance, if you have +an album cover with a 1000x1000 pixel size, we will create smaller +versions of this image (50x50, 200x200, 400x400) and reference those resized version +when we don't actually need the original image. + +Thumbnail will be created automatically for new objects, however, you have +to launch a manual command to deal with existing ones. + +On docker setups:: + + docker-compose run --rm api python manage.py script create_image_variations --no-input + +On non-docker setups:: + + python manage.py script create_image_variations --no-input + +This should be quite fast but may take up to a few minutes depending on the number +of albums you have in database. It is safe to interrupt the process or rerun it multiple times. + + +Improved search on federated tracks list +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Having a powerful but easy-to-use search is important but difficult to achieve, especially +if you do not want to have a real complex search interface. + +Github does a pretty good job with that, using a structured but simple query system +(See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests). + +This release implements a limited but working subset of this query system. You can use it only on the federated +tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well. + +This is the type of query you can run: + +- ``hello world``: search for "hello" and "world" in all the available fields +- ``hello in:artist`` search for results where artist name is "hello" +- ``spring in:artist,album`` search for results where artist name or album title contain "spring" +- ``artist:hello`` search for results where artist name equals "hello" +- ``artist:"System of a Down" domain:instance.funkwhale`` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library + + +Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly [Manual action required] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing +some deployment issues on non-docker setups when people forgot to uncomment them. + +From now on, those variables are uncommented, and will also be used on docker setups +to mount the volumes automatically in the docker-compose.yml file. This has been a source +of headache as well in some deployments, where you had to update both the .env file and +the compose file. + +This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH), +whose values are now used directly to set up the proper Docker volumes. + +This will only affect new deployments though. If you want to benefit from this on an +existing instance, do a backup of your ``.env`` and ``docker-compose.yml`` files and apply the following changes: + +- Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the absolute path where media files are stored + on your host (``/srv/funkwhale/data/media`` by default) +- Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the absolute path where static files are stored + on your host (``/srv/funkwhale/data/static`` by default) +- If you use in-place import: + - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music`` + - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files + are stored (``/srv/funkwhale/data/music`` by default) +- Edit your docker-compose.yml file to reflect the changes: + - Search for volumes (there should be two occurrences) that contains ``/app/funkwhale_api/media`` on the right side, and + replace the whole line with ``- "${MEDIA_ROOT}:${MEDIA_ROOT}"`` + - Search for a volume that contains ``/app/staticfiles`` on the right side, and + replace the whole line with ``- "${STATIC_ROOT}:${STATIC_ROOT}"`` + - If you use in-place import, search for volumes (there should be two occurrences) that contains ``/music:ro`` on the right side, and + replace the whole line with ``- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"`` + +In the end, the ``volumes`` directives of your containers should look like that:: + + ... + celeryworker + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + ... + api: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + - "${STATIC_ROOT}:${STATIC_ROOT}" + - ./front/dist:/frontend + ... + + +Removed Cacheops dependency +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We removed one of our dependency named django-cacheops. It was unly used in a few places, +and not playing nice with other dependencies. + +You can safely remove this dependency in your environment with ``pip uninstall django-cacheops`` if you're +not using docker. + +You can also safely remove any ``CACHEOPS_ENABLED`` setting from your environment file. + + +0.15 (2018-06-24) +----------------- + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Added admin interface to manage import requests (#190) +- Added replace flag during import to replace already present tracks with a new + version of their track file (#222) +- Funkwhale's front-end can now point to any instance (#327) Removed front-end + and back-end coupling +- Management interface for users (#212) +- New invite system (#248) New invite system + + +Enhancements: + +- Added "TV" to the list of highlighted words during YouTube import (#154) +- Command line import now accepts unlimited args (#242) + + +Bugfixes: + +- Expose track files date in manage API (#307) +- Fixed current track restart/hiccup when shuffling queue, deleting track from + queue or reordering (#310) +- Include user's current private playlists on playlist list (#302) +- Remove link to generic radios, since they don't have detail pages (#324) + + +Documentation: + +- Document that Funkwhale may be installed with YunoHost (#325) +- Documented a saner layout with symlinks for in-place imports (#254) +- Upgrade documentation now use the correct user on non-docker setups (#265) + + +Invite system +^^^^^^^^^^^^^ + +On closed instances, it has always been a little bit painful to create accounts +by hand for new users. This release solve that by adding invitations. + +You can generate invitation codes via the "users" admin interface (you'll find a +link in the sidebar). Those codes are valid for 14 days, and can be used once +to create a new account on the instance, even if registrations are closed. + +By default, we generate a random code for invitations, but you can also use custom codes +if you need to print them or make them fancier ;) + +Invitations generation and management requires the "settings" permission. + + +Removed front-end and back-end coupling +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Even though Funkwhale's front-end has always been a Single Page Application, +talking to an API, it was only able to talk to an API on the same domain. + +There was no real technical justification behind this (only laziness), and it was +also blocking interesting use cases: + +- Use multiple customized versions of the front-end with the same instance +- Use a customized version of the front-end with multiple instances +- Use a locally hosted front-end with a remote API, which is especially useful in development + +From now on, Funkwhale's front-end can connect to any Funkwhale server. You can +change the server you are connecting to in the footer. + +Fixing this also unlocked a really interesting feature in our development/review workflow: +by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of +a merge request, making it possible for anyone to review front-end changes easily, without +the need to install a local environment. + + +0.14.2 (2018-06-16) +------------------- + +.. warning:: + + This release contains a fix for a permission issue. You should upgrade + as soon as possible. Read the changelog below for more details. + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Enhancements: + +- Added feedback on shuffle button (#262) +- Added multiple warnings in the documentation that you should never run + makemigrations yourself (#291) +- Album cover served in http (#264) +- Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25) + (!252) +- Display file size in human format during file upload (#289) +- Switch from BSD-3 licence to AGPL-3 licence (#280) + +Bugfixes: + +- Ensure radios can only be edited and deleted by their owners (#311) +- Fixed admin menu not showing after login (#245) +- Fixed broken pagination in Subsonic API (#295) +- Fixed duplicated websocket connection on timeline (#287) + + +Documentation: + +- Improved documentation about in-place imports setup (#298) + + +Other: + +- Added Black and flake8 checks in CI to ensure consistent code styling and + formatting (#297) +- Added bug and feature issue templates (#299) + + +Permission issues on radios +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Because of an error in the way we checked user permissions on radios, +public radios could be deleted by any logged-in user, even if they were not +the owner of the radio. + +We recommend instances owners to upgrade as fast as possible to avoid any abuse +and data loss. + + +Funkwhale is now licenced under AGPL-3 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Following the recent switch made by PixelFed +(https://github.com/dansup/pixelfed/issues/143), we decided along with +the community to relicence Funkwhale under the AGPL-3 licence. We did this +switch for various reasons: + +- This is better aligned with other fediverse software +- It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale + +As end users and instance owners, this does not change anything. You can +continue to use Funkwhale exactly as you did before :) + + +Apache support for websocket +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Up until now, our Apache2 configuration was not working with websockets. This is now +solved by adding this at the beginning of your Apache2 configuration file:: + + Define funkwhale-api-ws ws://localhost:5000 + +And this, before the "/api" block:: + + # Activating WebSockets + ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity + +Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available. + + +Serving album covers in https (Apache2 proxy) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Two issues are addressed here. The first one was about Django replying with +mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` +allows Django to know that the client is using https, and that the reply must +be https as well. + +Second issue was a problem of permission causing Apache a denied access to +album cover folder. It is solved by adding another block for this path in +the Apache configuration file for funkwhale. + +Here is how to modify your `funkwhale.conf` apache2 configuration:: + + <VirtualHost *:443> + + ... + #Add this new line + RequestHeader set X-Forwarded-Proto "https" + ... + # Add this new block below the other <Directory/> blocks + # replace /srv/funkwhale/data/media with the path to your media directory + # if you're not using the standard layout. + <Directory /srv/funkwhale/data/media/albums> + Options FollowSymLinks + AllowOverride None + Require all granted + </Directory> + ... + </VirtualHost> + + +About the makemigrations warning +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You may sometimes get the following warning while applying migrations:: + + "Your models have changes that are not yet reflected in a migration, and so won't be applied." + +This is a warning, not an error, and it can be safely ignored. +Never run the ``makemigrations`` command yourself. + + +0.14.1 (2018-06-06) +------------------- + +Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html + +Enhancements: + +- Display server version in the footer (#270) +- fix_track_files will now update files with bad mimetype (and not only the one + with no mimetype) (#273) +- Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz + (#288) +- Removed alpha-state transcoding support (#271) + +Bugfixes: + +- Broken logging statement during import error (#274) +- Broken search bar on library home (#278) +- Do not crash when importing track with an artist that do not match the + release artist (#237) +- Do not crash when tag contains multiple uuids with a / separator (#267) +- Ensure we do not store bad mimetypes (such as application/x-empty) (#266) +- Fix broken "play all" button that played only 25 tracks (#281) +- Fixed broken track download modal (overflow and wrong URL) (#239) +- Removed hardcoded size limit in file upload widget (#275) + + +Documentation: + +- Added warning about _protected/music location in nginx configuration (#247) + + +Removed alpha-state transcoding (#271) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A few months ago, a basic transcoding feature was implemented. Due to the way +this feature was designed, it was slow, CPU intensive on the server side, +and very tightly coupled to the reverse-proxy configuration, preventing +it to work Apache2, for instance. It was also not compatible with Subsonic clients. + +Based on that, we're currently removing support for transcoding +**in its current state**. The work on a better designed transcoding feature +can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272. + +You don't have to do anything on your side, but you may want to remove +the now obsolete configuration from your reverse proxy file (nginx only):: + + # Remove those blocks: + + # transcode cache + proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; + + # Transcoding logic and caching + location = /transcode-auth { + include /etc/nginx/funkwhale_proxy.conf; + # needed so we can authenticate transcode requests, but still + # cache the result + internal; + set $query ''; + # ensure we actually pass the jwt to the underlytin auth url + if ($request_uri ~* "[^\?]+\?(.*)$") { + set $query $1; + } + proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + } + + location /api/v1/trackfiles/transcode/ { + include /etc/nginx/funkwhale_proxy.conf; + # this block deals with authenticating and caching transcoding + # requests. Caching is heavily recommended as transcoding + # is a CPU intensive process. + auth_request /transcode-auth; + if ($args ~ (.*)jwt=[^&]*(.*)) { + set $cleaned_args $1$2; + } + proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; + proxy_cache transcode; + proxy_cache_valid 200 7d; + proxy_ignore_headers "Set-Cookie"; + proxy_hide_header "Set-Cookie"; + add_header X-Cache-Status $upstream_cache_status; + proxy_pass http://funkwhale-api; + } + # end of transcoding logic + + +0.14 (2018-06-02) +----------------- + +Upgrade instructions are available at + https://docs.funkwhale.audio/upgrading.html + +Features: + +- Admins can now configure default permissions that will be granted to all + registered users (#236) +- Files management interface for users with "library" permission (#223) +- New action table component for quick and efficient batch actions (#228) This + is implemented on the federated tracks pages, but will be included in other + pages as well depending on the feedback. + + +Enhancements: + +- Added a new "upload" permission that allows user to launch import and view + their own imports (#230) +- Added Support for OggTheora in import. +- Autoremove media files on model instance deletion (#241) +- Can now import a whole remote library at once thanks to new Action Table + component (#164) +- Can now use album covers from flac/mp3 metadata and separate file in track + directory (#219) +- Implemented getCovertArt in Subsonic API to serve album covers (#258) +- Implemented scrobble endpoint of subsonic API, listenings are now tracked + correctly from third party apps that use this endpoint (#260) +- Retructured music API to increase performance and remove useless endpoints + (#224) + + +Bugfixes: + +- Consistent constraints/checks for URL size (#207) +- Display proper total number of tracks on radio detail (#225) +- Do not crash on flac import if musicbrainz tags are missing (#214) +- Empty save button in radio builder (#226) +- Ensure anonymous users can use the app if the instance is configured + accordingly (#229) +- Ensure inactive users cannot get auth tokens (#218) This was already the case + bug we missed some checks +- File-upload import now supports Flac files (#213) +- File-upload importer should now work properly, assuming files are tagged + (#106) +- Fixed a few broken translations strings (#227) +- Fixed broken ordering in front-end lists (#179) +- Fixed ignored page_size parameter on artist and favorites list (#240) +- Read ID3Tag Tracknumber from TRCK (#220) +- We now fetch album covers regardless of the import methods (#231) + +Documentation: + +- Added missing subsonic configuration block in deployment vhost files (#249) +- Moved upgrade doc under install doc in TOC (#251) + + +Other: + +- Removed acoustid support, as the integration was buggy and error-prone (#106) + + +Files management interface +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This is the first bit of an ongoing work that will span several releases, to +bring more powerful library management features to Funkwhale. This iteration +includes a basic file management interface where users with the "library" +permission can list and search available files, order them using +various criteria (size, bitrate, duration...) and delete them. + +New "upload" permission +^^^^^^^^^^^^^^^^^^^^^^^ + +This new permission is helpful if you want to give upload/import rights +to some users, but don't want them to be able to manage the library as a whole: +although there are no controls yet for managing library in the fron-end, +subsequent release will introduce management interfaces for artists, files, +etc. + +Because of that, users with the "library" permission will have much more power, +and will also be able to remove content from the platform. On the other hand, +users with the "upload" permission will only have the ability to add new +content. + +Also, this release also includes a new feature called "default permissions": +those are permissions that are granted to every users on the platform. +On public/open instances, this will play well with the "upload" permission +since everyone will be able to contribute to the instance library without +an admin giving the permission to every single user. + +Smarter album cover importer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In earlier versions, covers where only imported when launching a YouTube import. +Starting from this release, covers will be imported regardless of the import mode +(file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers +in the following order: + +1. In the imported file itself (FLAC/MP3 only) +2. In a cover.jpg or cover.png in the file directory +3. By fetching cover art from Musibrainz, assuming the file is tagged correctly + +This will only work for newly imported tracks and albums though. In the future, +we may offer an option to refetch album covers from the interface, but in the +meantime, you can use the following snippet: + +.. code-block:: python + + # Store this in /tmp/update_albums.py + from funkwhale_api.music.models import Album, TrackFile + from funkwhale_api.music.tasks import update_album_cover + + albums_without_covers = Album.objects.filter(cover='') + total = albums_without_covers.count() + print('Found {} albums without cover'.format(total)) + for i, album in enumerate(albums_without_covers.iterator()): + print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) + f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() + update_album_cover(album, track_file=f) + +Then launch it:: + + # docker setups + cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python + + # non-docker setups + source /srv/funkwhale/load_env + source /srv/funkwhale/virtualenv/bin/activate + cat /tmp/update_albums.py | python manage.py shell -i python + + # cleanup + rm /tmp/update_albums.py + +.. note:: + + Depending on your number of albums, the previous snippet may take some time + to execute. You can interrupt it at any time using ctrl-c and relaunch it later, + as it's idempotent. + +Music API changes +^^^^^^^^^^^^^^^^^ + +This release includes an API break. Even though the API is advertised +as unstable, and not documented, here is a brief explanation of the change in +case you are using the API in a client or in a script. Summary of the changes: + +- ``/api/v1/artists`` does not includes a list of tracks anymore. It was to heavy + to return all of this data all the time. You can get all tracks for an + artist using ``/api/v1/tracks?artist=artist_id`` +- Additionally, ``/api/v1/tracks`` now support an ``album`` filter to filter + tracks matching an album +- ``/api/v1/artists/search``, ``/api/v1/albums/search`` and ``/api/v1/tracks/search`` + endpoints are removed. Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` + instead. It's also more powerful, since you can combine search with other + filters and ordering options. +- ``/api/v1/requests/import-requests/search`` endpoint is removed as well. + Use ``/api/v1/requests/import-requests/?q=yourquery`` + instead. It's also more powerful, since you can combine search with other + filters and ordering options. + +Of course, the front-end was updated to work with the new API, so this should +not impact end-users in any way, apart from slight performance gains. + +.. note:: + + The API is still not stable and may evolve again in the future. API freeze + will come at a later point. + +Flac files imports via upload +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You have nothing to do to benefit from this, however, since Flac files +tend to be a lot bigger than other files, you may want to increase the +``client_max_body_size`` value in your Nginx configuration if you plan +to upload flac files. + +Missing subsonic configuration block in vhost files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Because of a missing block in the sample Nginx and Apache configurations, +instances that were deployed after the 0.13 release are likely to be unable +to answer to Subsonic clients (the missing bits were properly documented +in the changelog). + +Ensure you have the following snippets in your Nginx or Apache configuration +if you plan to use the Subsonic API. + +Nginx:: + + location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; + } + +Apache2:: + + <Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + </Location> + + +0.13 (2018-05-19) +----------------- + +Upgrade instructions are available at + https://docs.funkwhale.audio/upgrading.html + +Features: + +- Can now import and play flac files (#157) +- Simpler permission system (#152) +- Store file length, size and bitrate (#195) +- We now have a brand new instance settings interface in the front-end (#206) + + +Enhancements: + +- Disabled browsable HTML API in production (#205) +- Instances can now indicate on the nodeinfo endpoint if they want to remain + private (#200) + + +Bugfixes: + +- .well-known/nodeinfo endpoint can now answer to request with Accept: + application/json (#197) +- Fixed escaping issue of track name in playlist modal (#201) +- Fixed missing dot when downloading file (#204) +- In-place imported tracks with non-ascii characters don't break reverse-proxy + serving (#196) +- Removed Python 3.6 dependency (secrets module) (#198) +- Uplayable tracks are now properly disabled in the interface (#199) + + +Instance settings interface +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Prior to this release, the only way to update instance settings (such as +instance description, signup policy, federation configuration, etc.) was using +the admin interface provided by Django (the back-end framework which power the API). + +This interface worked, but was not really-user friendly and intuitive. + +Starting from this release, we now offer a dedicated interface directly +in the front-end. You can view and edit all your instance settings from here, +assuming you have the required permissions. + +This interface is available at ``/manage/settings`` and via link in the sidebar. + + +Storage of bitrate, size and length in database +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Starting with this release, when importing files, Funkwhale will store +additional information about audio files: + +- Bitrate +- Size (in bytes) +- Duration + +This change is not retroactive, meaning already imported files will lack those +information. The interface and API should work as before in such case, however, +we offer a command to deal with legacy files and populate the missing values. + +On docker setups: + +.. code-block:: shell + + docker-compose run --rm api python manage.py fix_track_files + + +On non-docker setups: + +.. code-block:: shell + + # from your activated virtualenv + python manage.py fix_track_files + +.. note:: + + The execution time for this command is proportional to the number of + audio files stored on your instance. This is because we need to read the + files from disk to fetch the data. You can run it in the background + while Funkwhale is up. + + It's also safe to interrupt this command and rerun it at a later point, or run + it multiple times. + + Use the --dry-run flag to check how many files would be impacted. + + +Simpler permission system +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Starting from this release, the permission system is much simpler. Up until now, +we were using Django's built-in permission system, which was working, but also +quite complex to deal with. + +The new implementation relies on simpler logic, which will make integration +on the front-end in upcoming releases faster and easier. + +If you have manually given permissions to users on your instance, +you can migrate those to the new system. + +On docker setups: + +.. code-block:: shell + + docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input + +On non-docker setups: + +.. code-block:: shell + + # in your virtualenv + python api/manage.py script django_permissions_to_user_permissions --no-input + +There is still no dedicated interface to manage user permissions, but you +can use the admin interface at ``/api/admin/users/user/`` for that purpose in +the meantime. + + +0.12 (2018-05-09) +----------------- + +Upgrade instructions are available at + https://docs.funkwhale.audio/upgrading.html + +Features: + +- Subsonic API implementation to offer compatibility with existing clients such + as DSub (#75) +- Use nodeinfo standard for publishing instance information (#192) + + +Enhancements: + +- Play button now play tracks immediately instead of appending them to the + queue (#99, #156) + + +Bugfixes: + +- Fix broken federated import (#193) + + +Documentation: + +- Up-to-date documentation for upgrading front-end files on docker setup (#132) + + +Subsonic API +^^^^^^^^^^^^ + +This release implements some core parts of the Subsonic API, which is widely +deployed in various projects and supported by numerous clients. + +By offering this API in Funkwhale, we make it possible to access the instance +library and listen to the music without from existing Subsonic clients, and +without developing our own alternative clients for each and every platform. + +Most advanced Subsonic clients support offline caching of music files, +playlist management and search, which makes them well-suited for nomadic use. + +Please see `our list of supported apps <https://funkwhale.audio/en_US/apps>`_ +for more information about supported clients and user instructions. + +At the instance-level, the Subsonic API is enabled by default, but require +and additional endpoint to be added in you reverse-proxy configuration. + +On nginx, add the following block:: + + location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; + } + +On Apache, add the following block:: + + <Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + </Location> + +The Subsonic can be disabled at the instance level from the django admin. + +.. note:: + + Because of Subsonic's API design which assumes cleartext storing of + user passwords, we chose to have a dedicated, separate password + for that purpose. Users can generate this password from their + settings page in the web client. + + +Nodeinfo standard for instance information and stats +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. warning:: + + The ``/api/v1/instance/stats/`` endpoint which was used to display + instance data in the about page is removed in favor of the new + ``/api/v1/instance/nodeinfo/2.0/`` endpoint. + +In earlier version, we where using a custom endpoint and format for +our instance information and statistics. While this was working, +this was not compatible with anything else on the fediverse. + +We now offer a nodeinfo 2.0 endpoint which provides, in a single place, +all the instance information such as library and user activity statistics, +public instance settings (description, registration and federation status, etc.). + +We offer two settings to manage nodeinfo in your Funkwhale instance: + +1. One setting to completely disable nodeinfo, but this is not recommended + as the exposed data may be needed to make some parts of the front-end + work (especially the about page). +2. One setting to disable only usage and library statistics in the nodeinfo + endpoint. This is useful if you want the nodeinfo endpoint to work, + but don't feel comfortable sharing aggregated statistics about your library + and user activity. + +To make your instance fully compatible with the nodeinfo protocol, you need to +to edit your nginx configuration file:: + + # before + ... + location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; + } + ... + + # after + ... + location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/; + } + ... + +You can do the same if you use apache:: + + # before + ... + <Location "/.well-known/webfinger"> + ProxyPass ${funkwhale-api}/.well-known/webfinger + ProxyPassReverse ${funkwhale-api}/.well-known/webfinger + </Location> + ... + + # after + ... + <Location "/.well-known/"> + ProxyPass ${funkwhale-api}/.well-known/ + ProxyPassReverse ${funkwhale-api}/.well-known/ + </Location> + ... + +This will ensure all well-known endpoints are proxied to funkwhale, and +not just webfinger one. + +Links: + +- About nodeinfo: https://github.com/jhass/nodeinfo + + +0.11 (2018-05-06) +----------------- + +Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html + +Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab) +for bringing Apache2 support to Funkwhale and contributing on other issues. +Thank you! + +Features: + +- Funkwhale now works behind an Apache2 reverse proxy (!165) + check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2 + if you want to try it! +- Users can now request password reset by email, assuming a SMTP server was + correctly configured (#187) + +Enhancements: + +- Added a fix_track_files command to run checks and fixes against library + (#183) +- Avoid fetching Actor object on every request authentication +- Can now relaunch errored jobs and batches (#176) +- List pending requests by default, added a status filter for requests (#109) +- More structured menus in sidebar, added labels with notifications +- Sample virtual-host file for Apache2 reverse-proxy (!165) +- Store high-level settings (such as federation or auth-related ones) in + database (#186) + + +Bugfixes: + +- Ensure in place imported files get a proper mimetype (#183) +- Federation cache suppression is now simpler and also deletes orphaned files + (#189) +- Fixed small UI glitches/bugs in federation tabs (#184) +- X-sendfile not working with in place import (#182) + + +Documentation: + +- Added a documentation area for third-party projects (#180) +- Added documentation for optimizing Funkwhale and reduce its memory footprint. +- Document that the database should use an utf-8 encoding (#185) +- Foundations for API documentation with Swagger (#178) + + +Database storage for high-level settings +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Due to the work done in #186, the following environment variables have been +deprecated: + +- FEDERATION_ENABLED +- FEDERATION_COLLECTION_PAGE_SIZE +- FEDERATION_MUSIC_NEEDS_APPROVAL +- FEDERATION_ACTOR_FETCH_DELAY +- PLAYLISTS_MAX_TRACKS +- API_AUTHENTICATION_REQUIRED + +Configuration for this settings has been moved to database, as it will provide +a better user-experience, by allowing you to edit these values on-the-fly, +without restarting Funkwhale processes. + +You can leave those environment variables in your .env file for now, as the +values will be used to populate the database entries. We'll make a proper +announcement when the variables won't be used anymore. + +Please browse https://docs.funkwhale.audio/configuration.html#instance-settings +for more information about instance configuration using the web interface. + + +System emails +^^^^^^^^^^^^^ + +Starting from this release, Funkwhale will send two types +of emails: + +- Email confirmation emails, to ensure a user's email is valid +- Password reset emails, enabling user to reset their password without an admin's intervention + +Email sending is disabled by default, as it requires additional configuration. +In this mode, emails are simply outputted on stdout. + +If you want to actually send those emails to your users, you should edit your +.env file and tweak the ``EMAIL_CONFIG`` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` +for more details. + +.. note:: + + As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, + which was not documented, has no effect anymore. You can safely remove it from + your .env file if it is set. + + +Proxy headers for non-docker deployments +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +For non-docker deployments, add ``--proxy-headers`` at the end of the ``daphne`` +command in :file:`/etc/systemd/system/funkwhale-server.service`. + +This will ensure the application receive the correct IP address from the client +and not the proxy's one. + + +0.10 (2018-04-23) +----------------- + +Features: + +- Can now import files in-place from the CLI importer (#155) + + +Enhancements: + +- Avoid downloading audio files multiple times from remote libraries (#163) +- Better file import performance and error handling (#144) +- Import job and batch API and front-end have been improved with better + performance, pagination and additional filters (#171) +- Increased max_length on TrackFile.source, this will help when importing files + with a really long path (#142) +- Player is back in Queue tab (#150) + + +Bugfixes: + +- Fail graciously when AP representation includes a null_value for mediaType +- Fix sidebar tabs not showing under small resolution under Chrome (#173) +- Fixed broken login due to badly configured Axios (#172) +- Fixed broken playlist modal after login (#155) +- Fixed queue reorder or track deletion restarting currently playing track + (#151) +- Radio will now append new track if you delete the last track in queue (#145) +- Reset all sensitive front-end data on logout (#124) +- Typos/not showing text due to i18n work (#175) + + +Documentation: + +- Better documentation for hardware requirements and memory usage (#165) + + +In-place import +^^^^^^^^^^^^^^^ + +This release includes in-place imports for the CLI import. This means you can +load gigabytes of music into funkwhale without worrying about about Funkwhale +copying those music files in its internal storage and eating your disk space. + +`This new feature is documented here <https://docs.funkwhale.audio/importing-music.html#in-place-import>`_ +and require additional configuration to ensure funkwhale and your webserver can +serve those files properly. + +**Non-docker users:** + +Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following +block to your nginx configuration:: + + location /_protected/music { + internal; + alias /srv/funkwhale/data/music; + } + +And the following to your .env file:: + + MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music + +**Docker users:** + +Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following +block to your nginx configuration:: + + location /_protected/music { + internal; + alias /srv/funkwhale/data/music; + } + +Assuming you have the following volume directive in your ``docker-compose.yml`` +(it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add +the following to your .env file:: + + # this is the path in the container + MUSIC_DIRECTORY_PATH=/music + # this is the path on the host + MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music + + +0.9.1 (2018-04-17) +------------------ + +Bugfixes: + +- Allow null values for musicbrainz_id in Audio ActivityPub representation +- Fixed broken permission check on library scanning and too aggressive page + validation + + +0.9 (2018-04-17) +---------------- + +Features: + +- Add internationalization support (#5) +- Can now follow and import music from remote libraries (#136, #137) + + +Enhancements: + +- Added a i18n-extract yarn script to extract strings to PO files (#162) +- User admin now includes signup and last login dates (#148) +- We now use a proper user agent including instance version and url during + outgoing requests + + +Federation is here! +^^^^^^^^^^^^^^^^^^^ + +This is for real this time, and includes: + +- Following other Funkwhale libraries +- Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time) +- Searching across federated catalogs + +Note that by default, federation is opt-in, on a per-instance basis: +instances will request access to your catalog, and you can accept or refuse +those requests. You can also revoke the access at any time. + +Documentation was updated with relevant instructions to use and benefit +from this new feature: https://docs.funkwhale.audio/federation.html + +Preparing internationalization +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Funkwhale's front-end as always been english-only, and this is a barrier +to new users. The work make Funkwhale's interface translatable was started +in this release by Baptiste. Although nothing is translated yet, +this release includes behind the stage changes that will make it possible in +the near future. + +Many thank to Baptiste for the hard work and for figuring out a proper solution +to this difficult problem. + +Upgrade path +^^^^^^^^^^^^ + +In addition to the usual instructions from +https://docs.funkwhale.audio/upgrading.html, non-docker users will have +to setup an additional systemd unit file for recurrent tasks. + +This was forgotten in the deployment documentation, but recurrent tasks, +managed by the celery beat process, will be needed more and more in subsequent +releases. Right now, we'll be using to clear the cache for federated music files +and keep disk usage to a minimum. + +In the future, they will also be needed to refetch music metadata or federated +information periodically. + +Celery beat can be enabled easily:: + + curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" + # Also edit /etc/systemd/system/funkwhale.target + # and ensure the Wants= line contains the following: + # Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service + nano /etc/systemd/system/funkwhale.target + # reload configuration + systemctl daemon-reload + +Docker users already have celerybeat enabled. + + +0.8 (2018-04-02) +---------------- + +Features: + +- Add a detail page for radios (#64) +- Implemented page title binding (#1) +- Previous Track button restart playback after 3 seconds (#146) + + +Enhancements: + +- Added credits to Francis Gading for the logotype (#101) +- API endpoint for fetching instance activity and updated timeline to use this + new endpoint (#141) +- Better error messages in case of missing environment variables (#140) +- Implemented a @test@yourfunkwhaledomain bot to ensure federation works + properly. Send it "/ping" and it will answer back :) +- Queue shuffle now apply only to tracks after the current one (#97) +- Removed player from queue tab and consistently show current track in queue + (#131) +- We now restrict some usernames from being used during signup (#139) + + +Bugfixes: + +- Better error handling during file import (#120) +- Better handling of utf-8 filenames during file import (#138) +- Converted favicon from .ico to .png (#130) +- Upgraded to Python 3.6 to fix weird but harmless weakref error on django task + (#121) + + +Documentation: + +- Documented the upgrade process (#127) + + +Preparing for federation +^^^^^^^^^^^^^^^^^^^^^^^^ + +Federation of music libraries is one of the most asked feature. +While there is still a lot of work to do, this version includes +the foundation that will enable funkwhale servers to communicate +between each others, and with other federated software, such as +Mastodon. + +Funkwhale will use ActivityPub as it's federation protocol. + +In order to prepare for federation (see #136 and #137), new API endpoints +have been added under /federation and /.well-known/webfinger. + +For these endpoints to work, you will need to update your nginx configuration, +and add the following snippets:: + + location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/federation/; + } + + location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; + } + +This will ensure federation endpoints will be reachable in the future. +You can of course skip this part if you know you will not federate your instance. + +A new ``FEDERATION_ENABLED`` env var have also been added to control whether +federation is enabled or not on the application side. This settings defaults +to True, which should have no consequences at the moment, since actual +federation is not implemented and the only available endpoints are for +testing purposes. + +Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation +on the application side. + +To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, +and sending it "/ping", for example, via Mastodon, should trigger +a response. + + + +0.7 (2018-03-21) +---------------- + +Features: + +- Can now filter artists and albums with no listenable tracks (#114) +- Improve the style of the sidebar to make it easier to understand which tab is + selected (#118) +- On artist page, albums are not sorted by release date, if any (#116) +- Playlists are here \o/ :tada: (#3, #93, #94) +- Use django-cacheops to cache common ORM requests (#117) + + +Bugfixes: + +- Fixed broken import request admin (#115) +- Fixed forced redirection to login event with + API_AUTHENTICATION_REQUIRED=False (#119) +- Fixed position not being reset properly when playing the same track + multiple times in a row +- Fixed synchronized start/stop radio buttons for all custom radios (#103) +- Fixed typo and missing icon on homepage (#96) + + +Documentation: + +- Up-to-date and complete development and contribution instructions in + README.rst (#123) + + +0.6.1 (2018-03-06) +------------------ + +Features: + +- Can now skip acoustid on file import with the --no-acoustid flag (#111) + + +Bugfixes: + +- Added missing batch id in output during import (#112) +- Added some feedback on the play button (#100) +- Smarter pagination which takes a fixed size (#84) + + +Other: + +- Completely removed django-cachalot from the codebase (#110). You can safely + remove the CACHALOT_ENABLED setting from your .env file + + +0.6 (2018-03-04) +---------------- + +Features: + +- Basic activity stream for listening and favorites (#23) +- Switched to django-channels and daphne for serving HTTP and websocket (#34) + +Upgrades notes +^^^^^^^^^^^^^^ + +This version contains breaking changes in the way funkwhale is deployed, +please read the notes carefully. + +Instance timeline +^^^^^^^^^^^^^^^^^ + +A new "Activity" page is now available from the sidebar, where you can +browse your instance activity. At the moment, this includes other users +favorites and listening, but more activity types will be implemented in the +future. + +Internally, we implemented those events by following the Activity Stream +specification, which will help us to be compatible with other networks +in the long-term. + +A new settings page has been added to control the visibility of your activity. +By default, your activity will be browsable by anyone on your instance, +but you can switch to a full private mode where nothing is shared. + +The setting form is available in your profile. + +Switch from gunicorn to daphne +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This release include an important change in the way we serve the HTTP API. +To prepare for new realtime features and enable websocket support in Funkwhale, +we are now using django-channels and daphne to serve HTTP and websocket traffic. + +This replaces gunicorn and the switch should be easy assuming you +follow the upgrade process described below. + +If you are using docker, please remove the command instruction inside the +api service, as the up-to-date command is now included directly in the image +as the default entry point: + +.. code-block:: yaml + + api: + restart: unless-stopped + image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} + command: ./compose/django/gunicorn.sh # You can remove this line + +On non docker setups, you'll have to update the [Service] block of your +funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn. + +The new configuration should be similar to this: + +.. code-block:: ini + + [Service] + User=funkwhale + # adapt this depending on the path of your funkwhale installation + WorkingDirectory=/srv/funkwhale/api + EnvironmentFile=/srv/funkwhale/config/.env + ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application + +Ensure you update funkwhale's dependencies as usual to install the required +packages. + +On both docker and non-docker setup, you'll also have to update your nginx +configuration for websocket support. Ensure you have the following blocks +included in your virtualhost file: + +.. code-block:: text + + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + ... + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + } + +Remember to reload your nginx server after the edit. + + +0.5.4 (2018-02-28) +------------------ + +Features: + +- Now stop running radio when clearing queue (#98) + +Bugfixes: + +- Fixed queue skipping tracks (#91) +- Now loop properly on queue when we only have one track (#95) + + +0.5.3 (2018-02-27) +------------------ + +Features: + +- Added admin interface for radios, track files, favorites and import requests (#80) +- Added basic instance stats on /about (#82) +- Search now unaccent letters for queries like "The DĆø" or "Bjƶrk" yielding more results (#81) + + +Bugfixes: + +- Always use username in sidebar (#89) +- Click event outside of player icons (#83) +- Fixed broken import because of missing transaction +- Now always load next radio track on last queue track ended (#87) +- Now exclude tracks without file from radio candidates (#88) +- skip to next track properly on 40X errors (#86) + + +Other: + +- Switched to towncrier for changelog management and compilation + + +0.5.2 (2018-02-26) +------------------ + +- Fixed broken file import due to wrong url (#73) +- More accurate mimetype detection +- Fixed really small size on small screens +- Added masonry layout for artists, requests and radios (#68) +- We now have a favicon! +- Fixed truncated play icon (#65) + + +0.5.1 (2018-02-24) +------------------ + +- Front: Fixed broken ajax call on radio builder (#69) +- Front: Shuffle now restart next track from beginning (#70) +- Front: volume slider should now have the same style everywhere (#72) + + +0.5 (2018-02-24) +---------------- + +- Front: Now reset player colors when track has no cover (#46) +- Front: play button now disabled for unplayable tracks +- API: You can now enable or disable registration on the fly, via a preference (#58) +- Front: can now signup via the web interface (#35) +- Front: Fixed broken redirection on login +- Front: Fixed broken error handling on settings and login form + +About page: + +There is a brand new about page on instances (/about), and instance +owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/). + +Transcoding: + +Basic transcoding is now available to/from the following formats : ogg and mp3. + +*This is still an alpha feature at the moment, please report any bug.* + +This relies internally on FFMPEG and can put some load on your server. +It's definitely recommended you setup some caching for the transcoded files +at your webserver level. Check the the example nginx file at deploy/nginx.conf +for an implementation. + +On the frontend, usage of transcoding should be transparent in the player. + +Music Requests: + +This release includes a new feature, music requests, which allows users +to request music they'd like to see imported. +Admins can browse those requests and mark them as completed when +an import is made. + +0.4 (2018-02-18) +---------------- + +- Front: ambiant colors in player based on current track cover (#59) +- Front: simplified front dev setup thanks to webpack proxy (#59) +- Front: added some unittests for the store (#55) +- Front: fixed broken login redirection when 401 +- Front: Removed autoplay on page reload +- API: Added a /instance/settings endpoint +- Front: load /instance/settings on page load +- Added settings to report JS and Python error to a Sentry instance + This is disabled by default, but feel free to enable it if you want + to help us by sending your error reports :) (#8) + + +0.3.5 (2018-01-07) +------------------ + +- Smarter BACKEND_URL in frontend + + +0.3.4 (2018-01-07) +------------------ + +- Fixed wrong URL construction in ajax call + + +0.3.3 (2018-01-07) +------------------ + +- Users can now create their own dynamic radios (#51) + + +0.3.2 +------------------ + +- Fixed an issue in the main dockerfile + + +0.3.1 +------------------ + +- Revamped all import logic, everything is more tested and consistent +- Can now use Acoustid in file imports to automatically grab metadata from musicbrainz +- Brand new file import wizard + + +0.2.7 +------------------ + +- Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track + as a favorite (#53) +- Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53) +- Player: Added looping controls and shortcuts (#52) +- Player: Added shuffling controls and shortcuts (#52) +- Favorites: can now modify the ordering of track list (#50) +- Library: can now search/reorder results on artist browsing view (#50) +- Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files +- Fixed #56: invalidate tokens on password change, also added change password form +- Fixed #57: now refresh jwt token on page refresh +- removed ugly dividers in batch import list +- Fixed a few padding issues +- Now persist/restore queue/radio/player state automatically +- Removed old broken imports +- Now force tests paths +- Fixed #54: Now use pytest everywhere \o/ +- Now use vuex to manage state for favorites +- Now use vuex to manage state for authentication +- Now use vuex to manage state for player/queue/radios + + +0.2.6 (2017-12-15) +------------------ + +- Fixed broken Dockerfile + + +0.2.5 (2017-12-15) +------------------ + +Features: + +- Import: can now specify search template when querying import sources (#45) +- Login form: now redirect to previous page after login (#2) +- 404: a decent 404 template, at least (#48) + +Bugfixes: + +- Player: better handling of errors when fetching the audio file (#46) +- Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49) + +Tech: + +- Django 2 compatibility, lot of packages upgrades (#47) + + +0.2.4 (2017-12-14) +------------------ + +Features: + +- Models: now store release group mbid on Album model (#7) +- Models: now bind import job to track files (#44) + +Bugfixes: + +- Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43) diff --git a/docs/index.md b/docs/index.md index 1c1224a86..855ac4590 100644 --- a/docs/index.md +++ b/docs/index.md @@ -129,6 +129,7 @@ hidden: true --- changelog +changes/funkwhale-0-changelog ``` From 94c96e3045763fd9b9fbd7e463ac090f79e7e0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Fri, 17 Nov 2023 11:15:30 +0100 Subject: [PATCH 079/371] fix(docs): fix rst formatting Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2634> --- docs/changes/funkwhale-0-changelog.rst | 2 +- docs/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changes/funkwhale-0-changelog.rst b/docs/changes/funkwhale-0-changelog.rst index fddd3771c..f0687e191 100644 --- a/docs/changes/funkwhale-0-changelog.rst +++ b/docs/changes/funkwhale-0-changelog.rst @@ -1,5 +1,5 @@ Funkwhale 0.x changelog -=== +======================= 0.21.2 (2020-07-27) ------------------- diff --git a/docs/index.md b/docs/index.md index 855ac4590..cff692516 100644 --- a/docs/index.md +++ b/docs/index.md @@ -129,7 +129,7 @@ hidden: true --- changelog -changes/funkwhale-0-changelog +0.x Changelog <changes/funkwhale-0-changelog> ``` From 169cd69a46e49acd9caa524c80a810bb664318e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Sat, 18 Nov 2023 15:52:52 +0100 Subject: [PATCH 080/371] fix(docs): use markdown content Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2634> --- CHANGELOG.md | 3342 ----------------- ...changelog.rst => funkwhale-0-changelog.md} | 1941 +++++----- 2 files changed, 877 insertions(+), 4406 deletions(-) rename docs/changes/{funkwhale-0-changelog.rst => funkwhale-0-changelog.md} (72%) diff --git a/CHANGELOG.md b/CHANGELOG.md index f76eca334..8132c91d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1581,3345 +1581,3 @@ Contributors to this release (translation, development, documentation, reviews, - Ventura PĆ©rez GarcĆ­a - vicdorke - XosĆ© M - -## 0.21.2 (2020-07-27) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added a new ?related=obj_id filter for artists, albums and tracks, based on tags -- Can now filter subscribed content through API (#1116) -- Support ordering=random for artists, albums, tracks and channels endpoints (#1145) -- Use role=alert on forms/toast message to improve accessibility (#1134) - -Bugfixes: - -- Fix embedded player not working on channel series/album (#1175) -- Fixed broken mimetype detection during import (#1165) -- Fixed crash when loading recent albums via Subsonic (#1158) -- Fixed crash with null help text in admin (#1161) -- Fixed invalid metadata when importing multi-artists tracks/albums (#1104) -- Fixed player crash when using Funkwhale as a PWA (#1157) -- Fixed wrong convert art displaying in some situations (#1138) -- Make channel card updated times more humanly readable, add internationalization (#1089) - -Contributors to this release (development, documentation, reviews): - -- Agate -- Bheesham Persaud -- CiarĆ”n Ainsworth - -## 0.21.1 (2020-06-11) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Features: - -- Support a --watch mode with `import_files` to automatically add, update and remove files when filesystem is updated (#721) - -Enhancements: - -- Added new channels widget on pod landing page (#1113) -- Fix HTML <title> not including instance name in some situations (#1107) -- Make URL-building logic more resilient against reverse proxy misconfiguration (#1085) -- Removed unused masonry dependency (#1112) -- Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154) -- Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151) - -Bugfixes: - -- Added safeguard to ensure local uploads are never purged from cache (#1086) -- Ensure firefox password manager dont autofill username in search bar (#1090) -- Ensure player doesn't disappear when last queue track is removed manually (#1092) -- Ensure tracks linked to skipped upload can be pruned (#1011) -- Fix playlist modal only listing 50 first playlists (#1087) -- Fixed a wording issue on artist channel page (#1117) -- Fixed crash on python 3.5 with cli importer (#1155) -- Fixed issue when displaying starred tracks on subsonic (#1082) -- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run `python manage.py fix_uploads --mimetype` to set proper mimetypes on existing uploads. -- Fixed page not refreshing when switching between My Library and Explore sections (#1091) -- Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147) -- Fixed wrong album and track count in admin artist API (#1096) -- Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078) - -### Small API breaking change in `/api/v1/libraries` - -To allow easier crawling of public libraries on a pod,we had to make a slight breaking change -to the behaviour of `GET /api/v1/libraries`. - -Before, it returned only libraries owned by the current user. - -Now, it returns all the accessible libraries (including ones from other users and pods). - -If you are consuming the API via a third-party client and need to retrieve your libraries, -use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me` - -Contributors to this release (development, documentation, reviews, testing): - -- Agate -- CiarĆ”n Ainsworth -- Creak -- gisforgabriel -- Siren -- Tony Wasserka - -## 0.21 "Agate" (2020-04-24) - -This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3 - -We are truly grateful as well to the dozens of people who contributed to this release with translations, development, documentation, reviews, design, testing, feedback, financial support, third-party projects and integrationsā€¦ You made it possible! - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html, there are also additional operations you need to execute, listed in the changelog below (search "Manual action"). - -### Channels and podcasts - -Funkwhale 0.21 includes a brand new feature: Channels! - -Channels can be used as a replacement to public libraries, -to publish audio content, both musical and non-musical. They federate with other Funkwhale pods, but also other -fediverse software, in particular Mastodon, Pleroma, Friendica and Reel2Bits, meaning people can subscribe to your channel -from any of these software. To get started with publication, simply visit your profile and create a channel from there. - -Each Funkwhale channel also comes with RSS feed that is compatible with existing podcasting applications, like AntennaPod -on Android and, within Funkwhale, you can also subscribe to any podcast from its RSS feed! - -Many, many thanks to the numerous people who helped with the feature design, development and testing, and in particular -to the members of the working group who met every week for months in order to get this done, and the members of other third-party -projects who took the time to work with us to ensure compatibility. - -### Redesigned navigation, player and queue - -This release includes a full redesign of our navigation, player and queue. Overall, it should provide -a better, less confusing experience, especially on mobile devices. This redesign was suggested -14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done! - -### Improved search bar for searching remote objects - -The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly: - -- Subscribe to a remote library via its URL -- Listen a public track from another pod -- Subscribe to a channel - -### Screening for sign-ups and custom sign-up form - -Instance admins can now configure their pod so that registrations required manual approval from a moderator. This -is especially useful on private or semi-private pods where you don't want to close registrations completely, -but don't want spam or unwanted users to join your pod. - -When this is enabled and a new user register, their request is put in a moderation queue, and moderators -are notified by email. When the request is approved or refused, the user is also notified by email. - -In addition, it's also possible to customize the sign-up form by: - -- Providing a custom help text, in markdown format -- Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods - -### Federated reports - -It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed. - -This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers. - -### Improved search performance - -Our search engine went through a full rewrite to make it faster. This new engine is enabled -by default when using the search bar, or when searching for artists, albums and tracks. It leverages -PostgreSQL full-text search capabilities. - -During our tests, we observed huge performance improvements after the switch, by an order of -magnitude. This should be especially perceptible on pods with large databases, more modest hardware -or hard drives. - -We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, -you can switch back by setting `USE_FULL_TEXT_SEARCH=false` in your `.env` file. - -### Enforced email verification - -The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to make email verification -mandatory for your users. It defaults to `false`, and doesn't apply to superuser accounts created through -the CLI. - -If you enable this, ensure you have a SMTP server configured too. - -### More reliable CLI importer [manual action required] - -Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger) - -We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly. - -If you use the `import_files` command, this means you should replace scripts that look like this: - -```sh -python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput -``` - -By this: - -```sh -python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput -``` - -And Funkwhale will happily import any supported audio file from the specified directory. - -### User management through the server CLI - -We now support user creation (incl. non-admin accounts), update and removal directly -from the server CLI. Typical use cases include: - -- Changing a user password from the command line -- Creating or updating users from deployments scripts or playbooks -- Removing or granting permissions or upload quota to multiple users at once -- Marking multiple users as inactive - -All user-related commands are available under the `python manage.py fw users` namespace. -Please refer to the [Admin documentation](https://docs.funkwhale.audio/admin/commands.html#user-management) for -more information and instructions. - -### Progressive web app [Manual action suggested, non-docker only] - -We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience -during offline use, and on mobile devices. - -In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure -the following instruction is present in your nginx configuration: - -```nginx -location /front/ { - # Add the following line in the /front/ location - add_header Service-Worker-Allowed "/"; -} -``` - -### Postgres docker changed environment variable [manual action required, docker multi-container only] - -If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658) - -You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust` - -Newer deployments aren't affected. - -### Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] - -With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now includes PostgreSQL 11. - -In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below: - -```sh -# open a shell as the Funkwhale user -sudo -u funkwhale -H bash - -# move to the funkwhale data directory -# (replace this with your own if you used a different path) -cd /srv/funkwhale/data - -# stop the funkwhale container -docker stop funkwhale - -# backup the database files -cp -r data/ ../postgres.bak - -# Upgrade the database -docker run --rm \ - -v $(pwd)/data:/var/lib/postgresql/10/data \ - -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ - -e PGUSER=funkwhale \ - -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ - tianon/postgres-upgrade:10-to-11 - -# replace the Postgres 10 files with Postgres 11 files -mv data/ postgres-10 -mv upgraded-postgresql/ data -``` - -Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, -you can remove the backups/old files: - -```sh -sudo -u funkwhale -H bash -cd /srv/funkwhale/data -rm -rf ../postgres.bak -rm -rf postgres-10 -``` - -### Full list of changes - -Features: - -- Support for publishing and subscribing to podcasts (#170) -- Brand new navigation, queue and player redesign (#594) -- Can now browse a library content through the UI (#926) -- Federated reports (#1038) -- Screening for sign-ups (#1040) -- Make it possible to enforce email verification (#1039) -- Added a new radio based on another user listenings (#1060) -- User management through the server CLI - -Enhancements: - -- Added ability to reject library follows from notifications screen (#859) -- Added periodic background task and CLI command to associate genre tags to artists and albums based on identical tags found on corresponding tracks (#988) -- Added support for CELERYD_CONCURRENCY env var to control the number of worker processes (#997) -- Added the ability to sort albums by release date (#1013) -- Added two new radios to play your own content or a given library tracks -- Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled -- Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012) -- Favor local uploads when playing a track with multiple uploads (#1036) -- Include only local content in nodeinfo stats, added downloads count -- Make media and static files serving more reliable when reverse proxy `X_FORWARDED_*` headers are incorrect (#947) -- Order the playlist columns by modification date in the Browse tab (#775) -- Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042) -- Remember display settings in Album, Artist, Radio and Playlist views (#391) -- Removed unnecessary "Federation music needs approval" setting (#959) -- Replaced our slow research logic by PostgreSQL full-text search (#994) -- Support autoplay when loading embed frame from Mastodon and third-party websites (#1041) -- Support filtering playlist by name and several additional UX improvements in playlists modal (#974) -- Support modifying album cover art through the web UI (#588) -- Use a dedicated scope for throttling subsonic to avoid intrusive rate-limiting -- Use same markdown widget for all content fields (rules, description, reports, notes, etc.) -- CLI Importer is now more reliable and less resource-hungry on large libraries -- Add support custom domain for S3 storage -- Better placeholders for channels when there are no episodes or series -- Updated documentation for 0.21 release -- Improved performance and error handling when fetching remote attachments - -Bugfixes: - -- Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961) -- Fix issue with browser shortcuts such as search and focus URL not being recognised (#340, #985) -- Fixed admin dropdown not showing after login (#1042) -- Fixed an issue with celerybeat container failing to restart (#1004) -- Fixed invalid displayed number of tracks in playlist (#986) -- Fixed issue with recent results not being loaded from the API (#948) -- Fixed issue with sorting by album name not working (#960) -- Fixed short audio glitch when switching switching to another track with player paused (#970) -- Improved deduplication logic to prevent skipped files during import (#348, #474, #557, #740, #928) -- More resilient tag parsing with empty release date or album artist (#1037) -- More robust importer against malformed dates (#966) -- Removed "nodeinfo disabled" setting, as nodeinfo is required for the UI to work (#982) -- Replaced PDF icon by List icon in playlist placeholder (#943) -- Resolve an issue where disc numbers were not taken into consideration when playing an album from the album card (#1006) -- Set correct size for album covers in playlist cards (#680) -- Remove double spaces in ChannelForm -- Deduplicate tags in Audio ActivityPub representation -- Add support custom domain for S3 storage -- Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075) -- Exclude external podcasts from library home -- Fixed broken channel save when description is too long -- Fixed 500 error when federation is disabled and application+json is requested -- Fixed minor subsonic API crash -- Fixed broken local profile page when allow-list is enabled -- Fixed issue with confirmation email not sending when signup-approval was enabled -- Ensure 0 quota on user is honored -- Fixed attachments URL not honoring media URL -- Fix grammar in msg string in TrackBase.vue -- Fix typo in SubscribeButton.vue - -Translations: - -- Arabic -- Catalan -- English (United Kingdom) -- German -- Hungarian -- Japanese -- Occitan -- Portuguese (Brazil) -- Russian - -Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects): - -- Agate -- annando -- Anton Strƶmkvist -- Audrey -- ButterflyOfFire -- CiarĆ”n Ainsworth -- Creak -- Daniele Lira Mereb -- dashie -- Eloisa -- eorn -- Francesc GalĆ­ -- gerhardbeck -- GinnyMcQueen -- guillermau -- Haelwenn -- jinxx -- Jonathan Aylard -- Keunes -- M.G -- marzzzello -- MathĆ© Grievink -- MĆ©lanie Chauvel -- Mjourdan -- Morgan Kesler -- Noe Gaumont -- Noureddine HADDAG -- Ollie -- Peter Wickenberg -- Quentin PAGƈS -- Renon -- Satsuki Yanagi -- Shlee -- SpcCw -- techknowlogick -- ThibG -- Tony Wasserka -- unklebonehead -- wakest -- wxcafĆ© -- Xaloc -- XosĆ© M - -## 0.20.1 (2019-10-28) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Denormalized audio permission logic in a separate table to enhance performance - -With this release, we're introducing a performance enhancement that should reduce the load on the database and API -servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939). - -Under the hood, we now maintain a separate table to link users to the tracks they are allowed to see. This change is **disabled** -by default, but should be enabled by default starting in Funkwhale 0.21. - -If you want to try it now, add -`MUSIC_USE_DENORMALIZATION=True` to your `.env` file, restart Funkwhale, and run the following command: - -```sh -python manage.py rebuild_music_permissions -``` - -This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual -behaviour regarding tracks, albums and artists visibility. - -Enhancements: - -- Added a retry option for failed uploads (#942) -- Added feedback via loading spinner when searching a remote library -- Denormalized audio permission logic in a separate table to enhance performance -- Placeholders will now be shown if no content is available across the application (#750) -- Reduce the number of simultaneous DB connections under some deployment scenario -- Support byYear filtering in Subsonic API (#936) - -Bugfixes: - -- Ensure password input doesn't overflow outside of container (#933) -- Fix audio serving issues under S3/nginx when signatures are enabled -- Fix import crash when importing M4A file with no embedded cover (#946) -- Fix tag exclusion in custom radios (#950) -- Fixed an issue with embed player CSS being purged during build (#935) -- Fixed escaped pod name displayed on home/about page (#945) -- Fixed pagination in subsonic getSongsByGenre endpoint (#954) -- Fixed style glitches in dropdowns - -Documentation: - -- Documented how to create DB extension by hand in case of permission error during migrations (#934) - -Contributors to this release (translation, development, documentation, reviews, design): - -- CiarĆ”n Ainsworth -- Dag Stenstad -- Daniele Lira Mereb -- Agate -- Esteban -- Johannes H. -- knuxify -- Mateus Mattei Garcia -- Quentin PAGƈS - -## 0.20 (2019-10-04) - -Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html - -### Support for genres via tags - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -One of our most requested missing features is now available! - -Starting with Funkwhale 0.20, -Funkwhale will automatically extract genre information from uploaded files and associate it -with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). -Please refer to [our tagging documentation](https://docs.funkwhale.audio/users/upload.html#tagging-files) -for more information regarding the tagging process. - -Tags can also be associated with artists and albums, and updated after upload through the UI using -the edit system released in Funkwhale 0.19. Tags are also fetched when retrieving content -via federation. - -Tags are used in various places to enhance user experience: - -- Tags are listed on tracks, albums and artist profiles -- Each tag has a dedicated page were you can browse corresponding content and quickly start a radio -- The custom radio builder now supports using tags -- Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well - -If you are a pod admin and want to extract tags from already uploaded content, you run [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) -and [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in a `python manage.py shell`. - -### Content and account reports - -It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, -who can review it and delete reported content, block accounts or take any other action they deem necessary. - -By default, both anonymous and authenticated users can submit these reports. This makes sure moderators can receive and handle -takedown requests and other reports for illegal content that may be sent by third-parties without an account on the pod. However, -you can disable anonymous reports completely via your pod settings. - -Federation of the reports will be supported in a future release. - -For more information about this feature, please check out our documentation: - -- [User documentation](https://docs.funkwhale.audio/moderator/reports.html) -- [Moderator documentation](https://docs.funkwhale.audio/users/reports.html) - -### Account deletion - -Users can now delete their account themselves, without involving an administrator. - -The deletion process will remove any local data and objects associated with the account, -but the username won't be able to new users to avoid impersonation. Deletion is also broadcasted -to other known servers on the federation. - -For more information about this feature, please check out our documentation: - -- [User documentation](https://docs.funkwhale.audio/users/account.html) - -### Landing and about page redesign [Manual action suggested] - -In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod -configuration. Among other things, the landing page will now include: - -- your pod and an excerpt from your pod's description -- your pod banner image, if any -- your contact email, if any -- the login form -- the signup form (if registrations are open on your pod) -- some basic statistics about your pod -- a widget including recently uploaded albums, if anonymous access is enabled - -The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before. - -Additionally, the about page now includes: - -- your pod name, description, rules and terms -- your pod banner image, if any -- your contact email, if any -- comprehensive statistics about your pod -- some info about your pod configuration, such as registration and federation status or the default upload quota for new users - -With this redesign, we've added a handful of additional pod settings: - -- Pod banner image -- Contact email -- Rules -- Terms of service - -We recommend taking a few moments to fill these accordingly to your needs, by visiting `/manage/settings`. - -### Allow-list to restrict federation to trusted domains - -The Allow-Listing feature grants pod moderators -and administrators greater control over federation -by allowing you to create a pod-wide allow-list. - -When allow-listing is enabled, your pod's users will only -be able to interact with pods included in the allow-list. -Any messages, activity, uploads, or modifications to -libraries and playlists will only be shared with pods -on the allow-list. Pods which are not included in the -allow-list will not have access to your pod's content -or messages and will not be able to send anything to -your pod. - -If you want to enable this feature on your pod, or learn more, please refer to [our documentation](https://docs.funkwhale.audio/moderator/listing.html)! - -### Periodic message to incite people to support their pod and Funkwhale - -Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. - -If specified by the pod admin, a separate and custom message will also be displayed in a similar way to provide instructions and links to support the pod. - -Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely. - -### Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] - -To improve the performance, stability and reliability of Funkwhale's web processes, -we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as: - -- zero-downtime upgrades -- configurable number of web worker processes - -Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne. - -To benefit from this enhancement on existing instances, you need to add `FUNKWHALE_WEB_WORKERS=1` in your `.env` file -(use a higher number if you want to have more web worker processes). - -Then, edit your `/etc/systemd/system/funkwhale-server.service` and replace the `ExecStart=` line with -`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}` - -Then reload the configuration change with `sudo systemctl daemon-reload` and `sudo systemctl restart funkwhale-server`. - -### Content-Security-Policy and additional security headers [manual action suggested] - -To improve the security and reduce the attack surface in case of a successful exploit, we suggest -you add the following Content-Security-Policy to your nginx configuration. - -````{note} -If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers - -```nginx -add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; -``` -```` - -**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`: - -```nginx -server { - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # ā€¦ existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; - } -} -``` - -Then reload nginx with `systemctl reload nginx`. - -**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`: - -```nginx -server { - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # ā€¦ existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias /frontend/embed.html; - } -} - -``` - -Then reload nginx with `docker-compose restart nginx`. - -### Rate limiting - -With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure -regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error. - -For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit -is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests. - -You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your `.env` file and restarting the -services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/. - -### Broken audio streaming when using S3/Minio and DSub [manual action required] - -Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded -to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage -such as Minio, please add the following in your nginx `~ /_protected/media/(.+)` location: - -```nginx -# Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 -proxy_set_header Authorization ""; -``` - -And reload your nginx process. - -### Detail - -Features: - -- Added periodical message to incite people to support their pod and Funkwhale (#839) -- Admins can now add custom CSS from their pod settings (#879) -- Allow-list to restrict federation to trusted domains (#853) -- Content and account reports (#890) -- Dark theme (#756) -- Enforce a configurable rate limit on the API to mitigate abuse (#261) -- Redesign of the landing and about pages (#872) -- Support for genres, via tags (#432) -- Users can now delete their account without admin intervention (#852) - -Enhancements: - -- Added a info message on embed wizard when anonymous access to content is disabled (#878) -- Added Catalan translation files -- Added Czech translation (#844) -- Added field to manage user upload quota in Django backend (#903) -- Added the option to replace the queue's current contents with a selected album or track (#761) -- Artists with no albums will now show track count on artist card (#895) -- Ensure API urls answer with and without a trailing slash (#877) -- Hardcoded list of supported browsers to avoid unexpected regressions (#854) -- Hardened security thanks to CSP and additional HTTP headers (#880) -- Improve display of search results by including artist and album data -- Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature -- Mods can now change a library visibility through the admin UI (#548) -- New keyboard shortcuts added for enhanced control over audio player (#866) -- Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data -- Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873) -- Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898) -- Prevent usage of too weak passwords (#883) -- Reduced CSS size by 30% using purgecss -- Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862) -- Simplified embedded docker reverse proxy IP configuration (#834) -- Support embeds on public playlists -- Support for M4A/AAC files (#661) -- Switched from Semantic-UI to Fomentic-UI -- Add dropdown menu to track table (#531) -- Display placeholder on homepage when there are no playlists (#892) -- Make album cards height independent (#710) - -Bugfixes: - -- Added context strings to en_GB translations so that picking the language changes the interface as expected -- Ensure selected locale is not reset to browser default when refreshing app -- Fix missing license information on track details page (#913) -- Fix regression to quota bar color (#897) -- Fixed a responsive display issues on 1024px wide screens (#904) -- Fixed album art not being retrieved from Ogg/Opus files -- Fixed broken embedded player layout after dependency update (#875) -- Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL -- Fixed broken less listened radio (#912) -- Fixed broken URL to artist and album on album and track pages (#871) -- Fixed empty contentType causing client crash in some Subsonic payloads (#893) -- Fixed import crashing with empty cover file or too long values on some fields -- Fixed in-place imported files not playing under nginx when filename contains ? or % (#924) -- Fixed remaining transcoding issue with Subsonic API (#867) -- Fixed search usability issue when browsing artists, albums, radios and playlists (#902) -- Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865) -- Updated docs to ensure streaming works when using Minio/S3 and DSub (#932) - -Contributors to this release (translation, development, documentation, reviews, design): - -- Amaranthe -- ButterflyOfFire -- CiarĆ”n Ainsworth -- Agate -- Esteban -- Francesc GalĆ­ -- Freyja Wildes -- hellekin -- IISergII -- jiri-novacek -- Johannes H. -- Keunes -- Koen -- Manuel Cortez -- Mehdi -- MĆ©lanie Chauvel -- nouts -- QuentĆ­ -- Reg -- Rodrigo Leite -- Romain Failliot -- SpcCw -- Sylke Vicious -- Tobias Reisinger -- Xaloc -- XosĆ© M - -## 0.19.1 (2019-06-28) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- The currently playing track is now highlighted with an orange play icon (#832) -- Support for importing files with no album tag (#122) -- Redirect from / to /library when user is logged in (#864) -- Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) -- Added button to search for objects on Discogs (#368) -- Added copy-to-clipboard button with Subsonic password input (#814) -- Added opus to the list of supported mimetypes and extensions (#868) -- Aligned search headers with search results in the sidebar (#708) -- Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) -- Favorites radio will not be visible if the user does not have any favorites (#419) - -Bugfixes: - -- Ensure empty but optional fields in file metadata don't error during import (#850) -- Fix broken upload for specific files when using S3 storage (#857) -- Fixed broken translation on home and track detail page (#833) -- Fixed broken user admin for users with non-digit or letters in their username (#869) -- Fixed invalid file extension for transcoded tracks (#848) -- Fixed issue with French translation for "Start radio" (#849) -- Fixed issue with player changing height when hovering over the volume slider (#838) -- Fixed secondary menus truncated on narrow screens (#855) -- Fixed wrong og:image url when using S3 storage (#851) -- Hide pod statistics on about page if those are disabled (#835) -- Use ASCII filename before upload to S3 to avoid playback issues (#847) - -Contributors to this release (committers and reviewers): - -- CiarĆ”n Ainsworth -- Creak -- ealgase -- Agate -- Esteban -- Freyja Wildes -- hellekin -- Johannes H. -- Mehdi -- Reg - -## 0.19.0 (2019-05-16) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Edits on tracks, albums and artists - -Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles -were created from audio file tags, but basically immutable after that (unless you had -admin access to Django's UI, which wasn't ideal to do this kind of changes). - -With this release, everyone can suggest changes on track, album and artist pages. Users -with the "library" permission can review suggested edits in a dedicated interface -and apply/reject them. - -Approved edits are broadcasted via federation, to ensure other instances get the information -too. - -Not all fields are currently modifiable using this feature. Especially, it's not possible -to suggest a new album cover, or reassign a track to a different album or artist. Those will -be implemented in a future release. - -### Admin UI for tracks, albums, artists, libraries and uploads - -As part of our ongoing effort to make Funkwhale easier to manage for instance owners, -this release includes a brand new administration interface to deal with: - -- tracks -- albums -- artists -- libraries -- uploads - -You can use this UI to quickly search for any object, delete objects in batch, understand -where they are coming from etc. This new UI should remove the need to go through Django's -admin in the vast majority of cases (but also includes a link to Django's admin when needed). - -### Artist hiding in the interface - -It's now possible for users to hide artists they don't want to see. - -Content linked to hidden artists will not show up in the interface anymore. Especially: - -- Hidden artists tracks are removed from the current queue -- Starting a playlist will skip tracks from hidden artists -- Recently favorited, recently listened and recently added widgets on the homepage won't include content from hidden artists -- Radio suggestions will exclude tracks from hidden artists -- Hidden artists won't appear in Subsonic apps - -Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. - -### OAuth2 authorization for better integration with third-party apps - -Funkwhale now support the OAuth2 authorization and authentication protocol which will allow -third-party apps to interact with Funkwhale on behalf of users. - -This feature makes it possible to build third-party apps that have the same capabilities -as Funkwhale's Web UI. The only exception at the moment is for actions that requires -special permissions, such as modifying instance settings or moderation (but this will be -enabled in a future release). - -If you want to start building an app on top of Funkwhale's API, please check-out -https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html. - -### Better error handling and display during import - -Funkwhale should now be more resilient to missing tags in imported files, and give -you more insights when something goes wrong, including the specific tags that were missing -or invalid, and additional debug information to share in your support requests. - -This information is available in all pages that list uploads, when clicking on the button next to the upload status. - -### Support for S3-compatible storages to store media files - -Storing all media files on the Funkwhale server itself may not be possible or desirable -in all scenarios. You can now configure Funkwhale to store those files in a S3 -bucket instead. - -Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use -this feature. - -### Prune library command - -Users are often surprised by Funkwhale's tendency to keep track, album and artist -metadata even if no associated files exist. - -To help with that, we now offer a `prune_library` management command you can run -to purge your database from obsolete entries. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-library). - -### Check in-place files command - -When using in-place import with a living audio library, you'll quite often rename or -remove files from the file system. Unfortunately, Funkwhale keeps a reference to those -files in the database, which results in unplayable tracks. - -To help with that, we now offer a `check_inplace_files` management command you can run -to purge your database from obsolete files. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database). - -Features: - -- Added albums view. Similar to artists view, it's viewable by clicking on the "Albums" link on the top bar. (#356) -- Allow artists hiding (#701) -- Change the document title to display current track information. (#359) -- Display a confirmation dialog when adding duplicate songs to a playlist (#784) -- Improved error handling and display during import (#252, #718, #583, #501, #544) -- Support embedding full artist discographies (#747) -- Support metadata update on tracks, albums and artists and broadcast those on the federation (#689) -- Support OAuth2 authorization for better integration with third-party apps (#752) -- Support S3-compatible storages for media files (#565) - -Enhancements: - -- [Experimental] Added a new "Similar" radio based on users history (suggested by @gordon) -- Added a "load more" button on artist pages to load more tracks/albums (#719) -- Added a `check_inplace_files` management command to remove purge the database from references to in-place imported files that don't exist on disk anymore (#781) -- Added a prune_library management command to remove obsolete metadata from the database (#777) -- Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809) -- Added standardized translation context for all strings in the frontend to give accurate hints to translators. -- Added twitter:\* meta tags to detect tracks and albums players automatically on more sites (#578) - Improved responsiveness of embedded player -- Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808) -- Better handling of follow/accept messages to avoid and recover from desync between instances (#830) -- Better workflow for connecting to another instance (#715) - - Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers. - -- Bumped dependencies to latest versions (#815) -- Descriptions will now be shown underneath user libraries (#768) -- Don't store unhandled ActivityPub messages in database (#776) -- Enhanced the design of the embed wizard. (!619) -- Ensure the footer always stays at the bottom of the page -- Expose an instance-level actor (service@domain) in nodeinfo endpoint (#689) -- Improved readability of logo (#385) -- Keep persistent connections to the database instead of recreating a new one for each request -- Labels for privacy levels are now consistently grabbed from a common source instead of being hardcoded every time they are needed. -- Merged artist/album buttons with title text on artist and album pages (#725) -- Now honor maxBitrate parameter in Subsonic API (#802) -- Preload next track in queue (#572) -- Reduced app size for regular users by moving admin-related code in a dedicated chunk (#805) -- Removed broken/instable lyrics feature (#799) -- Show remaining storage space during import and prevent file upload if not enough space is remaining (#550) -- The buttons displaying an icon now always show a little divider between the icon and the text. (!620) -- Use attributedTo instead of actor in library ActivityPub payload (#619) -- Use network/depends_on instead of links in docker-compose.yml (!716) - -Bugfixes: - -- Add missing command from contributing file (#754) -- Add required envvar for dev environment (!668) -- Added env variable to set AWS region and signature version to serve media without proxy (#826) -- Allow users with dots in their usernames to request a subsonic password (#798) -- Better handling of featuring/multi-artist tracks tagged with MusicBrainz (#782) -- Do not consider tracks as duplicates during import if they have different positions (#740) -- Ensure all our ActivityPub fetches are authenticated (#758) -- Ensure correct track duration and playable status when browsing radios (#812) -- Fixed alignment/size issue with some buttons (#702) -- Fixed an encoding issue with instance name on about page (#828) -- Fixed cover not showing in queue/player when playing tracks from "albums" tab (#795) -- Fixed crashing upload processing on invalid date format (#718) -- Fixed dev command for fake data creation (!664) -- Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824) -- Fixed invalid required fields in Upload django's admin (#819) -- Fixed issue with querying the albums api endpoint (#356) -- Fixed non-transparent background for volume range on Firefox (#722) -- Fixed overflowing input on account detail page (#791) -- Fixed unplayable radios for anonymous users (#563) -- Prevent skipping on file import if album_mbid is different (#772) -- Use proper site name/domain in emails (#806) -- Width of filter menus for radios has been set to stop text from overlapping the borders - -Documentation: - -- Document how to use Redis over unix sockets (#770) - -Contributors to this release (committers and translators): - -- Ale London -- Alexander -- Ben Finney -- ButterflyOfFire -- CiarĆ”n Ainsworth -- Damien Nicolas -- Daniele Lira Mereb -- Agate -- Elza Gelez -- gerry_the_hat -- gordon -- interfect -- jake -- Jee -- jovuit -- MĆ©lanie Chauvel -- nouts -- Pierrick -- Qasim Ali -- QuentĆ­ -- Renon -- Rodrigo Leite -- Sylke Vicious -- Thomas Brockmƶller -- Tixie -- Vierkantor -- Von -- Zach Halasz - -## 0.18.3 (2019-03-21) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Avoid mixed content when deploying mono-container behind proxy [Manual action required] - -_You are only concerned if you use the mono-container docker deployment behind a reverse proxy_ - -Because of [an issue in our mono-container configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), users deploying Funkwhale via docker -using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) -when browsing the Web UI. - -This is fixed in this release, but on existing deployments, you'll need to add `NESTED_PROXY=1` in your container -environment (either in your `.env` file, or via your container management tool), then recreate your funkwhale container. - -Enhancements: - -- Added title on hover for truncated content (#766) -- Ask for confirmation before leaving upload page if there is a an upload in process (#630) -- Exclude in-place imported files from quota computation (#570) -- Truncate filename in library file table to ensure correct display of the table. (#735) - -Bugfixes: - -- Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19) -- Display new notifications immediately on notifications page (#729) -- Ensure cover art from uploaded files is picked up properly on existing albums (#757) -- Fixed a crash when federating a track with unspecified position -- Fixed broken Activity and Actor modules in django admin (#767) -- Fixed broken sample apache configuration (#764) -- Fixed constant and unpredictable reordering during file upload (#716) -- Fixed delivering of local activities causing unintended side effects, such as rollbacking changes (#737) -- Fixed escaping issues in translated strings (#652) -- Fixed saving moderation policy when clicking on "Cancel" (#751) -- i18n: Update page title when changing the App's language. (#511) -- Include disc number in Subsonic responses (#765) -- Do not send notification when rejecting a follow on a local library (#743) - -Documentation: - -- Added documentation on mono-container docker upgrade (#713) -- Added documentation to set up let's encrypt certificate (#745) - -## 0.18.2 (2019-02-13) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added a 'fix_federation_ids' management command to deal with protocol/domain issues in federation - IDs after deployments (#706) -- Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) - -Bugfixes: - -- Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) -- Fixed cards display issues on medium/small screens (#707) -- Fixed Embed component name that could lead to issue when developing on OSX (#696) -- Fixed resizing issues for album cards on artist pages (#694) - -## 0.18.1 (2019-01-29) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Fix Gzip compression to avoid BREACH exploit [security] [manual action required] - -In the 0.18 release, we've enabled Gzip compression by default for various -content types, including HTML and JSON. Unfortunately, enabling Gzip compression -on such content types could make BREACH-type exploits possible. - -We've removed the risky content-types from our nginx template files, to ensure new -instances are safe, however, if you already have an instance, you need -to double check that your host nginx virtualhost do not include the following -values for the `gzip_types` settings: - -``` -application/atom+xml -application/json -application/ld+json -application/activity+json -application/manifest+json -application/rss+xml -application/xhtml+xml -application/xml -``` - -For convenience, you can also replace the whole setting with the following snippet: - -``` -gzip_types -application/javascript -application/vnd.geo+json -application/vnd.ms-fontobject -application/x-font-ttf -application/x-web-app-manifest+json -font/opentype -image/bmp -image/svg+xml -image/x-icon -text/cache-manifest -text/css -text/plain -text/vcard -text/vnd.rim.location.xloc -text/vtt -text/x-component -text/x-cross-domain-policy; -``` - -Many thanks to @jibec for the report! - -### Fix Apache configuration file for 0.18 [manual action required] - -The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens. - -If you are on an Apache setup, you will have to replace the `<Location "/api">` block with the following: - -```apache -<Location "/"> - # similar to nginx 'client_max_body_size 100M;' - LimitRequestBody 104857600 - - ProxyPass ${funkwhale-api}/ - ProxyPassReverse ${funkwhale-api}/ -</Location> -``` - -And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way: - -```apache - ProxyPass "/front" "!" - Alias /front /srv/funkwhale/front/dist - - ProxyPass "/media" "!" - Alias /media /srv/funkwhale/data/media - - ProxyPass "/staticfiles" "!" - Alias /staticfiles /srv/funkwhale/data/static -``` - -In case you are using custom css and theming, you also need to match this block: - -```apache2 - ProxyPass "/settings.json" "!" - Alias /settings.json /srv/funkwhale/custom/settings.json - - ProxyPass "/custom" "!" - Alias /custom /srv/funkwhale/custom -``` - -Enhancements: - -- Added name attributes on all inputs to improve UX, especially with password managers (#686) -- Disable makemigrations in production and misleading message when running migrate (#685) -- Display progress during file upload -- Hide pagination when there is only one page of results (#681) -- Include shared/public playlists in Subsonic API responses (#684) -- Use proper locale for date-related/duration strings (#670) - -Bugfixes: - -- Fix transcoding of in-place imported tracks (#688) -- Fixed celery worker defaulting to development settings instead of production -- Fixed crashing Django admin when loading track detail page (#666) -- Fixed list icon alignment on landing page (#668) -- Fixed overescaping issue in notifications and album page (#676) -- Fixed wrong number of affected elements in bulk action modal (#683) -- Fixed wrong URL in documentation for funkwhale_proxy.conf file when deploying using Docker -- Make Apache configuration file work with 0.18 changes (#667) -- Removed potential BREACH exploit because of Gzip compression (#678) -- Upgraded kombu to fix an incompatibility with redis>=3 - -Documentation: - -- Added user upload documentation at https://docs.funkwhale.audio/users/upload.html - -## 0.18 "Naomi" (2019-01-22) - -This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. -Her positivity, love and support have been incredibly helpful and helped shape the project -as you can enjoy it today. Thank you so much Naomi <3 - -Many thanks to the dozens of people that contributed to this release: translators, developers, -bug hunters, admins and backers. You made it possible! - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html, ensure you also execute the instructions -marked with `[manual action required]` and `[manual action suggested]`. - -See `Full changelog` below for an exhaustive list of changes! - -### Audio transcoding is back! - -After removal of our first, buggy transcoding implementation, we're proud to announce -that this feature is back. It is enabled by default, and can be configured/disabled -in your instance settings! - -This feature works in the browser, with federated/non-federated tracks and using Subsonic clients. -Transcoded tracks are generated on the fly, and cached for a configurable amount of time, -to reduce the load on the server. - -### Licensing and copyright information - -Funkwhale is now able to parse copyright and license data from file and store -this information. Apart from displaying it on each track detail page, -no additional behaviour is currently implemented to use this new data, but this -will change in future releases. - -License and copyright data is also broadcasted over federation. - -License matching is done on the content of the `License` tag in the files, -with a fallback on the `Copyright` tag. - -Funkwhale will successfully extract licensing data for the following licenses: - -- Creative Commons 0 (Public Domain) -- Creative Commons 1.0 (All declinations) -- Creative Commons 2.0 (All declinations) -- Creative Commons 2.5 (All declinations and countries) -- Creative Commons 3.0 (All declinations and countries) -- Creative Commons 4.0 (All declinations) - -Support for other licenses such as Art Libre or WTFPL will be added in future releases. - -### Instance-level moderation tools - -This release includes a first set of moderation tools that will give more control -to admins about the way their instance federates with other instance and accounts on the network. -Using these tools, it's now possible to: - -- Browse known accounts and domains, and associated data (storage size, software version, etc.) -- Purge data belonging to given accounts and domains -- Block or partially restrict interactions with any account or domain - -All those features are usable using a brand new "moderation" permission, meaning -you can appoint one or multiple moderators to help with this task. - -I'd like to thank all Mastodon contributors, because some of the these tools are heavily -inspired from what's being done in Mastodon. Thank you so much! - -### Iframe widget to embed public tracks and albums [manual action required] - -Funkwhale now supports embedding a lightweight audio player on external websites -for album and tracks that are available in public libraries. Important pages, -such as artist, album and track pages also include OpenGraph tags that will -enable previews on compatible apps (like sharing a Funkwhale track link on Mastodon -or Twitter). - -To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have -to modify your nginx configuration when upgrading to keep your instance working. - -**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template` and replace -the `location /api/` and `location /` blocks by the following snippets: - -```nginx -location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; -} - -location /front/ { - alias /frontend/; -} -``` - -The change of configuration will be picked when restarting your nginx container. - -**On non-docker setups**, edit your `/etc/nginx/sites-available/funkwhale.conf` file, -and replace the `location /api/` and `location /` blocks by the following snippets: - -```nginx -location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; -} - -location /front/ { - alias ${FUNKWHALE_FRONTEND_PATH}/; -} -``` - -Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from your .env file, -which should be `/srv/funkwhale/front/dist` by default, then reload your nginx process with -`sudo systemctl reload nginx`. - -### Alternative docker deployment method - -Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, -we're now able to provide an alternative and easier Docker deployment method! - -In contrast with our current, multi-container offer, this method integrates -all Funkwhale processes and services (database, redis, etc.) into a single, easier to deploy container. - -Both methods will coexist in parallel, as each one has pros and cons. You can learn more -about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html! - -### Automatically load .env file - -On non-docker deployments, earlier versions required you to source -the config/.env file before launching any Funkwhale command, with `export $(cat config/.env | grep -v ^# | xargs)` -This led to more complex and error prone deployment / setup. - -This is not the case anymore, and Funkwhale will automatically load this file if it's available. - -### Delete pre 0.17 federated tracks [manual action suggested] - -If you were using Funkwhale before the 0.17 release and federated with other instances, -it's possible that you still have some unplayable federated files in the database. - -To purge the database of those entries, you can run the following command: - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input -``` - -On non-docker setups: - -```sh -python manage.py script delete_pre_017_federated_uploads --no-input -``` - -### Enable gzip compression [manual action suggested] - -Gzip compression will be enabled on new instances by default -and will reduce the amount of bandwidth consumed by your instance. - -If you want to benefit from gzip compression on your instance, -edit your reverse proxy virtualhost file (located at `/etc/nginx/sites-available/funkwhale.conf`) and add the following snippet -in the server block, then reload your nginx server: - -```nginx -server { - # ... - - # compression settings - gzip on; - gzip_comp_level 5; - gzip_min_length 256; - gzip_proxied any; - gzip_vary on; - - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; - # end of compression settings -} -``` - -### Full changelog - -Features: - -- Allow embedding of albums and tracks available in public libraries via an <iframe> (#578) -- Audio transcoding is back! (#272) -- First set of instance level moderation tools (#580, !521) -- Store licensing and copyright information from file metadata, if available (#308) - -Enhancements: - -- Add UI elements for multi-disc albums (#631) -- Added alternative funkwhale/all-in-one docker image (#614) -- Broadcast library updates (name, description, visibility) over federation -- Based Docker image on alpine to have a smaller (and faster to build) image -- Improved front-end performance by stripping unused dependencies, reducing bundle size - and enabling gzip compression -- Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612) -- The progress bar in the player now display loading state / buffer loading (#586) -- Added "type: funkwhale" and "funkwhale-version" in Subsonic responses (#573) -- Documented keyboard shortcuts, list is now available by pressing "h" or in the footer (#611) -- Documented which Subsonic endpoints are implemented (#575) -- Hide invitation code field during signup when it's not required (#410) -- Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present -- Improved keyboard accessibility on player, queue and various controls (#576) -- Improved performance when listing playable tracks, albums and artists -- Increased default upload limit from 30 to 100MB (#654) -- Load env file in config/.env automatically to avoid sourcing it by hand (#626) -- More resilient date parsing during audio import, will not crash anymore on - invalid dates (#622) -- Now start radios immediately, skipping any existing tracks in queue (#585) -- Officially support connecting to a password protected redis server, with - the redis://:password@localhost:6379/0 scheme (#640) -- Performance improvement when fetching favorites, down to a single, small http request -- Removed "Activity" page, since all the data is available on the "Browse" page (#600) -- Removed the need to specify the DJANGO_ALLOWED_HOSTS variable -- Restructured the footer, added useful links and removed unused content -- Show short entries first in search results to improve UX -- Store disc number and order tracks by disc number / position) (#507) -- Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374) -- Support blind key rotation in HTTP Signatures (#658) -- Support setting a server URL in settings.json (#650) -- Updated default docker postgres version from 9.4 to 11 (#656) -- Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657) -- Improved test suite speed by reducing / disabling expensive operations (#648) - -Bugfixes: - -- Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469) -- Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643) -- Fix ".None" extension when downloading Flac file (#473) -- Fixed None extension when downloading an in-place imported file (#621) -- Added a script to prune pre 0.17 federated tracks (#564) -- Advertise public libraries properly in ActivityPub representations (#553) -- Allow opus file upload (#598) -- Do not display "view on MusicBrainz" button if we miss the mbid (#422) -- Do not try to create unaccent extension if it's already present (#663) -- Ensure admin links in sidebar are displayed for users with relevant permissions, and only them (#597) -- Fix broken websocket connection under Chrome browser (#589) -- Fix play button not starting playback with empty queue (#632) -- Fixed a styling inconsistency on about page when instance description was missing (#659) -- Fixed a UI discrepancy in playlist tracks count (#647) -- Fixed greyed tracks in radio builder and detail page (#637) -- Fixed inconsistencies in subsonic error responses (#616) -- Fixed incorrect icon for "next track" in player control (#613) -- Fixed malformed search string when redirecting to LyricsWiki (#608) -- Fixed missing track count on various library cards (#581) -- Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209) -- Fixed wrong album/track count on artist page (#599) -- Hide unplayable/empty playlists in "Browse playlist" pages (#424) -- Initial UI render using correct language from browser (#644) -- Invalid URI for reverse proxy websocket with apache (#617) -- Properly encode Wikipedia and lyrics search urls (#470) -- Refresh profile after user settings update to avoid cache issues (#606) -- Use role=button instead of empty links for player controls (#610) - -Documentation: - -- Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642) -- Document how to find and use library id when importing files in CLI (#562) -- Fix documentation typos (#645) - -## 0.17 (2018-10-07) - -### Per user libraries - -This release contains a big change in music management. This has a lot of impact -on how Funkwhale behaves, and you should have a look at -https://docs.funkwhale.audio/upgrading/0.17.html for information -about what changed and how to migrate. - -Features: - -- Per user libraries (#463, also fixes #160 and #147) -- Authentication using a LDAP directory (#194) - -Enhancements: - -- Add configuration option to set Musicbrainz hostname -- Add sign up link in the sidebar (#408) -- Added a library widget to display libraries associated with a track, album - and artist (#551) -- Ensure from_activity field is not required in django's admin (#546) -- Move setting link from profile page to the sidebar (#406) -- Simplified and less error-prone nginx setup (#358) - -Bugfixes: - -- Do not restart current song when rordering queue, deleting tracks from queue - or adding tracks to queue (#464) -- Fix broken icons in playlist editor (#515) -- Fixed a few untranslated strings (#559) -- Fixed split album when importing from federation (#346) -- Fixed toggle mute in volume bar does not restore previous volume level (#514) -- Fixed wrong env file URL and display bugs in deployment documentation (#520) -- Fixed wrong title in PlayButton (#435) -- Remove transparency on artist page button (#517) -- Set sane width default for ui cards and center play button (#530) -- Updated wrong icon and copy in play button dropdown (#436) - -Documentation: - -- Fixed wrong URLs for docker / nginx files in documentation (#537) - -Other: - -- Added a merge request template and more documentation about the changelog - -### Using a LDAP directory to authenticate to your Funkwhale instance - -Funkwhale now support LDAP as an authentication source: you can configure -your instance to delegate login to a LDAP directory, which is especially -useful when you have an existing directory and don't want to manage users -manually. - -You can use this authentication backend side by side with the classic one. - -Have a look at https://docs.funkwhale.audio/installation/ldap.html -for detailed instructions on how to set this up. - -### Simplified nginx setup [Docker: Manual action required] - -We've received a lot of user feedback regarding our installation process, -and it seems the proxy part is the one which is the most confusing and difficult. -Unfortunately, this is also the one where errors and mistakes can completely break -the application. - -To make things easier for everyone, we now offer a simplified deployment -process for the reverse proxy part. This will make upgrade of the proxy configuration -significantly easier on docker deployments. - -On non-docker instances, you have nothing to do. - -If you have a dockerized instance, here is the upgrade path. - -First, tweak your .env file: - -```sh -# remove the FUNKWHALE_URL variable -# and add the next variables -FUNKWHALE_HOSTNAME=yourdomain.funkwhale -FUNKWHALE_PROTOCOL=https - -# add the following variable, matching the path your app is deployed -# leaving the default should work fine if you deployed using the same -# paths as the documentation -FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist -``` - -Then, add the following block at the end of your docker-compose.yml file: - -```yaml -services: - # existing services - api: - # ... - celeryworker: - # ... - - # new service - nginx: - image: nginx - env_file: - - .env - environment: - # Override those variables in your .env file if needed - - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - volumes: - - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" - - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" - - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" - - "${STATIC_ROOT}:${STATIC_ROOT}:ro" - - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" - ports: - # override those variables in your .env file if needed - - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" - command: > - sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" - < /etc/nginx/conf.d/funkwhale.template - > /etc/nginx/conf.d/default.conf - && cat /etc/nginx/conf.d/default.conf - && nginx -g 'daemon off;'" - links: - - api -``` - -By doing that, you'll enable a dockerized nginx that will automatically be -configured to serve your Funkwhale instance. - -Download the required configuration files for the nginx container: - -```{parsed-literal} -cd /srv/funkwhale -mkdir nginx -curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" -curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" -``` - -Update the funkwhale.conf configuration of your server's reverse-proxy: - -```sh -# the file should match something like that, upgrade all variables -# between ${} to match the ones in your .env file, -# and your SSL configuration if you're not using let's encrypt -# The important thing is that you only have a single location block -# that proxies everything to your dockerized nginx. - -sudo nano /etc/nginx/sites-enabled/funkwhale.conf -``` - -```nginx -upstream fw { - # depending on your setup, you may want to update this - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; -} -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -server { - listen 80; - listen [::]:80; - server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } -} -server { - listen 443 ssl; - listen [::]:443 ssl; - server_name ${FUNKWHALE_HOSTNAME}; - - # TLS - ssl_protocols TLSv1.2; - ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:10m; - ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; - - # HSTS - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://fw/; - } -} -``` - -Check that your configuration is valid then reload: - -```sh -sudo nginx -t -sudo systemctl reload nginx -``` - -## 0.16.3 (2018-08-21) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Bugfixes: - -- Fixed front-end not contacting the proper path on the API (!385) - -## 0.16.2 (2018-08-21) - -```{warning} -**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** -``` - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Bugfixes: - -- Ensure we always have a default api url set on first load to avoid displaying - the instance picker (#490) -- Fixed CLI importer syntax error because of async reserved keyword usage - (#494) - -## 0.16.1 (2018-08-19) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Make funkwhale themable by loading external stylesheets (#456) - -Enhancements: - -- Add link to admin on "Staff member" button (#202) -- Can now add a description to radios and better radio cards (#331) -- Display track duration in track tables (#461) -- More permissive default permissions for front-end files (#388) -- Simpler configuration and toolchain for the front-end using vue-cli (!375) -- Use Howler to manage audio instead of our own dirty/untested code (#392) - -Bugfixes: - -- Fix alignment issue on top bar in Admin tabs (#395) -- Fix Apache2 permission issue preventing `/media` folder from being served - correctly (#389) -- Fix loading on browse page lists causing them to go down, and dimming over - the top bar (#468) -- Fixed (again): administration section not showing up in sidebar after login - (#245) -- Fixed audio mimetype not showing up on track detail and list (#459) -- Fixed broken audio playback on Chrome and invisible volume control (#390) -- Fixed broken federation import on big imports due to missing transaction - logic (#397) -- Fixed crash on artist pages when no cover is available (#457) -- Fixed favorited status of tracks not appearing in interface (#398) -- Fixed invitation code not prefilled in form when accessing invitation link - (#476) -- Fixed typos in scheduled tasks configuration (#487) -- Removed release date error in case of empty date (#478) -- Removed white on white artist button on hover, on Album page (#393) -- Smarter date parsing during import by replacing arrow with pendulum (#376) -- Display public playlists properly for anonymous users (#488) - -i18n: - -- Added portuguese, spanish and german translations - -### Custom themes for Funkwhale - -If you ever wanted to give a custom look and feel to your instance, this is now possible. - -Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more! - -### Fix Apache2 configuration file for media block [Manual action required] - -The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served. - -On Apache2 setups, you have to replace the following line: - -```apache -<Directory /srv/funkwhale/data/media/albums> -``` - -with: - -```apache -<Directory /srv/funkwhale/data/media> -``` - -You can now restart your server: - -```sh -sudo systemctl restart apache2 -``` - -## 0.16 (2018-07-22) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Complete redesign of the library home and playlist pages (#284) -- Expose ActivityPub actors for users (#317) -- Implemented a basic but functional Github-like search on federated tracks - list (#344) -- Internationalized interface as well as translations for Arabic, French, - Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167) -- Users can now upload an avatar in their settings page (#257) - -Enhancements: - -- Added feedback when creating/updating radio (#302) -- Apply restrictions to username characters during signup -- Autoselect best language based on browser configuration (#386) -- Can now order tracks on federated track list (#326) -- Can now relaunch pending import jobs from the web interface (#323) -- Ensure we do not display pagination on single pages (#334) -- Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and - MUSIC_DIRECTORY_PATH in the deployment .env file (#350) -- Make some space for the volume slider to allow precise control (#318) -- Removed django-cacheops dependency -- Store track artist and album artist separately (#237) Better handling of - tracks with a different artist than the album artist -- The navigation bar of Library is now fixed (#375) -- Use thumbnails for avatars and covers to reduce bandwidth - -Bugfixes: - -- Ensure 750 permissions on CI artifacts (#332) -- Ensure images are not cropped in queue (#337) -- Ensure we do not import artists with empty names (#351) -- Fix notifications not closing when clicking on the cross (#366) -- Fix the most annoying offset in the whole fediverse (#369) -- Fixed persistent message in playlist modal (#304) -- Fixed unfiltered results in favorites API (#384) -- Raise a warning instead of crashing when getting a broken path in file import - (#138) -- Remove parallelization of uploads during import to avoid crashing small - servers (#382) -- Subsonic API login is now case insensitive (#339) -- Validate Date header in HTTP Signatures (#328) - -Documentation: - -- Added troubleshotting and technical overview documentation (#256) -- Arch Linux installation steps -- Document that users can use Ultrasonic on Android (#316) -- Fixed a couple of typos -- Some cosmetic improvements to the doc - -i18n: - -- Arabic translation (!302) -- Polish translation (!304) - -### Library home and playlist page overhaul - -The library home page have been completely redesigned to include: - -- other users activity (listenings, playlists and favorites) -- recently imported albums - -We think this new version showcases more music in a more useful way, let us know -what you think about it! - -The playlist page have been updated as well. - -### Internationalized interface - -After months of work, we're proud to announce our interface is now ready -for internationalization. - -Translators have already started the work of translating Funkwhale in 8 different languages, -and we're ready to add more as needed. - -You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/ - -### Better handling of tracks with a different artist than the album artist - -Some tracks involve a different artist than the album artist (e.g. a featuring) -and Funkwhale has been known to do weird things when importing such tracks, resulting -in albums that contained a single track, for instance. - -The situation should be improved with this release, as Funkwhale is now able to -store separately the track and album artist, and display it properly in the interface. - -### Users now have an ActivityPub Actor [Manual action required] - -In the process of implementing federation for user activity such as listening -history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation. - -This does not means the federation is working, but this is a needed step to implement it. - -Those profiles will be created automatically for new users, but you have to run a command -to create them for existing users. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script create_actors --no-input -``` - -On non-docker setups: - -```sh -python manage.py script create_actors --no-input -``` - -This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times. - -### Image thumbnails [Manual action required] - -To reduce bandwidth usage on slow or limited connexions and improve performance -in general, we now use smaller images in the front-end. For instance, if you have -an album cover with a 1000x1000 pixel size, we will create smaller -versions of this image (50x50, 200x200, 400x400) and reference those resized version -when we don't actually need the original image. - -Thumbnail will be created automatically for new objects, however, you have -to launch a manual command to deal with existing ones. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script create_image_variations --no-input -``` - -On non-docker setups: - -```sh -python manage.py script create_image_variations --no-input -``` - -This should be quite fast but may take up to a few minutes depending on the number -of albums you have in database. It is safe to interrupt the process or rerun it multiple times. - -### Improved search on federated tracks list - -Having a powerful but easy-to-use search is important but difficult to achieve, especially -if you do not want to have a real complex search interface. - -Github does a pretty good job with that, using a structured but simple query system -(See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests). - -This release implements a limited but working subset of this query system. You can use it only on the federated -tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well. - -This is the type of query you can run: - -- `hello world`: search for "hello" and "world" in all the available fields -- `hello in:artist` search for results where artist name is "hello" -- `spring in:artist,album` search for results where artist name or album title contain "spring" -- `artist:hello` search for results where artist name equals "hello" -- `artist:"System of a Down" domain:instance.funkwhale` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library - -### Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set explicitly [Manual action required] - -In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing -some deployment issues on non-docker setups when people forgot to uncomment them. - -From now on, those variables are uncommented, and will also be used on docker setups -to mount the volumes automatically in the docker-compose.yml file. This has been a source -of headache as well in some deployments, where you had to update both the .env file and -the compose file. - -This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH), -whose values are now used directly to set up the proper Docker volumes. - -This will only affect new deployments though. If you want to benefit from this on an -existing instance, do a backup of your `.env` and `docker-compose.yml` files and apply the following changes: - -- Ensure `MEDIA_ROOT` is uncommented in your .env file and match the absolute path where media files are stored - on your host (`/srv/funkwhale/data/media` by default) -- Ensure `STATIC_ROOT` is uncommented in your .env file and match the absolute path where static files are stored - on your host (`/srv/funkwhale/data/static` by default) -- If you use in-place import: - - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music` - - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files - are stored (`/srv/funkwhale/data/music` by default) -- Edit your docker-compose.yml file to reflect the changes: - - Search for volumes (there should be two occurrences) that contains `/app/funkwhale_api/media` on the right side, and - replace the whole line with `- "${MEDIA_ROOT}:${MEDIA_ROOT}"` - - Search for a volume that contains `/app/staticfiles` on the right side, and - replace the whole line with `- "${STATIC_ROOT}:${STATIC_ROOT}"` - - If you use in-place import, search for volumes (there should be two occurrences) that contains `/music:ro` on the right side, and - replace the whole line with `- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"` - -In the end, the `volumes` directives of your containers should look like that: - -```yaml -services: - # ... - celeryworker: - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - # ... - api: - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - - "${STATIC_ROOT}:${STATIC_ROOT}" - - ./front/dist:/frontend - # ... -``` - -### Removed Cacheops dependency - -We removed one of our dependency named django-cacheops. It was unly used in a few places, -and not playing nice with other dependencies. - -You can safely remove this dependency in your environment with `pip uninstall django-cacheops` if you're -not using docker. - -You can also safely remove any `CACHEOPS_ENABLED` setting from your environment file. - -## 0.15 (2018-06-24) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Added admin interface to manage import requests (#190) -- Added replace flag during import to replace already present tracks with a new - version of their track file (#222) -- Funkwhale's front-end can now point to any instance (#327) Removed front-end - and back-end coupling -- Management interface for users (#212) -- New invite system (#248) New invite system - -Enhancements: - -- Added "TV" to the list of highlighted words during YouTube import (#154) -- Command line import now accepts unlimited args (#242) - -Bugfixes: - -- Expose track files date in manage API (#307) -- Fixed current track restart/hiccup when shuffling queue, deleting track from - queue or reordering (#310) -- Include user's current private playlists on playlist list (#302) -- Remove link to generic radios, since they don't have detail pages (#324) - -Documentation: - -- Document that Funkwhale may be installed with YunoHost (#325) -- Documented a saner layout with symlinks for in-place imports (#254) -- Upgrade documentation now use the correct user on non-docker setups (#265) - -### Invite system - -On closed instances, it has always been a little bit painful to create accounts -by hand for new users. This release solve that by adding invitations. - -You can generate invitation codes via the "users" admin interface (you'll find a -link in the sidebar). Those codes are valid for 14 days, and can be used once -to create a new account on the instance, even if registrations are closed. - -By default, we generate a random code for invitations, but you can also use custom codes -if you need to print them or make them fancier ;) - -Invitations generation and management requires the "settings" permission. - -### Removed front-end and back-end coupling - -Even though Funkwhale's front-end has always been a Single Page Application, -talking to an API, it was only able to talk to an API on the same domain. - -There was no real technical justification behind this (only laziness), and it was -also blocking interesting use cases: - -- Use multiple customized versions of the front-end with the same instance -- Use a customized version of the front-end with multiple instances -- Use a locally hosted front-end with a remote API, which is especially useful in development - -From now on, Funkwhale's front-end can connect to any Funkwhale server. You can -change the server you are connecting to in the footer. - -Fixing this also unlocked a really interesting feature in our development/review workflow: -by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of -a merge request, making it possible for anyone to review front-end changes easily, without -the need to install a local environment. - -## 0.14.2 (2018-06-16) - -```{warning} -This release contains a fix for a permission issue. You should upgrade -as soon as possible. Read the changelog below for more details. -``` - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Enhancements: - -- Added feedback on shuffle button (#262) -- Added multiple warnings in the documentation that you should never run - makemigrations yourself (#291) -- Album cover served in http (#264) -- Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25) - (!252) -- Display file size in human format during file upload (#289) -- Switch from BSD-3 licence to AGPL-3 licence (#280) - -Bugfixes: - -- Ensure radios can only be edited and deleted by their owners (#311) -- Fixed admin menu not showing after login (#245) -- Fixed broken pagination in Subsonic API (#295) -- Fixed duplicated websocket connection on timeline (#287) - -Documentation: - -- Improved documentation about in-place imports setup (#298) - -Other: - -- Added Black and flake8 checks in CI to ensure consistent code styling and - formatting (#297) -- Added bug and feature issue templates (#299) - -### Permission issues on radios - -Because of an error in the way we checked user permissions on radios, -public radios could be deleted by any logged-in user, even if they were not -the owner of the radio. - -We recommend instances owners to upgrade as fast as possible to avoid any abuse -and data loss. - -### Funkwhale is now licenced under AGPL-3 - -Following the recent switch made by PixelFed -(https://github.com/dansup/pixelfed/issues/143), we decided along with -the community to relicence Funkwhale under the AGPL-3 licence. We did this -switch for various reasons: - -- This is better aligned with other fediverse software -- It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale - -As end users and instance owners, this does not change anything. You can -continue to use Funkwhale exactly as you did before :) - -### Apache support for websocket - -Up until now, our Apache2 configuration was not working with websockets. This is now -solved by adding this at the beginning of your Apache2 configuration file: - -```apache -Define funkwhale-api-ws ws://localhost:5000 -``` - -And this, before the "/api" block: - -```apache -# Activating WebSockets -ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity -``` - -Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available. - -### Serving album covers in https (Apache2 proxy) - -Two issues are addressed here. The first one was about Django replying with -mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` -allows Django to know that the client is using https, and that the reply must -be https as well. - -Second issue was a problem of permission causing Apache a denied access to -album cover folder. It is solved by adding another block for this path in -the Apache configuration file for funkwhale. - -Here is how to modify your `funkwhale.conf` apache2 configuration: - -```apache -<VirtualHost *:443> - # ... - #Add this new line - RequestHeader set X-Forwarded-Proto "https" - # ... - # Add this new block below the other <Directory/> blocks - # replace /srv/funkwhale/data/media with the path to your media directory - # if you're not using the standard layout. - <Directory /srv/funkwhale/data/media/albums> - Options FollowSymLinks - AllowOverride None - Require all granted - </Directory> - # ... -</VirtualHost> -``` - -### About the makemigrations warning - -You may sometimes get the following warning while applying migrations: - -``` -"Your models have changes that are not yet reflected in a migration, and so won't be applied." -``` - -This is a warning, not an error, and it can be safely ignored. -Never run the `makemigrations` command yourself. - -## 0.14.1 (2018-06-06) - -Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html - -Enhancements: - -- Display server version in the footer (#270) -- fix_track_files will now update files with bad mimetype (and not only the one - with no mimetype) (#273) -- Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz - (#288) -- Removed alpha-state transcoding support (#271) - -Bugfixes: - -- Broken logging statement during import error (#274) -- Broken search bar on library home (#278) -- Do not crash when importing track with an artist that do not match the - release artist (#237) -- Do not crash when tag contains multiple uuids with a / separator (#267) -- Ensure we do not store bad mimetypes (such as application/x-empty) (#266) -- Fix broken "play all" button that played only 25 tracks (#281) -- Fixed broken track download modal (overflow and wrong URL) (#239) -- Removed hardcoded size limit in file upload widget (#275) - -Documentation: - -- Added warning about \_protected/music location in nginx configuration (#247) - -### Removed alpha-state transcoding (#271) - -A few months ago, a basic transcoding feature was implemented. Due to the way -this feature was designed, it was slow, CPU intensive on the server side, -and very tightly coupled to the reverse-proxy configuration, preventing -it to work Apache2, for instance. It was also not compatible with Subsonic clients. - -Based on that, we're currently removing support for transcoding -**in its current state**. The work on a better designed transcoding feature -can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272. - -You don't have to do anything on your side, but you may want to remove -the now obsolete configuration from your reverse proxy file (nginx only): - -```nginx -# Remove those blocks: - -# transcode cache -proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; - -# Transcoding logic and caching -location = /transcode-auth { - include /etc/nginx/funkwhale_proxy.conf; - # needed so we can authenticate transcode requests, but still - # cache the result - internal; - set $query ''; - # ensure we actually pass the jwt to the underlytin auth url - if ($request_uri ~* "[^\?]+\?(.*)$") { - set $query $1; - } - proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; - proxy_pass_request_body off; - proxy_set_header Content-Length ""; -} - -location /api/v1/trackfiles/transcode/ { - include /etc/nginx/funkwhale_proxy.conf; - # this block deals with authenticating and caching transcoding - # requests. Caching is heavily recommended as transcoding - # is a CPU intensive process. - auth_request /transcode-auth; - if ($args ~ (.*)jwt=[^&]*(.*)) { - set $cleaned_args $1$2; - } - proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; - proxy_cache transcode; - proxy_cache_valid 200 7d; - proxy_ignore_headers "Set-Cookie"; - proxy_hide_header "Set-Cookie"; - add_header X-Cache-Status $upstream_cache_status; - proxy_pass http://funkwhale-api; -} -# end of transcoding logic -``` - -## 0.14 (2018-06-02) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Admins can now configure default permissions that will be granted to all - registered users (#236) -- Files management interface for users with "library" permission (#223) -- New action table component for quick and efficient batch actions (#228) This - is implemented on the federated tracks pages, but will be included in other - pages as well depending on the feedback. - -Enhancements: - -- Added a new "upload" permission that allows user to launch import and view - their own imports (#230) -- Added Support for OggTheora in import. -- Autoremove media files on model instance deletion (#241) -- Can now import a whole remote library at once thanks to new Action Table - component (#164) -- Can now use album covers from flac/mp3 metadata and separate file in track - directory (#219) -- Implemented getCovertArt in Subsonic API to serve album covers (#258) -- Implemented scrobble endpoint of subsonic API, listenings are now tracked - correctly from third party apps that use this endpoint (#260) -- Retructured music API to increase performance and remove useless endpoints - (#224) - -Bugfixes: - -- Consistent constraints/checks for URL size (#207) -- Display proper total number of tracks on radio detail (#225) -- Do not crash on flac import if musicbrainz tags are missing (#214) -- Empty save button in radio builder (#226) -- Ensure anonymous users can use the app if the instance is configured - accordingly (#229) -- Ensure inactive users cannot get auth tokens (#218) This was already the case - bug we missed some checks -- File-upload import now supports Flac files (#213) -- File-upload importer should now work properly, assuming files are tagged - (#106) -- Fixed a few broken translations strings (#227) -- Fixed broken ordering in front-end lists (#179) -- Fixed ignored page_size parameter on artist and favorites list (#240) -- Read ID3Tag Tracknumber from TRCK (#220) -- We now fetch album covers regardless of the import methods (#231) - -Documentation: - -- Added missing subsonic configuration block in deployment vhost files (#249) -- Moved upgrade doc under install doc in TOC (#251) - -Other: - -- Removed acoustid support, as the integration was buggy and error-prone (#106) - -### Files management interface - -This is the first bit of an ongoing work that will span several releases, to -bring more powerful library management features to Funkwhale. This iteration -includes a basic file management interface where users with the "library" -permission can list and search available files, order them using -various criteria (size, bitrate, duration...) and delete them. - -### New "upload" permission - -This new permission is helpful if you want to give upload/import rights -to some users, but don't want them to be able to manage the library as a whole: -although there are no controls yet for managing library in the fron-end, -subsequent release will introduce management interfaces for artists, files, -etc. - -Because of that, users with the "library" permission will have much more power, -and will also be able to remove content from the platform. On the other hand, -users with the "upload" permission will only have the ability to add new -content. - -Also, this release also includes a new feature called "default permissions": -those are permissions that are granted to every users on the platform. -On public/open instances, this will play well with the "upload" permission -since everyone will be able to contribute to the instance library without -an admin giving the permission to every single user. - -### Smarter album cover importer - -In earlier versions, covers where only imported when launching a YouTube import. -Starting from this release, covers will be imported regardless of the import mode -(file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers -in the following order: - -1. In the imported file itself (FLAC/MP3 only) -2. In a cover.jpg or cover.png in the file directory -3. By fetching cover art from Musibrainz, assuming the file is tagged correctly - -This will only work for newly imported tracks and albums though. In the future, -we may offer an option to refetch album covers from the interface, but in the -meantime, you can use the following snippet: - -```python -# Store this in /tmp/update_albums.py -from funkwhale_api.music.models import Album, TrackFile -from funkwhale_api.music.tasks import update_album_cover - -albums_without_covers = Album.objects.filter(cover='') -total = albums_without_covers.count() -print('Found {} albums without cover'.format(total)) -for i, album in enumerate(albums_without_covers.iterator()): - print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) - f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() - update_album_cover(album, track_file=f) -``` - -Then launch it: - -```sh -# docker setups -cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python - -# non-docker setups -source /srv/funkwhale/load_env -source /srv/funkwhale/virtualenv/bin/activate -cat /tmp/update_albums.py | python manage.py shell -i python - -# cleanup -rm /tmp/update_albums.py -``` - -```{note} -Depending on your number of albums, the previous snippet may take some time -to execute. You can interrupt it at any time using ctrl-c and relaunch it later, -as it's idempotent. -``` - -### Music API changes - -This release includes an API break. Even though the API is advertised -as unstable, and not documented, here is a brief explanation of the change in -case you are using the API in a client or in a script. Summary of the changes: - -- `/api/v1/artists` does not includes a list of tracks anymore. It was to heavy - to return all of this data all the time. You can get all tracks for an - artist using `/api/v1/tracks?artist=artist_id` -- Additionally, `/api/v1/tracks` now support an `album` filter to filter - tracks matching an album -- `/api/v1/artists/search`, `/api/v1/albums/search` and `/api/v1/tracks/search` - endpoints are removed. Use `/api/v1/{artists|albums|tracks}/?q=yourquery` - instead. It's also more powerful, since you can combine search with other - filters and ordering options. -- `/api/v1/requests/import-requests/search` endpoint is removed as well. - Use `/api/v1/requests/import-requests/?q=yourquery` - instead. It's also more powerful, since you can combine search with other - filters and ordering options. - -Of course, the front-end was updated to work with the new API, so this should -not impact end-users in any way, apart from slight performance gains. - -```{note} -The API is still not stable and may evolve again in the future. API freeze -will come at a later point. -``` - -### Flac files imports via upload - -You have nothing to do to benefit from this, however, since Flac files -tend to be a lot bigger than other files, you may want to increase the -`client_max_body_size` value in your Nginx configuration if you plan -to upload flac files. - -### Missing subsonic configuration block in vhost files - -Because of a missing block in the sample Nginx and Apache configurations, -instances that were deployed after the 0.13 release are likely to be unable -to answer to Subsonic clients (the missing bits were properly documented -in the changelog). - -Ensure you have the following snippets in your Nginx or Apache configuration -if you plan to use the Subsonic API. - -Nginx: - -```nginx -location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; -} -``` - -Apache2: - -```apache -<Location "/rest"> - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest - </Location> -``` - -## 0.13 (2018-05-19) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Can now import and play flac files (#157) -- Simpler permission system (#152) -- Store file length, size and bitrate (#195) -- We now have a brand new instance settings interface in the front-end (#206) - -Enhancements: - -- Disabled browsable HTML API in production (#205) -- Instances can now indicate on the nodeinfo endpoint if they want to remain - private (#200) - -Bugfixes: - -- .well-known/nodeinfo endpoint can now answer to request with Accept: - application/json (#197) -- Fixed escaping issue of track name in playlist modal (#201) -- Fixed missing dot when downloading file (#204) -- In-place imported tracks with non-ascii characters don't break reverse-proxy - serving (#196) -- Removed Python 3.6 dependency (secrets module) (#198) -- Uplayable tracks are now properly disabled in the interface (#199) - -### Instance settings interface - -Prior to this release, the only way to update instance settings (such as -instance description, signup policy, federation configuration, etc.) was using -the admin interface provided by Django (the back-end framework which power the API). - -This interface worked, but was not really-user friendly and intuitive. - -Starting from this release, we now offer a dedicated interface directly -in the front-end. You can view and edit all your instance settings from here, -assuming you have the required permissions. - -This interface is available at `/manage/settings` and via link in the sidebar. - -### Storage of bitrate, size and length in database - -Starting with this release, when importing files, Funkwhale will store -additional information about audio files: - -- Bitrate -- Size (in bytes) -- Duration - -This change is not retroactive, meaning already imported files will lack those -information. The interface and API should work as before in such case, however, -we offer a command to deal with legacy files and populate the missing values. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py fix_track_files -``` - -On non-docker setups: - -```sh -# from your activated virtualenv -python manage.py fix_track_files -``` - -```{note} -The execution time for this command is proportional to the number of -audio files stored on your instance. This is because we need to read the -files from disk to fetch the data. You can run it in the background -while Funkwhale is up. - -It's also safe to interrupt this command and rerun it at a later point, or run -it multiple times. - -Use the --dry-run flag to check how many files would be impacted. -``` - -### Simpler permission system - -Starting from this release, the permission system is much simpler. Up until now, -we were using Django's built-in permission system, which was working, but also -quite complex to deal with. - -The new implementation relies on simpler logic, which will make integration -on the front-end in upcoming releases faster and easier. - -If you have manually given permissions to users on your instance, -you can migrate those to the new system. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input -``` - -On non-docker setups: - -```sh -# in your virtualenv -python api/manage.py script django_permissions_to_user_permissions --no-input -``` - -There is still no dedicated interface to manage user permissions, but you -can use the admin interface at `/api/admin/users/user/` for that purpose in -the meantime. - -## 0.12 (2018-05-09) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Subsonic API implementation to offer compatibility with existing clients such - as DSub (#75) -- Use nodeinfo standard for publishing instance information (#192) - -Enhancements: - -- Play button now play tracks immediately instead of appending them to the - queue (#99, #156) - -Bugfixes: - -- Fix broken federated import (#193) - -Documentation: - -- Up-to-date documentation for upgrading front-end files on docker setup (#132) - -### Subsonic API - -This release implements some core parts of the Subsonic API, which is widely -deployed in various projects and supported by numerous clients. - -By offering this API in Funkwhale, we make it possible to access the instance -library and listen to the music without from existing Subsonic clients, and -without developing our own alternative clients for each and every platform. - -Most advanced Subsonic clients support offline caching of music files, -playlist management and search, which makes them well-suited for nomadic use. - -Please see [our list of supported apps](https://funkwhale.audio/en_US/apps) -for more information about supported clients and user instructions. - -At the instance-level, the Subsonic API is enabled by default, but require -and additional endpoint to be added in you reverse-proxy configuration. - -On nginx, add the following block: - -```nginx -location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; -} -``` - -On Apache, add the following block: - -```apache -<Location "/rest"> - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest -</Location> -``` - -The Subsonic can be disabled at the instance level from the django admin. - -```{note} -Because of Subsonic's API design which assumes cleartext storing of -user passwords, we chose to have a dedicated, separate password -for that purpose. Users can generate this password from their -settings page in the web client. -``` - -### Nodeinfo standard for instance information and stats - -```{warning} -The ``/api/v1/instance/stats/`` endpoint which was used to display -instance data in the about page is removed in favor of the new -``/api/v1/instance/nodeinfo/2.0/`` endpoint. -``` - -In earlier version, we where using a custom endpoint and format for -our instance information and statistics. While this was working, -this was not compatible with anything else on the fediverse. - -We now offer a nodeinfo 2.0 endpoint which provides, in a single place, -all the instance information such as library and user activity statistics, -public instance settings (description, registration and federation status, etc.). - -We offer two settings to manage nodeinfo in your Funkwhale instance: - -1. One setting to completely disable nodeinfo, but this is not recommended - as the exposed data may be needed to make some parts of the front-end - work (especially the about page). -2. One setting to disable only usage and library statistics in the nodeinfo - endpoint. This is useful if you want the nodeinfo endpoint to work, - but don't feel comfortable sharing aggregated statistics about your library - and user activity. - -To make your instance fully compatible with the nodeinfo protocol, you need to -to edit your nginx configuration file: - -```nginx -# before -# ... -location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; -} -# ... - -# after -# ... -location /.well-known/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/; -} -# ... -``` - -You can do the same if you use apache: - -```apache -# before -# ... -<Location "/.well-known/webfinger"> - ProxyPass ${funkwhale-api}/.well-known/webfinger - ProxyPassReverse ${funkwhale-api}/.well-known/webfinger -</Location> -# ... - -# after -# ... -<Location "/.well-known/"> - ProxyPass ${funkwhale-api}/.well-known/ - ProxyPassReverse ${funkwhale-api}/.well-known/ -</Location> -# ... -``` - -This will ensure all well-known endpoints are proxied to funkwhale, and -not just webfinger one. - -Links: - -- About nodeinfo: https://github.com/jhass/nodeinfo - -## 0.11 (2018-05-06) - -Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html - -Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab) -for bringing Apache2 support to Funkwhale and contributing on other issues. -Thank you! - -Features: - -- Funkwhale now works behind an Apache2 reverse proxy (!165) - check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2 - if you want to try it! -- Users can now request password reset by email, assuming a SMTP server was - correctly configured (#187) - -Enhancements: - -- Added a fix_track_files command to run checks and fixes against library - (#183) -- Avoid fetching Actor object on every request authentication -- Can now relaunch errored jobs and batches (#176) -- List pending requests by default, added a status filter for requests (#109) -- More structured menus in sidebar, added labels with notifications -- Sample virtual-host file for Apache2 reverse-proxy (!165) -- Store high-level settings (such as federation or auth-related ones) in - database (#186) - -Bugfixes: - -- Ensure in place imported files get a proper mimetype (#183) -- Federation cache suppression is now simpler and also deletes orphaned files - (#189) -- Fixed small UI glitches/bugs in federation tabs (#184) -- X-sendfile not working with in place import (#182) - -Documentation: - -- Added a documentation area for third-party projects (#180) -- Added documentation for optimizing Funkwhale and reduce its memory footprint. -- Document that the database should use an utf-8 encoding (#185) -- Foundations for API documentation with Swagger (#178) - -### Database storage for high-level settings - -Due to the work done in #186, the following environment variables have been -deprecated: - -- FEDERATION_ENABLED -- FEDERATION_COLLECTION_PAGE_SIZE -- FEDERATION_MUSIC_NEEDS_APPROVAL -- FEDERATION_ACTOR_FETCH_DELAY -- PLAYLISTS_MAX_TRACKS -- API_AUTHENTICATION_REQUIRED - -Configuration for this settings has been moved to database, as it will provide -a better user-experience, by allowing you to edit these values on-the-fly, -without restarting Funkwhale processes. - -You can leave those environment variables in your .env file for now, as the -values will be used to populate the database entries. We'll make a proper -announcement when the variables won't be used anymore. - -Please browse https://docs.funkwhale.audio/configuration.html#instance-settings -for more information about instance configuration using the web interface. - -### System emails - -Starting from this release, Funkwhale will send two types -of emails: - -- Email confirmation emails, to ensure a user's email is valid -- Password reset emails, enabling user to reset their password without an admin's intervention - -Email sending is disabled by default, as it requires additional configuration. -In this mode, emails are simply outputted on stdout. - -If you want to actually send those emails to your users, you should edit your -.env file and tweak the `EMAIL_CONFIG` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` -for more details. - -```{note} -As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, -which was not documented, has no effect anymore. You can safely remove it from -your .env file if it is set. -``` - -### Proxy headers for non-docker deployments - -For non-docker deployments, add `--proxy-headers` at the end of the `daphne` -command in :file:`/etc/systemd/system/funkwhale-server.service`. - -This will ensure the application receive the correct IP address from the client -and not the proxy's one. - -## 0.10 (2018-04-23) - -Features: - -- Can now import files in-place from the CLI importer (#155) - -Enhancements: - -- Avoid downloading audio files multiple times from remote libraries (#163) -- Better file import performance and error handling (#144) -- Import job and batch API and front-end have been improved with better - performance, pagination and additional filters (#171) -- Increased max_length on TrackFile.source, this will help when importing files - with a really long path (#142) -- Player is back in Queue tab (#150) - -Bugfixes: - -- Fail graciously when AP representation includes a null_value for mediaType -- Fix sidebar tabs not showing under small resolution under Chrome (#173) -- Fixed broken login due to badly configured Axios (#172) -- Fixed broken playlist modal after login (#155) -- Fixed queue reorder or track deletion restarting currently playing track - (#151) -- Radio will now append new track if you delete the last track in queue (#145) -- Reset all sensitive front-end data on logout (#124) -- Typos/not showing text due to i18n work (#175) - -Documentation: - -- Better documentation for hardware requirements and memory usage (#165) - -### In-place import - -This release includes in-place imports for the CLI import. This means you can -load gigabytes of music into funkwhale without worrying about about Funkwhale -copying those music files in its internal storage and eating your disk space. - -[This new feature is documented here](https://docs.funkwhale.audio/importing-music.html#in-place-import) -and require additional configuration to ensure funkwhale and your webserver can -serve those files properly. - -**Non-docker users:** - -Assuming your music is stored in `/srv/funkwhale/data/music`, add the following -block to your nginx configuration: - -```nginx -location /_protected/music { - internal; - alias /srv/funkwhale/data/music; -} -``` - -And the following to your .env file: - -```sh -MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music -``` - -**Docker users:** - -Assuming your music is stored in `/srv/funkwhale/data/music`, add the following -block to your nginx configuration: - -```nginx -location /_protected/music { - internal; - alias /srv/funkwhale/data/music; -} -``` - -Assuming you have the following volume directive in your `docker-compose.yml` -(it's the default): `/srv/funkwhale/data/music:/music:ro`, then add -the following to your .env file: - -```sh -# this is the path in the container -MUSIC_DIRECTORY_PATH=/music -# this is the path on the host -MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music -``` - -## 0.9.1 (2018-04-17) - -Bugfixes: - -- Allow null values for musicbrainz_id in Audio ActivityPub representation -- Fixed broken permission check on library scanning and too aggressive page - validation - -## 0.9 (2018-04-17) - -Features: - -- Add internationalization support (#5) -- Can now follow and import music from remote libraries (#136, #137) - -Enhancements: - -- Added a i18n-extract yarn script to extract strings to PO files (#162) -- User admin now includes signup and last login dates (#148) -- We now use a proper user agent including instance version and url during - outgoing requests - -### Federation is here! - -This is for real this time, and includes: - -- Following other Funkwhale libraries -- Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time) -- Searching across federated catalogs - -Note that by default, federation is opt-in, on a per-instance basis: -instances will request access to your catalog, and you can accept or refuse -those requests. You can also revoke the access at any time. - -Documentation was updated with relevant instructions to use and benefit -from this new feature: https://docs.funkwhale.audio/federation.html - -### Preparing internationalization - -Funkwhale's front-end as always been english-only, and this is a barrier -to new users. The work make Funkwhale's interface translatable was started -in this release by Baptiste. Although nothing is translated yet, -this release includes behind the stage changes that will make it possible in -the near future. - -Many thank to Baptiste for the hard work and for figuring out a proper solution -to this difficult problem. - -### Upgrade path - -In addition to the usual instructions from -https://docs.funkwhale.audio/upgrading.html, non-docker users will have -to setup an additional systemd unit file for recurrent tasks. - -This was forgotten in the deployment documentation, but recurrent tasks, -managed by the celery beat process, will be needed more and more in subsequent -releases. Right now, we'll be using to clear the cache for federated music files -and keep disk usage to a minimum. - -In the future, they will also be needed to refetch music metadata or federated -information periodically. - -Celery beat can be enabled easily: - -```sh -curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" -# Also edit /etc/systemd/system/funkwhale.target -# and ensure the Wants= line contains the following: -# Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service -nano /etc/systemd/system/funkwhale.target -# reload configuration -systemctl daemon-reload -``` - -Docker users already have celerybeat enabled. - -## 0.8 (2018-04-02) - -Features: - -- Add a detail page for radios (#64) -- Implemented page title binding (#1) -- Previous Track button restart playback after 3 seconds (#146) - -Enhancements: - -- Added credits to Francis Gading for the logotype (#101) -- API endpoint for fetching instance activity and updated timeline to use this - new endpoint (#141) -- Better error messages in case of missing environment variables (#140) -- Implemented a @test@yourfunkwhaledomain bot to ensure federation works - properly. Send it "/ping" and it will answer back :) -- Queue shuffle now apply only to tracks after the current one (#97) -- Removed player from queue tab and consistently show current track in queue - (#131) -- We now restrict some usernames from being used during signup (#139) - -Bugfixes: - -- Better error handling during file import (#120) -- Better handling of utf-8 filenames during file import (#138) -- Converted favicon from .ico to .png (#130) -- Upgraded to Python 3.6 to fix weird but harmless weakref error on django task - (#121) - -Documentation: - -- Documented the upgrade process (#127) - -### Preparing for federation - -Federation of music libraries is one of the most asked feature. -While there is still a lot of work to do, this version includes -the foundation that will enable funkwhale servers to communicate -between each others, and with other federated software, such as -Mastodon. - -Funkwhale will use ActivityPub as it's federation protocol. - -In order to prepare for federation (see #136 and #137), new API endpoints -have been added under /federation and /.well-known/webfinger. - -For these endpoints to work, you will need to update your nginx configuration, -and add the following snippets: - -```nginx -location /federation/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/federation/; -} -location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; -} -``` - -This will ensure federation endpoints will be reachable in the future. -You can of course skip this part if you know you will not federate your instance. - -A new `FEDERATION_ENABLED` env var have also been added to control whether -federation is enabled or not on the application side. This settings defaults -to True, which should have no consequences at the moment, since actual -federation is not implemented and the only available endpoints are for -testing purposes. - -Add `FEDERATION_ENABLED=false` to your .env file to disable federation -on the application side. - -To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, -and sending it "/ping", for example, via Mastodon, should trigger -a response. - -## 0.7 (2018-03-21) - -Features: - -- Can now filter artists and albums with no listenable tracks (#114) -- Improve the style of the sidebar to make it easier to understand which tab is - selected (#118) -- On artist page, albums are not sorted by release date, if any (#116) -- Playlists are here \o/ :tada: (#3, #93, #94) -- Use django-cacheops to cache common ORM requests (#117) - -Bugfixes: - -- Fixed broken import request admin (#115) -- Fixed forced redirection to login event with - API_AUTHENTICATION_REQUIRED=False (#119) -- Fixed position not being reset properly when playing the same track - multiple times in a row -- Fixed synchronized start/stop radio buttons for all custom radios (#103) -- Fixed typo and missing icon on homepage (#96) - -Documentation: - -- Up-to-date and complete development and contribution instructions in - README.rst (#123) - -## 0.6.1 (2018-03-06) - -Features: - -- Can now skip acoustid on file import with the --no-acoustid flag (#111) - -Bugfixes: - -- Added missing batch id in output during import (#112) -- Added some feedback on the play button (#100) -- Smarter pagination which takes a fixed size (#84) - -Other: - -- Completely removed django-cachalot from the codebase (#110). You can safely - remove the CACHALOT_ENABLED setting from your .env file - -## 0.6 (2018-03-04) - -Features: - -- Basic activity stream for listening and favorites (#23) -- Switched to django-channels and daphne for serving HTTP and websocket (#34) - -### Upgrades notes - -This version contains breaking changes in the way funkwhale is deployed, -please read the notes carefully. - -### Instance timeline - -A new "Activity" page is now available from the sidebar, where you can -browse your instance activity. At the moment, this includes other users -favorites and listening, but more activity types will be implemented in the -future. - -Internally, we implemented those events by following the Activity Stream -specification, which will help us to be compatible with other networks -in the long-term. - -A new settings page has been added to control the visibility of your activity. -By default, your activity will be browsable by anyone on your instance, -but you can switch to a full private mode where nothing is shared. - -The setting form is available in your profile. - -### Switch from gunicorn to daphne - -This release include an important change in the way we serve the HTTP API. -To prepare for new realtime features and enable websocket support in Funkwhale, -we are now using django-channels and daphne to serve HTTP and websocket traffic. - -This replaces gunicorn and the switch should be easy assuming you -follow the upgrade process described below. - -If you are using docker, please remove the command instruction inside the -api service, as the up-to-date command is now included directly in the image -as the default entry point: - -```yaml -services: - api: - restart: unless-stopped - image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} - command: ./compose/django/gunicorn.sh # You can remove this line -``` - -On non docker setups, you'll have to update the `[Service]` block of your -funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn. - -The new configuration should be similar to this: - -```ini -[Service] -User=funkwhale -# adapt this depending on the path of your funkwhale installation -WorkingDirectory=/srv/funkwhale/api -EnvironmentFile=/srv/funkwhale/config/.env -ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application -``` - -Ensure you update funkwhale's dependencies as usual to install the required -packages. - -On both docker and non-docker setup, you'll also have to update your nginx -configuration for websocket support. Ensure you have the following blocks -included in your virtualhost file: - -```nginx -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -server { - # ... - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; -} -``` - -Remember to reload your nginx server after the edit. - -## 0.5.4 (2018-02-28) - -Features: - -- Now stop running radio when clearing queue (#98) - -Bugfixes: - -- Fixed queue skipping tracks (#91) -- Now loop properly on queue when we only have one track (#95) - -## 0.5.3 (2018-02-27) - -Features: - -- Added admin interface for radios, track files, favorites and import requests (#80) -- Added basic instance stats on /about (#82) -- Search now unaccent letters for queries like "The DĆø" or "Bjƶrk" yielding more results (#81) - -Bugfixes: - -- Always use username in sidebar (#89) -- Click event outside of player icons (#83) -- Fixed broken import because of missing transaction -- Now always load next radio track on last queue track ended (#87) -- Now exclude tracks without file from radio candidates (#88) -- skip to next track properly on 40X errors (#86) - -Other: - -- Switched to towncrier for changelog management and compilation - -## 0.5.2 (2018-02-26) - -- Fixed broken file import due to wrong url (#73) -- More accurate mimetype detection -- Fixed really small size on small screens -- Added masonry layout for artists, requests and radios (#68) -- We now have a favicon! -- Fixed truncated play icon (#65) - -## 0.5.1 (2018-02-24) - -- Front: Fixed broken ajax call on radio builder (#69) -- Front: Shuffle now restart next track from beginning (#70) -- Front: volume slider should now have the same style everywhere (#72) - -## 0.5 (2018-02-24) - -- Front: Now reset player colors when track has no cover (#46) -- Front: play button now disabled for unplayable tracks -- API: You can now enable or disable registration on the fly, via a preference (#58) -- Front: can now signup via the web interface (#35) -- Front: Fixed broken redirection on login -- Front: Fixed broken error handling on settings and login form - -About page: - -There is a brand new about page on instances (/about), and instance -owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/). - -Transcoding: - -Basic transcoding is now available to/from the following formats : ogg and mp3. - -_This is still an alpha feature at the moment, please report any bug._ - -This relies internally on FFMPEG and can put some load on your server. -It's definitely recommended you setup some caching for the transcoded files -at your webserver level. Check the the example nginx file at deploy/nginx.conf -for an implementation. - -On the frontend, usage of transcoding should be transparent in the player. - -Music Requests: - -This release includes a new feature, music requests, which allows users -to request music they'd like to see imported. -Admins can browse those requests and mark them as completed when -an import is made. - -## 0.4 (2018-02-18) - -- Front: ambiant colors in player based on current track cover (#59) -- Front: simplified front dev setup thanks to webpack proxy (#59) -- Front: added some unittests for the store (#55) -- Front: fixed broken login redirection when 401 -- Front: Removed autoplay on page reload -- API: Added a /instance/settings endpoint -- Front: load /instance/settings on page load -- Added settings to report JS and Python error to a Sentry instance - This is disabled by default, but feel free to enable it if you want - to help us by sending your error reports :) (#8) - -## 0.3.5 (2018-01-07) - -- Smarter BACKEND_URL in frontend - -## 0.3.4 (2018-01-07) - -- Fixed wrong URL construction in ajax call - -## 0.3.3 (2018-01-07) - -- Users can now create their own dynamic radios (#51) - -## 0.3.2 - -- Fixed an issue in the main dockerfile - -## 0.3.1 - -- Revamped all import logic, everything is more tested and consistent -- Can now use Acoustid in file imports to automatically grab metadata from musicbrainz -- Brand new file import wizard - -## 0.2.7 - -- Shortcuts: can now use the `f` shortcut to toggle the currently playing track - as a favorite (#53) -- Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53) -- Player: Added looping controls and shortcuts (#52) -- Player: Added shuffling controls and shortcuts (#52) -- Favorites: can now modify the ordering of track list (#50) -- Library: can now search/reorder results on artist browsing view (#50) -- Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files -- Fixed #56: invalidate tokens on password change, also added change password form -- Fixed #57: now refresh jwt token on page refresh -- removed ugly dividers in batch import list -- Fixed a few padding issues -- Now persist/restore queue/radio/player state automatically -- Removed old broken imports -- Now force tests paths -- Fixed #54: Now use pytest everywhere \o/ -- Now use vuex to manage state for favorites -- Now use vuex to manage state for authentication -- Now use vuex to manage state for player/queue/radios - -## 0.2.6 (2017-12-15) - -- Fixed broken Dockerfile - -## 0.2.5 (2017-12-15) - -Features: - -- Import: can now specify search template when querying import sources (#45) -- Login form: now redirect to previous page after login (#2) -- 404: a decent 404 template, at least (#48) - -Bugfixes: - -- Player: better handling of errors when fetching the audio file (#46) -- Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49) - -Tech: - -- Django 2 compatibility, lot of packages upgrades (#47) - -## 0.2.4 (2017-12-14) - -Features: - -- Models: now store release group mbid on Album model (#7) -- Models: now bind import job to track files (#44) - -Bugfixes: - -- Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43) diff --git a/docs/changes/funkwhale-0-changelog.rst b/docs/changes/funkwhale-0-changelog.md similarity index 72% rename from docs/changes/funkwhale-0-changelog.rst rename to docs/changes/funkwhale-0-changelog.md index f0687e191..c24ce8e2a 100644 --- a/docs/changes/funkwhale-0-changelog.rst +++ b/docs/changes/funkwhale-0-changelog.md @@ -1,8 +1,6 @@ -Funkwhale 0.x changelog -======================= +# Funkwhale 0.x changelog -0.21.2 (2020-07-27) -------------------- +## 0.21.2 (2020-07-27) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html @@ -14,7 +12,6 @@ Enhancements: - Support ordering=random for artists, albums, tracks and channels endpoints (#1145) - Use role=alert on forms/toast message to improve accessibility (#1134) - Bugfixes: - Fix embedded player not working on channel series/album (#1175) @@ -32,17 +29,14 @@ Contributors to this release (development, documentation, reviews): - Bheesham Persaud - CiarĆ”n Ainsworth - -0.21.1 (2020-06-11) -------------------- +## 0.21.1 (2020-06-11) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - Features: -- Support a --watch mode with ``import_files`` to automatically add, update and remove files when filesystem is updated (#721) +- Support a --watch mode with `import_files` to automatically add, update and remove files when filesystem is updated (#721) Enhancements: @@ -53,7 +47,6 @@ Enhancements: - Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154) - Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151) - Bugfixes: - Added safeguard to ensure local uploads are never purged from cache (#1086) @@ -64,25 +57,23 @@ Bugfixes: - Fixed a wording issue on artist channel page (#1117) - Fixed crash on python 3.5 with cli importer (#1155) - Fixed issue when displaying starred tracks on subsonic (#1082) -- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper mimetypes on existing uploads. +- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run `python manage.py fix_uploads --mimetype` to set proper mimetypes on existing uploads. - Fixed page not refreshing when switching between My Library and Explore sections (#1091) - Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147) - Fixed wrong album and track count in admin artist API (#1096) - Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078) -Small API breaking change in ``/api/v1/libraries`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Small API breaking change in `/api/v1/libraries` To allow easier crawling of public libraries on a pod,we had to make a slight breaking change -to the behaviour of ``GET /api/v1/libraries``. +to the behaviour of `GET /api/v1/libraries`. Before, it returned only libraries owned by the current user. Now, it returns all the accessible libraries (including ones from other users and pods). If you are consuming the API via a third-party client and need to retrieve your libraries, -use the ``scope`` parameter, like this: ``GET /api/v1/libraries?scope=me`` - +use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me` Contributors to this release (development, documentation, reviews, testing): @@ -93,9 +84,7 @@ Contributors to this release (development, documentation, reviews, testing): - Siren - Tony Wasserka - -0.21 "Agate" (2020-04-24) -------------------------- +## 0.21 "Agate" (2020-04-24) This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3 @@ -104,8 +93,7 @@ We are truly grateful as well to the dozens of people who contributed to this re Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html, there are also additional operations you need to execute, listed in the changelog below (search "Manual action"). -Channels and podcasts -^^^^^^^^^^^^^^^^^^^^^ +### Channels and podcasts Funkwhale 0.21 includes a brand new feature: Channels! @@ -121,15 +109,13 @@ Many, many thanks to the numerous people who helped with the feature design, dev to the members of the working group who met every week for months in order to get this done, and the members of other third-party projects who took the time to work with us to ensure compatibility. -Redesigned navigation, player and queue -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Redesigned navigation, player and queue This release includes a full redesign of our navigation, player and queue. Overall, it should provide a better, less confusing experience, especially on mobile devices. This redesign was suggested 14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done! -Improved search bar for searching remote objects -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Improved search bar for searching remote objects The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly: @@ -137,8 +123,7 @@ The search bar now support fetching arbitrary objects using a URL. In particular - Listen a public track from another pod - Subscribe to a channel -Screening for sign-ups and custom sign-up form -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Screening for sign-ups and custom sign-up form Instance admins can now configure their pod so that registrations required manual approval from a moderator. This is especially useful on private or semi-private pods where you don't want to close registrations completely, @@ -152,15 +137,13 @@ In addition, it's also possible to customize the sign-up form by: - Providing a custom help text, in markdown format - Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods -Federated reports -^^^^^^^^^^^^^^^^^ +### Federated reports It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed. This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers. -Improved search performance -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Improved search performance Our search engine went through a full rewrite to make it faster. This new engine is enabled by default when using the search bar, or when searching for artists, albums and tracks. It leverages @@ -171,36 +154,37 @@ magnitude. This should be especially perceptible on pods with large databases, m or hard drives. We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, -you can switch back by setting ``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file. +you can switch back by setting `USE_FULL_TEXT_SEARCH=false` in your `.env` file. -Enforced email verification -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Enforced email verification -The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used to make email verification -mandatory for your users. It defaults to ``false``, and doesn't apply to superuser accounts created through +The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to make email verification +mandatory for your users. It defaults to `false`, and doesn't apply to superuser accounts created through the CLI. If you enable this, ensure you have a SMTP server configured too. -More reliable CLI importer [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### More reliable CLI importer [manual action required] Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger) We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly. -If you use the ``import_files`` command, this means you should replace scripts that look like this:: +If you use the `import_files` command, this means you should replace scripts that look like this: - python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput +```sh +python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput +``` -By this:: +By this: - python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput +```sh +python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput +``` And Funkwhale will happily import any supported audio file from the specified directory. -User management through the server CLI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### User management through the server CLI We now support user creation (incl. non-admin accounts), update and removal directly from the server CLI. Typical use cases include: @@ -210,76 +194,77 @@ from the server CLI. Typical use cases include: - Removing or granting permissions or upload quota to multiple users at once - Marking multiple users as inactive -All user-related commands are available under the ``python manage.py fw users`` namespace. -Please refer to the `Admin documentation <https://docs.funkwhale.audio/admin/commands.html#user-management>`_ for +All user-related commands are available under the `python manage.py fw users` namespace. +Please refer to the [Admin documentation](https://docs.funkwhale.audio/admin/commands.html#user-management) for more information and instructions. -Progressive web app [Manual action sugFull list of changes -^^^^^^^^^^^^^^^^^^^^gested, non-docker only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Progressive web app [Manual action suggested, non-docker only] We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience during offline use, and on mobile devices. In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure -the following instruction is present in your nginx configuration:: +the following instruction is present in your nginx configuration: - location /front/ { - # Add the following line in the /front/ location - add_header Service-Worker-Allowed "/"; - } +```nginx +location /front/ { + # Add the following line in the /front/ location + add_header Service-Worker-Allowed "/"; +} +``` -Postgres docker changed environment variable [manual action required, docker multi-container only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Postgres docker changed environment variable [manual action required, docker multi-container only] If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658) -You need to add this to your .env file: ``POSTGRES_HOST_AUTH_METHOD=trust`` +You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust` Newer deployments aren't affected. -Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] -With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now includes PostgreSQL 11. +With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now includes PostgreSQL 11. -In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below:: +In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below: - # open a shell as the Funkwhale user - sudo -u funkwhale -H bash +```sh +# open a shell as the Funkwhale user +sudo -u funkwhale -H bash - # move to the funkwhale data directory - # (replace this with your own if you used a different path) - cd /srv/funkwhale/data +# move to the funkwhale data directory +# (replace this with your own if you used a different path) +cd /srv/funkwhale/data - # stop the funkwhale container - docker stop funkwhale +# stop the funkwhale container +docker stop funkwhale - # backup the database files - cp -r data/ ../postgres.bak +# backup the database files +cp -r data/ ../postgres.bak - # Upgrade the database - docker run --rm \ - -v $(pwd)/data:/var/lib/postgresql/10/data \ - -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ - -e PGUSER=funkwhale \ - -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ - tianon/postgres-upgrade:10-to-11 +# Upgrade the database +docker run --rm \ + -v $(pwd)/data:/var/lib/postgresql/10/data \ + -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ + -e PGUSER=funkwhale \ + -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ + tianon/postgres-upgrade:10-to-11 - # replace the Postgres 10 files with Postgres 11 files - mv data/ postgres-10 - mv upgraded-postgresql/ data +# replace the Postgres 10 files with Postgres 11 files +mv data/ postgres-10 +mv upgraded-postgresql/ data +``` Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, -you can remove the backups/old files:: +you can remove the backups/old files: - sudo -u funkwhale -H bash - cd /srv/funkwhale/data - rm -rf ../postgres.bak - rm -rf postgres-10 +```sh +sudo -u funkwhale -H bash +cd /srv/funkwhale/data +rm -rf ../postgres.bak +rm -rf postgres-10 +``` -Full list of changes -^^^^^^^^^^^^^^^^^^^^ +### Full list of changes Features: @@ -303,7 +288,7 @@ Enhancements: - Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012) - Favor local uploads when playing a track with multiple uploads (#1036) - Include only local content in nodeinfo stats, added downloads count -- Make media and static files serving more reliable when reverse proxy X_FORWARDED_* headers are incorrect (#947) +- Make media and static files serving more reliable when reverse proxy `X_FORWARDED_*` headers are incorrect (#947) - Order the playlist columns by modification date in the Browse tab (#775) - Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042) - Remember display settings in Album, Artist, Radio and Playlist views (#391) @@ -409,15 +394,12 @@ Contributors to this release (translation, development, documentation, reviews, - Xaloc - XosĆ© M -0.20.1 (2019-10-28) -------------------- +## 0.20.1 (2019-10-28) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Denormalized audio permission logic in a separate table to enhance performance -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Denormalized audio permission logic in a separate table to enhance performance With this release, we're introducing a performance enhancement that should reduce the load on the database and API servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939). @@ -426,14 +408,15 @@ Under the hood, we now maintain a separate table to link users to the tracks the by default, but should be enabled by default starting in Funkwhale 0.21. If you want to try it now, add -``MUSIC_USE_DENORMALIZATION=True`` to your ``.env`` file, restart Funkwhale, and run the following command:: +`MUSIC_USE_DENORMALIZATION=True` to your `.env` file, restart Funkwhale, and run the following command: - python manage.py rebuild_music_permissions +```sh +python manage.py rebuild_music_permissions +``` This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual behaviour regarding tracks, albums and artists visibility. - Enhancements: - Added a retry option for failed uploads (#942) @@ -443,7 +426,6 @@ Enhancements: - Reduce the number of simultaneous DB connections under some deployment scenario - Support byYear filtering in Subsonic API (#936) - Bugfixes: - Ensure password input doesn't overflow outside of container (#933) @@ -455,12 +437,10 @@ Bugfixes: - Fixed pagination in subsonic getSongsByGenre endpoint (#954) - Fixed style glitches in dropdowns - Documentation: - Documented how to create DB extension by hand in case of permission error during migrations (#934) - Contributors to this release (translation, development, documentation, reviews, design): - CiarĆ”n Ainsworth @@ -473,23 +453,21 @@ Contributors to this release (translation, development, documentation, reviews, - Mateus Mattei Garcia - Quentin PAGƈS +## 0.20 (2019-10-04) -0.20 (2019-10-04) ------------------ +Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html + +### Support for genres via tags Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Support for genres via tags -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - One of our most requested missing features is now available! Starting with Funkwhale 0.20, Funkwhale will automatically extract genre information from uploaded files and associate it with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). -Please refer to `our tagging documentation <https://docs.funkwhale.audio/users/upload.html#tagging-files>`_ +Please refer to [our tagging documentation](https://docs.funkwhale.audio/users/upload.html#tagging-files) for more information regarding the tagging process. Tags can also be associated with artists and albums, and updated after upload through the UI using @@ -503,11 +481,10 @@ Tags are used in various places to enhance user experience: - The custom radio builder now supports using tags - Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well -If you are a pod admin and want to extract tags from already uploaded content, you run `this snippet <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__ -and `this snippet <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ in a ``python manage.py shell``. +If you are a pod admin and want to extract tags from already uploaded content, you run [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) +and [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in a `python manage.py shell`. -Content and account reports -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Content and account reports It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, who can review it and delete reported content, block accounts or take any other action they deem necessary. @@ -520,11 +497,10 @@ Federation of the reports will be supported in a future release. For more information about this feature, please check out our documentation: -- `User documentation <https://docs.funkwhale.audio/moderator/reports.html>`__ -- `Moderator documentation <https://docs.funkwhale.audio/users/reports.html>`__ +- [User documentation](https://docs.funkwhale.audio/moderator/reports.html) +- [Moderator documentation](https://docs.funkwhale.audio/users/reports.html) -Account deletion -^^^^^^^^^^^^^^^^ +### Account deletion Users can now delete their account themselves, without involving an administrator. @@ -534,10 +510,9 @@ to other known servers on the federation. For more information about this feature, please check out our documentation: -- `User documentation <https://docs.funkwhale.audio/users/account.html>`__ +- [User documentation](https://docs.funkwhale.audio/users/account.html) -Landing and about page redesign [Manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Landing and about page redesign [Manual action suggested] In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod configuration. Among other things, the landing page will now include: @@ -567,10 +542,9 @@ With this redesign, we've added a handful of additional pod settings: - Rules - Terms of service -We recommend taking a few moments to fill these accordingly to your needs, by visiting ``/manage/settings``. +We recommend taking a few moments to fill these accordingly to your needs, by visiting `/manage/settings`. -Allow-list to restrict federation to trusted domains -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Allow-list to restrict federation to trusted domains The Allow-Listing feature grants pod moderators and administrators greater control over federation @@ -585,10 +559,9 @@ allow-list will not have access to your pod's content or messages and will not be able to send anything to your pod. -If you want to enable this feature on your pod, or learn more, please refer to `our documentation <https://docs.funkwhale.audio/moderator/listing.html>`_! +If you want to enable this feature on your pod, or learn more, please refer to [our documentation](https://docs.funkwhale.audio/moderator/listing.html)! -Periodic message to incite people to support their pod and Funkwhale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Periodic message to incite people to support their pod and Funkwhale Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. @@ -596,9 +569,7 @@ If specified by the pod admin, a separate and custom message will also be displa Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely. - -Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] To improve the performance, stability and reliability of Funkwhale's web processes, we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as: @@ -608,79 +579,81 @@ we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne. -To benefit from this enhancement on existing instances, you need to add ``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file +To benefit from this enhancement on existing instances, you need to add `FUNKWHALE_WEB_WORKERS=1` in your `.env` file (use a higher number if you want to have more web worker processes). -Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and replace the ``ExecStart=`` line with -``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`` +Then, edit your `/etc/systemd/system/funkwhale-server.service` and replace the `ExecStart=` line with +`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}` -Then reload the configuration change with ``sudo systemctl daemon-reload`` and ``sudo systemctl restart funkwhale-server``. +Then reload the configuration change with `sudo systemctl daemon-reload` and `sudo systemctl restart funkwhale-server`. - -Content-Security-Policy and additional security headers [manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Content-Security-Policy and additional security headers [manual action suggested] To improve the security and reduce the attack surface in case of a successful exploit, we suggest you add the following Content-Security-Policy to your nginx configuration. -..note:: +````{note} +If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers - If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers +```nginx +add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; +``` +```` - .. code-block:: +**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`: - add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; +```nginx +server { -**On non-docker setups**, in ``/etc/nginx/sites-available/funkwhale.conf``:: - - server { + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + location /front/ { add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # ā€¦ existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; - } + add_header X-Frame-Options "SAMEORIGIN"; + # ā€¦ existing content here } -Then reload nginx with ``systemctl reload nginx``. + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; + } +} +``` -**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``:: +Then reload nginx with `systemctl reload nginx`. - server { +**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`: +```nginx +server { + + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location /front/ { add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # ā€¦ existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias /frontend/embed.html; - } + add_header X-Frame-Options "SAMEORIGIN"; + # ā€¦ existing content here } -Then reload nginx with ``docker-compose restart nginx``. + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias /frontend/embed.html; + } +} -Rate limiting -^^^^^^^^^^^^^ +``` + +Then reload nginx with `docker-compose restart nginx`. + +### Rate limiting With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error. @@ -688,23 +661,23 @@ regular users of the app aren't affected. Requests beyond allowed limits are ans For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests. -You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your ``.env`` file and restarting the +You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your `.env` file and restarting the services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/. -Broken audio streaming when using S3/Minio and DSub [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Broken audio streaming when using S3/Minio and DSub [manual action required] Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage -such as Minio, please add the following in your nginx ``~ /_protected/media/(.+)`` location:: +such as Minio, please add the following in your nginx `~ /_protected/media/(.+)` location: - # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 - proxy_set_header Authorization ""; +```nginx +# Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 +proxy_set_header Authorization ""; +``` And reload your nginx process. -Detail -^^^^^^ +### Detail Features: @@ -718,7 +691,6 @@ Features: - Support for genres, via tags (#432) - Users can now delete their account without admin intervention (#852) - Enhancements: - Added a info message on embed wizard when anonymous access to content is disabled (#878) @@ -748,7 +720,6 @@ Enhancements: - Display placeholder on homepage when there are no playlists (#892) - Make album cards height independent (#710) - Bugfixes: - Added context strings to en_GB translations so that picking the language changes the interface as expected @@ -798,9 +769,7 @@ Contributors to this release (translation, development, documentation, reviews, - Xaloc - XosĆ© M - -0.19.1 (2019-06-28) -------------------- +## 0.19.1 (2019-06-28) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html @@ -818,7 +787,6 @@ Enhancements: - Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) - Favorites radio will not be visible if the user does not have any favorites (#419) - Bugfixes: - Ensure empty but optional fields in file metadata don't error during import (#850) @@ -833,7 +801,6 @@ Bugfixes: - Hide pod statistics on about page if those are disabled (#835) - Use ASCII filename before upload to S3 to avoid playback issues (#847) - Contributors to this release (committers and reviewers): - CiarĆ”n Ainsworth @@ -847,16 +814,12 @@ Contributors to this release (committers and reviewers): - Mehdi - Reg - -0.19.0 (2019-05-16) -------------------- +## 0.19.0 (2019-05-16) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Edits on tracks, albums and artists -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Edits on tracks, albums and artists Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles were created from audio file tags, but basically immutable after that (unless you had @@ -873,8 +836,7 @@ Not all fields are currently modifiable using this feature. Especially, it's not to suggest a new album cover, or reassign a track to a different album or artist. Those will be implemented in a future release. -Admin UI for tracks, albums, artists, libraries and uploads -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Admin UI for tracks, albums, artists, libraries and uploads As part of our ongoing effort to make Funkwhale easier to manage for instance owners, this release includes a brand new administration interface to deal with: @@ -889,8 +851,7 @@ You can use this UI to quickly search for any object, delete objects in batch, u where they are coming from etc. This new UI should remove the need to go through Django's admin in the vast majority of cases (but also includes a link to Django's admin when needed). -Artist hiding in the interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Artist hiding in the interface It's now possible for users to hide artists they don't want to see. @@ -904,8 +865,7 @@ Content linked to hidden artists will not show up in the interface anymore. Espe Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. -OAuth2 authorization for better integration with third-party apps -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### OAuth2 authorization for better integration with third-party apps Funkwhale now support the OAuth2 authorization and authentication protocol which will allow third-party apps to interact with Funkwhale on behalf of users. @@ -918,8 +878,7 @@ enabled in a future release). If you want to start building an app on top of Funkwhale's API, please check-out https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html. -Better error handling and display during import -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Better error handling and display during import Funkwhale should now be more resilient to missing tags in imported files, and give you more insights when something goes wrong, including the specific tags that were missing @@ -927,8 +886,7 @@ or invalid, and additional debug information to share in your support requests. This information is available in all pages that list uploads, when clicking on the button next to the upload status. -Support for S3-compatible storages to store media files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Support for S3-compatible storages to store media files Storing all media files on the Funkwhale server itself may not be possible or desirable in all scenarios. You can now configure Funkwhale to store those files in a S3 @@ -937,27 +895,22 @@ bucket instead. Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use this feature. -Prune library command -^^^^^^^^^^^^^^^^^^^^^ +### Prune library command Users are often surprised by Funkwhale's tendency to keep track, album and artist metadata even if no associated files exist. -To help with that, we now offer a ``prune_library`` management command you can run -to purge your database from obsolete entries. `Please refer to our documentation -for usage instructions <https://docs.funkwhale.audio/admin/commands.html#pruning-library>`__. +To help with that, we now offer a `prune_library` management command you can run +to purge your database from obsolete entries. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-library). -Check in-place files command -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Check in-place files command When using in-place import with a living audio library, you'll quite often rename or remove files from the file system. Unfortunately, Funkwhale keeps a reference to those files in the database, which results in unplayable tracks. -To help with that, we now offer a ``check_inplace_files`` management command you can run -to purge your database from obsolete files. `Please refer to our documentation -for usage instructions <https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database>`__. - +To help with that, we now offer a `check_inplace_files` management command you can run +to purge your database from obsolete files. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database). Features: @@ -971,7 +924,6 @@ Features: - Support OAuth2 authorization for better integration with third-party apps (#752) - Support S3-compatible storages for media files (#565) - Enhancements: - [Experimental] Added a new "Similar" radio based on users history (suggested by @gordon) @@ -980,13 +932,14 @@ Enhancements: - Added a prune_library management command to remove obsolete metadata from the database (#777) - Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809) - Added standardized translation context for all strings in the frontend to give accurate hints to translators. -- Added twitter:* meta tags to detect tracks and albums players automatically on more sites (#578) +- Added twitter:\* meta tags to detect tracks and albums players automatically on more sites (#578) Improved responsiveness of embedded player - Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808) - Better handling of follow/accept messages to avoid and recover from desync between instances (#830) - Better workflow for connecting to another instance (#715) Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers. + - Bumped dependencies to latest versions (#815) - Descriptions will now be shown underneath user libraries (#768) - Don't store unhandled ActivityPub messages in database (#776) @@ -1006,7 +959,6 @@ Enhancements: - Use attributedTo instead of actor in library ActivityPub payload (#619) - Use network/depends_on instead of links in docker-compose.yml (!716) - Bugfixes: - Add missing command from contributing file (#754) @@ -1032,7 +984,6 @@ Bugfixes: - Use proper site name/domain in emails (#806) - Width of filter menus for radios has been set to stop text from overlapping the borders - Documentation: - Document how to use Redis over unix sockets (#770) @@ -1068,25 +1019,21 @@ Contributors to this release (committers and translators): - Von - Zach Halasz -0.18.3 (2019-03-21) -------------------- +## 0.18.3 (2019-03-21) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html +### Avoid mixed content when deploying mono-container behind proxy [Manual action required] -Avoid mixed content when deploying mono-container behind proxy [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +_You are only concerned if you use the mono-container docker deployment behind a reverse proxy_ -*You are only concerned if you use the mono-container docker deployment behind a reverse proxy* - -Because of `an issue in our mono-container configuration <https://github.com/thetarkus/docker-funkwhale/issues/19>`_, users deploying Funkwhale via docker +Because of [an issue in our mono-container configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), users deploying Funkwhale via docker using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) when browsing the Web UI. -This is fixed in this release, but on existing deployments, you'll need to add ``NESTED_PROXY=1`` in your container -environment (either in your ``.env`` file, or via your container management tool), then recreate your funkwhale container. - +This is fixed in this release, but on existing deployments, you'll need to add `NESTED_PROXY=1` in your container +environment (either in your `.env` file, or via your container management tool), then recreate your funkwhale container. Enhancements: @@ -1095,7 +1042,6 @@ Enhancements: - Exclude in-place imported files from quota computation (#570) - Truncate filename in library file table to ensure correct display of the table. (#735) - Bugfixes: - Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19) @@ -1112,15 +1058,12 @@ Bugfixes: - Include disc number in Subsonic responses (#765) - Do not send notification when rejecting a follow on a local library (#743) - Documentation: - Added documentation on mono-container docker upgrade (#713) - Added documentation to set up let's encrypt certificate (#745) - -0.18.2 (2019-02-13) -------------------- +## 0.18.2 (2019-02-13) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html @@ -1131,7 +1074,6 @@ Enhancements: IDs after deployments (#706) - Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) - Bugfixes: - Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) @@ -1139,16 +1081,12 @@ Bugfixes: - Fixed Embed component name that could lead to issue when developing on OSX (#696) - Fixed resizing issues for album cards on artist pages (#694) - -0.18.1 (2019-01-29) -------------------- +## 0.18.1 (2019-01-29) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Fix Gzip compression to avoid BREACH exploit [security] [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Fix Gzip compression to avoid BREACH exploit [security] [manual action required] In the 0.18 release, we've enabled Gzip compression by default for various content types, including HTML and JSON. Unfortunately, enabling Gzip compression @@ -1157,74 +1095,82 @@ on such content types could make BREACH-type exploits possible. We've removed the risky content-types from our nginx template files, to ensure new instances are safe, however, if you already have an instance, you need to double check that your host nginx virtualhost do not include the following -values for the ``gzip_types`` settings:: +values for the `gzip_types` settings: - application/atom+xml - application/json - application/ld+json - application/activity+json - application/manifest+json - application/rss+xml - application/xhtml+xml - application/xml +``` +application/atom+xml +application/json +application/ld+json +application/activity+json +application/manifest+json +application/rss+xml +application/xhtml+xml +application/xml +``` -For convenience, you can also replace the whole setting with the following snippet:: +For convenience, you can also replace the whole setting with the following snippet: - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; +``` +gzip_types +application/javascript +application/vnd.geo+json +application/vnd.ms-fontobject +application/x-font-ttf +application/x-web-app-manifest+json +font/opentype +image/bmp +image/svg+xml +image/x-icon +text/cache-manifest +text/css +text/plain +text/vcard +text/vnd.rim.location.xloc +text/vtt +text/x-component +text/x-cross-domain-policy; +``` Many thanks to @jibec for the report! -Fix Apache configuration file for 0.18 [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Fix Apache configuration file for 0.18 [manual action required] The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens. -If you are on an Apache setup, you will have to replace the `<Location "/api">` block with the following:: +If you are on an Apache setup, you will have to replace the `<Location "/api">` block with the following: - <Location "/"> - # similar to nginx 'client_max_body_size 100M;' - LimitRequestBody 104857600 +```apache +<Location "/"> + # similar to nginx 'client_max_body_size 100M;' + LimitRequestBody 104857600 - ProxyPass ${funkwhale-api}/ - ProxyPassReverse ${funkwhale-api}/ - </Location> + ProxyPass ${funkwhale-api}/ + ProxyPassReverse ${funkwhale-api}/ +</Location> +``` -And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way:: +And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way: - ProxyPass "/front" "!" - Alias /front /srv/funkwhale/front/dist +```apache + ProxyPass "/front" "!" + Alias /front /srv/funkwhale/front/dist - ProxyPass "/media" "!" - Alias /media /srv/funkwhale/data/media + ProxyPass "/media" "!" + Alias /media /srv/funkwhale/data/media - ProxyPass "/staticfiles" "!" - Alias /staticfiles /srv/funkwhale/data/static + ProxyPass "/staticfiles" "!" + Alias /staticfiles /srv/funkwhale/data/static +``` -In case you are using custom css and theming, you also need to match this block:: +In case you are using custom css and theming, you also need to match this block: - ProxyPass "/settings.json" "!" - Alias /settings.json /srv/funkwhale/custom/settings.json - - ProxyPass "/custom" "!" - Alias /custom /srv/funkwhale/custom +```apache2 + ProxyPass "/settings.json" "!" + Alias /settings.json /srv/funkwhale/custom/settings.json + ProxyPass "/custom" "!" + Alias /custom /srv/funkwhale/custom +``` Enhancements: @@ -1235,7 +1181,6 @@ Enhancements: - Include shared/public playlists in Subsonic API responses (#684) - Use proper locale for date-related/duration strings (#670) - Bugfixes: - Fix transcoding of in-place imported tracks (#688) @@ -1249,14 +1194,11 @@ Bugfixes: - Removed potential BREACH exploit because of Gzip compression (#678) - Upgraded kombu to fix an incompatibility with redis>=3 - Documentation: - Added user upload documentation at https://docs.funkwhale.audio/users/upload.html - -0.18 "Naomi" (2019-01-22) -------------------------- +## 0.18 "Naomi" (2019-01-22) This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. Her positivity, love and support have been incredibly helpful and helped shape the project @@ -1267,12 +1209,11 @@ bug hunters, admins and backers. You made it possible! Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html, ensure you also execute the instructions -marked with ``[manual action required]`` and ``[manual action suggested]``. +marked with `[manual action required]` and `[manual action suggested]`. -See ``Full changelog`` below for an exhaustive list of changes! +See `Full changelog` below for an exhaustive list of changes! -Audio transcoding is back! -^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Audio transcoding is back! After removal of our first, buggy transcoding implementation, we're proud to announce that this feature is back. It is enabled by default, and can be configured/disabled @@ -1282,9 +1223,7 @@ This feature works in the browser, with federated/non-federated tracks and using Transcoded tracks are generated on the fly, and cached for a configurable amount of time, to reduce the load on the server. - -Licensing and copyright information -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Licensing and copyright information Funkwhale is now able to parse copyright and license data from file and store this information. Apart from displaying it on each track detail page, @@ -1293,8 +1232,8 @@ will change in future releases. License and copyright data is also broadcasted over federation. -License matching is done on the content of the ``License`` tag in the files, -with a fallback on the ``Copyright`` tag. +License matching is done on the content of the `License` tag in the files, +with a fallback on the `Copyright` tag. Funkwhale will successfully extract licensing data for the following licenses: @@ -1307,9 +1246,7 @@ Funkwhale will successfully extract licensing data for the following licenses: Support for other licenses such as Art Libre or WTFPL will be added in future releases. - -Instance-level moderation tools -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Instance-level moderation tools This release includes a first set of moderation tools that will give more control to admins about the way their instance federates with other instance and accounts on the network. @@ -1325,9 +1262,7 @@ you can appoint one or multiple moderators to help with this task. I'd like to thank all Mastodon contributors, because some of the these tools are heavily inspired from what's being done in Mastodon. Thank you so much! - -Iframe widget to embed public tracks and albums [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Iframe widget to embed public tracks and albums [manual action required] Funkwhale now supports embedding a lightweight audio player on external websites for album and tracks that are available in public libraries. Important pages, @@ -1338,44 +1273,45 @@ or Twitter). To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have to modify your nginx configuration when upgrading to keep your instance working. -**On docker setups**, edit your ``/srv/funkwhale/nginx/funkwhale.template`` and replace -the ``location /api/`` and `location /` blocks by the following snippets:: +**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template` and replace +the `location /api/` and `location /` blocks by the following snippets: - location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; - } +```nginx +location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; +} - location /front/ { - alias /frontend/; - } +location /front/ { + alias /frontend/; +} +``` The change of configuration will be picked when restarting your nginx container. -**On non-docker setups**, edit your ``/etc/nginx/sites-available/funkwhale.conf`` file, -and replace the ``location /api/`` and `location /` blocks by the following snippets:: +**On non-docker setups**, edit your `/etc/nginx/sites-available/funkwhale.conf` file, +and replace the `location /api/` and `location /` blocks by the following snippets: +```nginx +location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; +} - location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; - } +location /front/ { + alias ${FUNKWHALE_FRONTEND_PATH}/; +} +``` - location /front/ { - alias ${FUNKWHALE_FRONTEND_PATH}/; - } +Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from your .env file, +which should be `/srv/funkwhale/front/dist` by default, then reload your nginx process with +`sudo systemctl reload nginx`. -Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from your .env file, -which should be ``/srv/funkwhale/front/dist`` by default, then reload your nginx process with -``sudo systemctl reload nginx``. - - -Alternative docker deployment method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Alternative docker deployment method Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, we're now able to provide an alternative and easier Docker deployment method! @@ -1386,76 +1322,76 @@ all Funkwhale processes and services (database, redis, etc.) into a single, easi Both methods will coexist in parallel, as each one has pros and cons. You can learn more about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html! -Automatically load .env file -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Automatically load .env file On non-docker deployments, earlier versions required you to source -the config/.env file before launching any Funkwhale command, with ``export $(cat config/.env | grep -v ^# | xargs)`` +the config/.env file before launching any Funkwhale command, with `export $(cat config/.env | grep -v ^# | xargs)` This led to more complex and error prone deployment / setup. This is not the case anymore, and Funkwhale will automatically load this file if it's available. - -Delete pre 0.17 federated tracks [manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Delete pre 0.17 federated tracks [manual action suggested] If you were using Funkwhale before the 0.17 release and federated with other instances, it's possible that you still have some unplayable federated files in the database. To purge the database of those entries, you can run the following command: -On docker setups:: +On docker setups: - docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input +```sh +docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input +``` -On non-docker setups:: +On non-docker setups: - python manage.py script delete_pre_017_federated_uploads --no-input +```sh +python manage.py script delete_pre_017_federated_uploads --no-input +``` - -Enable gzip compression [manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Enable gzip compression [manual action suggested] Gzip compression will be enabled on new instances by default and will reduce the amount of bandwidth consumed by your instance. If you want to benefit from gzip compression on your instance, -edit your reverse proxy virtualhost file (located at ``/etc/nginx/sites-available/funkwhale.conf``) and add the following snippet -in the server block, then reload your nginx server:: +edit your reverse proxy virtualhost file (located at `/etc/nginx/sites-available/funkwhale.conf`) and add the following snippet +in the server block, then reload your nginx server: - server { - # ... exiting configuration +```nginx +server { + # ... - # compression settings - gzip on; - gzip_comp_level 5; - gzip_min_length 256; - gzip_proxied any; - gzip_vary on; + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; - # end of compression settings - } + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings +} +``` -Full changelog -^^^^^^^^^^^^^^ +### Full changelog Features: @@ -1464,7 +1400,6 @@ Features: - First set of instance level moderation tools (#580, !521) - Store licensing and copyright information from file metadata, if available (#308) - Enhancements: - Add UI elements for multi-disc albums (#631) @@ -1502,7 +1437,6 @@ Enhancements: - Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657) - Improved test suite speed by reducing / disabling expensive operations (#648) - Bugfixes: - Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469) @@ -1533,32 +1467,26 @@ Bugfixes: - Refresh profile after user settings update to avoid cache issues (#606) - Use role=button instead of empty links for player controls (#610) - Documentation: - Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642) - Document how to find and use library id when importing files in CLI (#562) - Fix documentation typos (#645) +## 0.17 (2018-10-07) -0.17 (2018-10-07) ------------------ - -Per user libraries -^^^^^^^^^^^^^^^^^^ +### Per user libraries This release contains a big change in music management. This has a lot of impact on how Funkwhale behaves, and you should have a look at https://docs.funkwhale.audio/upgrading/0.17.html for information about what changed and how to migrate. - Features: - Per user libraries (#463, also fixes #160 and #147) - Authentication using a LDAP directory (#194) - Enhancements: - Add configuration option to set Musicbrainz hostname @@ -1583,19 +1511,15 @@ Bugfixes: - Set sane width default for ui cards and center play button (#530) - Updated wrong icon and copy in play button dropdown (#436) - Documentation: - Fixed wrong URLs for docker / nginx files in documentation (#537) - Other: - Added a merge request template and more documentation about the changelog - -Using a LDAP directory to authenticate to your Funkwhale instance -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Using a LDAP directory to authenticate to your Funkwhale instance Funkwhale now support LDAP as an authentication source: you can configure your instance to delegate login to a LDAP directory, which is especially @@ -1607,9 +1531,7 @@ You can use this authentication backend side by side with the classic one. Have a look at https://docs.funkwhale.audio/installation/ldap.html for detailed instructions on how to set this up. - -Simplified nginx setup [Docker: Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Simplified nginx setup [Docker: Manual action required] We've received a lot of user feedback regarding our installation process, and it seems the proxy part is the one which is the most confusing and difficult. @@ -1624,119 +1546,129 @@ On non-docker instances, you have nothing to do. If you have a dockerized instance, here is the upgrade path. -First, tweak your .env file:: +First, tweak your .env file: - # remove the FUNKWHALE_URL variable - # and add the next variables - FUNKWHALE_HOSTNAME=yourdomain.funkwhale - FUNKWHALE_PROTOCOL=https +```sh +# remove the FUNKWHALE_URL variable +# and add the next variables +FUNKWHALE_HOSTNAME=yourdomain.funkwhale +FUNKWHALE_PROTOCOL=https - # add the following variable, matching the path your app is deployed - # leaving the default should work fine if you deployed using the same - # paths as the documentation - FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist +# add the following variable, matching the path your app is deployed +# leaving the default should work fine if you deployed using the same +# paths as the documentation +FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist +``` -Then, add the following block at the end of your docker-compose.yml file:: +Then, add the following block at the end of your docker-compose.yml file: - # existing services - api: - ... - celeryworker: - ... +```yaml +services: + # existing services + api: + # ... + celeryworker: + # ... - # new service - nginx: - image: nginx - env_file: - - .env - environment: - # Override those variables in your .env file if needed - - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - volumes: - - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" - - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" - - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" - - "${STATIC_ROOT}:${STATIC_ROOT}:ro" - - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" - ports: - # override those variables in your .env file if needed - - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" - command: > - sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" - < /etc/nginx/conf.d/funkwhale.template - > /etc/nginx/conf.d/default.conf - && cat /etc/nginx/conf.d/default.conf - && nginx -g 'daemon off;'" - links: - - api + # new service + nginx: + image: nginx + env_file: + - .env + environment: + # Override those variables in your .env file if needed + - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" + volumes: + - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" + - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" + - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" + - "${STATIC_ROOT}:${STATIC_ROOT}:ro" + - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" + ports: + # override those variables in your .env file if needed + - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" + command: > + sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" + < /etc/nginx/conf.d/funkwhale.template + > /etc/nginx/conf.d/default.conf + && cat /etc/nginx/conf.d/default.conf + && nginx -g 'daemon off;'" + links: + - api +``` By doing that, you'll enable a dockerized nginx that will automatically be configured to serve your Funkwhale instance. Download the required configuration files for the nginx container: -.. parsed-literal:: +```{parsed-literal} +cd /srv/funkwhale +mkdir nginx +curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" +curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" +``` - cd /srv/funkwhale - mkdir nginx - curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" - curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" +Update the funkwhale.conf configuration of your server's reverse-proxy: -Update the funkwhale.conf configuration of your server's reverse-proxy:: +```sh +# the file should match something like that, upgrade all variables +# between ${} to match the ones in your .env file, +# and your SSL configuration if you're not using let's encrypt +# The important thing is that you only have a single location block +# that proxies everything to your dockerized nginx. - # the file should match something like that, upgrade all variables - # between ${} to match the ones in your .env file, - # and your SSL configuration if you're not using let's encrypt - # The important thing is that you only have a single location block - # that proxies everything to your dockerized nginx. +sudo nano /etc/nginx/sites-enabled/funkwhale.conf +``` - sudo nano /etc/nginx/sites-enabled/funkwhale.conf - upstream fw { - # depending on your setup, you may want to update this - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; - } - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - server { - listen 80; - listen [::]:80; - server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } - } - server { - listen 443 ssl; - listen [::]:443 ssl; - server_name ${FUNKWHALE_HOSTNAME}; - - # TLS - ssl_protocols TLSv1.2; - ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:10m; - ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; - - # HSTS - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://fw/; - } +```nginx +upstream fw { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + listen [::]:80; + server_name ${FUNKWHALE_HOSTNAME}; + location / { return 301 https://$host$request_uri; } +} +server { + listen 443 ssl; + listen [::]:443 ssl; + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + + location / { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://fw/; } +} +``` Check that your configuration is valid then reload: - sudo nginx -t - sudo systemctl reload nginx +```sh +sudo nginx -t +sudo systemctl reload nginx +``` - -0.16.3 (2018-08-21) -------------------- +## 0.16.3 (2018-08-21) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -1745,14 +1677,11 @@ Bugfixes: - Fixed front-end not contacting the proper path on the API (!385) +## 0.16.2 (2018-08-21) -0.16.2 (2018-08-21) -------------------- - -.. warning:: - - **This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** - +```{warning} +**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** +``` Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -1764,9 +1693,7 @@ Bugfixes: - Fixed CLI importer syntax error because of async reserved keyword usage (#494) - -0.16.1 (2018-08-19) -------------------- +## 0.16.1 (2018-08-19) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -1784,7 +1711,6 @@ Enhancements: - Simpler configuration and toolchain for the front-end using vue-cli (!375) - Use Howler to manage audio instead of our own dirty/untested code (#392) - Bugfixes: - Fix alignment issue on top bar in Admin tabs (#395) @@ -1808,40 +1734,39 @@ Bugfixes: - Smarter date parsing during import by replacing arrow with pendulum (#376) - Display public playlists properly for anonymous users (#488) - i18n: - Added portuguese, spanish and german translations - -Custom themes for Funkwhale -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Custom themes for Funkwhale If you ever wanted to give a custom look and feel to your instance, this is now possible. Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more! - -Fix Apache2 configuration file for media block [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Fix Apache2 configuration file for media block [Manual action required] The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served. -On Apache2 setups, you have to replace the following line:: +On Apache2 setups, you have to replace the following line: - <Directory /srv/funkwhale/data/media/albums> +```apache +<Directory /srv/funkwhale/data/media/albums> +``` -with:: +with: - <Directory /srv/funkwhale/data/media> +```apache +<Directory /srv/funkwhale/data/media> +``` -You can now restart your server:: +You can now restart your server: - sudo systemctl restart apache2 +```sh +sudo systemctl restart apache2 +``` - -0.16 (2018-07-22) ------------------ +## 0.16 (2018-07-22) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -1856,7 +1781,6 @@ Features: Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167) - Users can now upload an avatar in their settings page (#257) - Enhancements: - Added feedback when creating/updating radio (#302) @@ -1874,7 +1798,6 @@ Enhancements: - The navigation bar of Library is now fixed (#375) - Use thumbnails for avatars and covers to reduce bandwidth - Bugfixes: - Ensure 750 permissions on CI artifacts (#332) @@ -1891,7 +1814,6 @@ Bugfixes: - Subsonic API login is now case insensitive (#339) - Validate Date header in HTTP Signatures (#328) - Documentation: - Added troubleshotting and technical overview documentation (#256) @@ -1900,15 +1822,12 @@ Documentation: - Fixed a couple of typos - Some cosmetic improvements to the doc - i18n: - Arabic translation (!302) - Polish translation (!304) - -Library home and playlist page overhaul -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Library home and playlist page overhaul The library home page have been completely redesigned to include: @@ -1920,9 +1839,7 @@ what you think about it! The playlist page have been updated as well. - -Internationalized interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Internationalized interface After months of work, we're proud to announce our interface is now ready for internationalization. @@ -1932,9 +1849,7 @@ and we're ready to add more as needed. You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/ - -Better handling of tracks with a different artist than the album artist -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Better handling of tracks with a different artist than the album artist Some tracks involve a different artist than the album artist (e.g. a featuring) and Funkwhale has been known to do weird things when importing such tracks, resulting @@ -1943,9 +1858,7 @@ in albums that contained a single track, for instance. The situation should be improved with this release, as Funkwhale is now able to store separately the track and album artist, and display it properly in the interface. - -Users now have an ActivityPub Actor [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Users now have an ActivityPub Actor [Manual action required] In the process of implementing federation for user activity such as listening history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation. @@ -1955,19 +1868,21 @@ This does not means the federation is working, but this is a needed step to impl Those profiles will be created automatically for new users, but you have to run a command to create them for existing users. -On docker setups:: +On docker setups: - docker-compose run --rm api python manage.py script create_actors --no-input +```sh +docker-compose run --rm api python manage.py script create_actors --no-input +``` -On non-docker setups:: +On non-docker setups: - python manage.py script create_actors --no-input +```sh +python manage.py script create_actors --no-input +``` This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times. - -Image thumbnails [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Image thumbnails [Manual action required] To reduce bandwidth usage on slow or limited connexions and improve performance in general, we now use smaller images in the front-end. For instance, if you have @@ -1978,20 +1893,22 @@ when we don't actually need the original image. Thumbnail will be created automatically for new objects, however, you have to launch a manual command to deal with existing ones. -On docker setups:: +On docker setups: - docker-compose run --rm api python manage.py script create_image_variations --no-input +```sh +docker-compose run --rm api python manage.py script create_image_variations --no-input +``` -On non-docker setups:: +On non-docker setups: - python manage.py script create_image_variations --no-input +```sh +python manage.py script create_image_variations --no-input +``` This should be quite fast but may take up to a few minutes depending on the number of albums you have in database. It is safe to interrupt the process or rerun it multiple times. - -Improved search on federated tracks list -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Improved search on federated tracks list Having a powerful but easy-to-use search is important but difficult to achieve, especially if you do not want to have a real complex search interface. @@ -2004,15 +1921,13 @@ tracks list (/manage/federation/tracks) at the moment, but depending on feedback This is the type of query you can run: -- ``hello world``: search for "hello" and "world" in all the available fields -- ``hello in:artist`` search for results where artist name is "hello" -- ``spring in:artist,album`` search for results where artist name or album title contain "spring" -- ``artist:hello`` search for results where artist name equals "hello" -- ``artist:"System of a Down" domain:instance.funkwhale`` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library +- `hello world`: search for "hello" and "world" in all the available fields +- `hello in:artist` search for results where artist name is "hello" +- `spring in:artist,album` search for results where artist name or album title contain "spring" +- `artist:hello` search for results where artist name equals "hello" +- `artist:"System of a Down" domain:instance.funkwhale` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library - -Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set explicitly [Manual action required] In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing some deployment issues on non-docker setups when people forgot to uncomment them. @@ -2026,55 +1941,54 @@ This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SE whose values are now used directly to set up the proper Docker volumes. This will only affect new deployments though. If you want to benefit from this on an -existing instance, do a backup of your ``.env`` and ``docker-compose.yml`` files and apply the following changes: +existing instance, do a backup of your `.env` and `docker-compose.yml` files and apply the following changes: -- Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the absolute path where media files are stored - on your host (``/srv/funkwhale/data/media`` by default) -- Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the absolute path where static files are stored - on your host (``/srv/funkwhale/data/static`` by default) +- Ensure `MEDIA_ROOT` is uncommented in your .env file and match the absolute path where media files are stored + on your host (`/srv/funkwhale/data/media` by default) +- Ensure `STATIC_ROOT` is uncommented in your .env file and match the absolute path where static files are stored + on your host (`/srv/funkwhale/data/static` by default) - If you use in-place import: - - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music`` - - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files - are stored (``/srv/funkwhale/data/music`` by default) + - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music` + - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files + are stored (`/srv/funkwhale/data/music` by default) - Edit your docker-compose.yml file to reflect the changes: - - Search for volumes (there should be two occurrences) that contains ``/app/funkwhale_api/media`` on the right side, and - replace the whole line with ``- "${MEDIA_ROOT}:${MEDIA_ROOT}"`` - - Search for a volume that contains ``/app/staticfiles`` on the right side, and - replace the whole line with ``- "${STATIC_ROOT}:${STATIC_ROOT}"`` - - If you use in-place import, search for volumes (there should be two occurrences) that contains ``/music:ro`` on the right side, and - replace the whole line with ``- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"`` + - Search for volumes (there should be two occurrences) that contains `/app/funkwhale_api/media` on the right side, and + replace the whole line with `- "${MEDIA_ROOT}:${MEDIA_ROOT}"` + - Search for a volume that contains `/app/staticfiles` on the right side, and + replace the whole line with `- "${STATIC_ROOT}:${STATIC_ROOT}"` + - If you use in-place import, search for volumes (there should be two occurrences) that contains `/music:ro` on the right side, and + replace the whole line with `- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"` -In the end, the ``volumes`` directives of your containers should look like that:: +In the end, the `volumes` directives of your containers should look like that: - ... - celeryworker - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - ... - api: - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - - "${STATIC_ROOT}:${STATIC_ROOT}" - - ./front/dist:/frontend - ... +```yaml +services: + # ... + celeryworker: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + # ... + api: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + - "${STATIC_ROOT}:${STATIC_ROOT}" + - ./front/dist:/frontend + # ... +``` - -Removed Cacheops dependency -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Removed Cacheops dependency We removed one of our dependency named django-cacheops. It was unly used in a few places, and not playing nice with other dependencies. -You can safely remove this dependency in your environment with ``pip uninstall django-cacheops`` if you're +You can safely remove this dependency in your environment with `pip uninstall django-cacheops` if you're not using docker. -You can also safely remove any ``CACHEOPS_ENABLED`` setting from your environment file. +You can also safely remove any `CACHEOPS_ENABLED` setting from your environment file. - -0.15 (2018-06-24) ------------------ +## 0.15 (2018-06-24) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -2089,13 +2003,11 @@ Features: - Management interface for users (#212) - New invite system (#248) New invite system - Enhancements: - Added "TV" to the list of highlighted words during YouTube import (#154) - Command line import now accepts unlimited args (#242) - Bugfixes: - Expose track files date in manage API (#307) @@ -2104,16 +2016,13 @@ Bugfixes: - Include user's current private playlists on playlist list (#302) - Remove link to generic radios, since they don't have detail pages (#324) - Documentation: - Document that Funkwhale may be installed with YunoHost (#325) - Documented a saner layout with symlinks for in-place imports (#254) - Upgrade documentation now use the correct user on non-docker setups (#265) - -Invite system -^^^^^^^^^^^^^ +### Invite system On closed instances, it has always been a little bit painful to create accounts by hand for new users. This release solve that by adding invitations. @@ -2127,9 +2036,7 @@ if you need to print them or make them fancier ;) Invitations generation and management requires the "settings" permission. - -Removed front-end and back-end coupling -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Removed front-end and back-end coupling Even though Funkwhale's front-end has always been a Single Page Application, talking to an API, it was only able to talk to an API on the same domain. @@ -2149,14 +2056,12 @@ by leveraging Gitlab CI and review apps, we are now able to deploy automatically a merge request, making it possible for anyone to review front-end changes easily, without the need to install a local environment. +## 0.14.2 (2018-06-16) -0.14.2 (2018-06-16) -------------------- - -.. warning:: - - This release contains a fix for a permission issue. You should upgrade - as soon as possible. Read the changelog below for more details. +```{warning} +This release contains a fix for a permission issue. You should upgrade +as soon as possible. Read the changelog below for more details. +``` Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -2179,21 +2084,17 @@ Bugfixes: - Fixed broken pagination in Subsonic API (#295) - Fixed duplicated websocket connection on timeline (#287) - Documentation: - Improved documentation about in-place imports setup (#298) - Other: - Added Black and flake8 checks in CI to ensure consistent code styling and formatting (#297) - Added bug and feature issue templates (#299) - -Permission issues on radios -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Permission issues on radios Because of an error in the way we checked user permissions on radios, public radios could be deleted by any logged-in user, even if they were not @@ -2202,9 +2103,7 @@ the owner of the radio. We recommend instances owners to upgrade as fast as possible to avoid any abuse and data loss. - -Funkwhale is now licenced under AGPL-3 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Funkwhale is now licenced under AGPL-3 Following the recent switch made by PixelFed (https://github.com/dansup/pixelfed/issues/143), we decided along with @@ -2217,25 +2116,25 @@ switch for various reasons: As end users and instance owners, this does not change anything. You can continue to use Funkwhale exactly as you did before :) - -Apache support for websocket -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Apache support for websocket Up until now, our Apache2 configuration was not working with websockets. This is now -solved by adding this at the beginning of your Apache2 configuration file:: +solved by adding this at the beginning of your Apache2 configuration file: - Define funkwhale-api-ws ws://localhost:5000 +```apache +Define funkwhale-api-ws ws://localhost:5000 +``` -And this, before the "/api" block:: +And this, before the "/api" block: - # Activating WebSockets - ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity +```apache +# Activating WebSockets +ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity +``` Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available. - -Serving album covers in https (Apache2 proxy) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Serving album covers in https (Apache2 proxy) Two issues are addressed here. The first one was about Django replying with mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` @@ -2246,39 +2145,38 @@ Second issue was a problem of permission causing Apache a denied access to album cover folder. It is solved by adding another block for this path in the Apache configuration file for funkwhale. -Here is how to modify your `funkwhale.conf` apache2 configuration:: +Here is how to modify your `funkwhale.conf` apache2 configuration: - <VirtualHost *:443> +```apache +<VirtualHost *:443> + # ... + #Add this new line + RequestHeader set X-Forwarded-Proto "https" + # ... + # Add this new block below the other <Directory/> blocks + # replace /srv/funkwhale/data/media with the path to your media directory + # if you're not using the standard layout. + <Directory /srv/funkwhale/data/media/albums> + Options FollowSymLinks + AllowOverride None + Require all granted + </Directory> + # ... +</VirtualHost> +``` - ... - #Add this new line - RequestHeader set X-Forwarded-Proto "https" - ... - # Add this new block below the other <Directory/> blocks - # replace /srv/funkwhale/data/media with the path to your media directory - # if you're not using the standard layout. - <Directory /srv/funkwhale/data/media/albums> - Options FollowSymLinks - AllowOverride None - Require all granted - </Directory> - ... - </VirtualHost> +### About the makemigrations warning +You may sometimes get the following warning while applying migrations: -About the makemigrations warning -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You may sometimes get the following warning while applying migrations:: - - "Your models have changes that are not yet reflected in a migration, and so won't be applied." +``` +"Your models have changes that are not yet reflected in a migration, and so won't be applied." +``` This is a warning, not an error, and it can be safely ignored. -Never run the ``makemigrations`` command yourself. +Never run the `makemigrations` command yourself. - -0.14.1 (2018-06-06) -------------------- +## 0.14.1 (2018-06-06) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -2303,14 +2201,11 @@ Bugfixes: - Fixed broken track download modal (overflow and wrong URL) (#239) - Removed hardcoded size limit in file upload widget (#275) - Documentation: -- Added warning about _protected/music location in nginx configuration (#247) +- Added warning about \_protected/music location in nginx configuration (#247) - -Removed alpha-state transcoding (#271) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Removed alpha-state transcoding (#271) A few months ago, a basic transcoding feature was implemented. Due to the way this feature was designed, it was slow, CPU intensive on the server side, @@ -2322,54 +2217,54 @@ Based on that, we're currently removing support for transcoding can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272. You don't have to do anything on your side, but you may want to remove -the now obsolete configuration from your reverse proxy file (nginx only):: +the now obsolete configuration from your reverse proxy file (nginx only): - # Remove those blocks: +```nginx +# Remove those blocks: - # transcode cache - proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; +# transcode cache +proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; - # Transcoding logic and caching - location = /transcode-auth { - include /etc/nginx/funkwhale_proxy.conf; - # needed so we can authenticate transcode requests, but still - # cache the result - internal; - set $query ''; - # ensure we actually pass the jwt to the underlytin auth url - if ($request_uri ~* "[^\?]+\?(.*)$") { - set $query $1; - } - proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; - proxy_pass_request_body off; - proxy_set_header Content-Length ""; +# Transcoding logic and caching +location = /transcode-auth { + include /etc/nginx/funkwhale_proxy.conf; + # needed so we can authenticate transcode requests, but still + # cache the result + internal; + set $query ''; + # ensure we actually pass the jwt to the underlytin auth url + if ($request_uri ~* "[^\?]+\?(.*)$") { + set $query $1; } + proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; +} - location /api/v1/trackfiles/transcode/ { - include /etc/nginx/funkwhale_proxy.conf; - # this block deals with authenticating and caching transcoding - # requests. Caching is heavily recommended as transcoding - # is a CPU intensive process. - auth_request /transcode-auth; - if ($args ~ (.*)jwt=[^&]*(.*)) { - set $cleaned_args $1$2; - } - proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; - proxy_cache transcode; - proxy_cache_valid 200 7d; - proxy_ignore_headers "Set-Cookie"; - proxy_hide_header "Set-Cookie"; - add_header X-Cache-Status $upstream_cache_status; - proxy_pass http://funkwhale-api; +location /api/v1/trackfiles/transcode/ { + include /etc/nginx/funkwhale_proxy.conf; + # this block deals with authenticating and caching transcoding + # requests. Caching is heavily recommended as transcoding + # is a CPU intensive process. + auth_request /transcode-auth; + if ($args ~ (.*)jwt=[^&]*(.*)) { + set $cleaned_args $1$2; } - # end of transcoding logic + proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; + proxy_cache transcode; + proxy_cache_valid 200 7d; + proxy_ignore_headers "Set-Cookie"; + proxy_hide_header "Set-Cookie"; + add_header X-Cache-Status $upstream_cache_status; + proxy_pass http://funkwhale-api; +} +# end of transcoding logic +``` - -0.14 (2018-06-02) ------------------ +## 0.14 (2018-06-02) Upgrade instructions are available at - https://docs.funkwhale.audio/upgrading.html +https://docs.funkwhale.audio/upgrading.html Features: @@ -2380,7 +2275,6 @@ Features: is implemented on the federated tracks pages, but will be included in other pages as well depending on the feedback. - Enhancements: - Added a new "upload" permission that allows user to launch import and view @@ -2397,7 +2291,6 @@ Enhancements: - Retructured music API to increase performance and remove useless endpoints (#224) - Bugfixes: - Consistent constraints/checks for URL size (#207) @@ -2422,14 +2315,11 @@ Documentation: - Added missing subsonic configuration block in deployment vhost files (#249) - Moved upgrade doc under install doc in TOC (#251) - Other: - Removed acoustid support, as the integration was buggy and error-prone (#106) - -Files management interface -^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Files management interface This is the first bit of an ongoing work that will span several releases, to bring more powerful library management features to Funkwhale. This iteration @@ -2437,8 +2327,7 @@ includes a basic file management interface where users with the "library" permission can list and search available files, order them using various criteria (size, bitrate, duration...) and delete them. -New "upload" permission -^^^^^^^^^^^^^^^^^^^^^^^ +### New "upload" permission This new permission is helpful if you want to give upload/import rights to some users, but don't want them to be able to manage the library as a whole: @@ -2457,8 +2346,7 @@ On public/open instances, this will play well with the "upload" permission since everyone will be able to contribute to the instance library without an admin giving the permission to every single user. -Smarter album cover importer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Smarter album cover importer In earlier versions, covers where only imported when launching a YouTube import. Starting from this release, covers will be imported regardless of the import mode @@ -2473,78 +2361,77 @@ This will only work for newly imported tracks and albums though. In the future, we may offer an option to refetch album covers from the interface, but in the meantime, you can use the following snippet: -.. code-block:: python +```python +# Store this in /tmp/update_albums.py +from funkwhale_api.music.models import Album, TrackFile +from funkwhale_api.music.tasks import update_album_cover - # Store this in /tmp/update_albums.py - from funkwhale_api.music.models import Album, TrackFile - from funkwhale_api.music.tasks import update_album_cover +albums_without_covers = Album.objects.filter(cover='') +total = albums_without_covers.count() +print('Found {} albums without cover'.format(total)) +for i, album in enumerate(albums_without_covers.iterator()): + print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) + f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() + update_album_cover(album, track_file=f) +``` - albums_without_covers = Album.objects.filter(cover='') - total = albums_without_covers.count() - print('Found {} albums without cover'.format(total)) - for i, album in enumerate(albums_without_covers.iterator()): - print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) - f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() - update_album_cover(album, track_file=f) +Then launch it: -Then launch it:: +```sh +# docker setups +cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python - # docker setups - cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python +# non-docker setups +source /srv/funkwhale/load_env +source /srv/funkwhale/virtualenv/bin/activate +cat /tmp/update_albums.py | python manage.py shell -i python - # non-docker setups - source /srv/funkwhale/load_env - source /srv/funkwhale/virtualenv/bin/activate - cat /tmp/update_albums.py | python manage.py shell -i python +# cleanup +rm /tmp/update_albums.py +``` - # cleanup - rm /tmp/update_albums.py +```{note} +Depending on your number of albums, the previous snippet may take some time +to execute. You can interrupt it at any time using ctrl-c and relaunch it later, +as it's idempotent. +``` -.. note:: - - Depending on your number of albums, the previous snippet may take some time - to execute. You can interrupt it at any time using ctrl-c and relaunch it later, - as it's idempotent. - -Music API changes -^^^^^^^^^^^^^^^^^ +### Music API changes This release includes an API break. Even though the API is advertised as unstable, and not documented, here is a brief explanation of the change in case you are using the API in a client or in a script. Summary of the changes: -- ``/api/v1/artists`` does not includes a list of tracks anymore. It was to heavy +- `/api/v1/artists` does not includes a list of tracks anymore. It was to heavy to return all of this data all the time. You can get all tracks for an - artist using ``/api/v1/tracks?artist=artist_id`` -- Additionally, ``/api/v1/tracks`` now support an ``album`` filter to filter + artist using `/api/v1/tracks?artist=artist_id` +- Additionally, `/api/v1/tracks` now support an `album` filter to filter tracks matching an album -- ``/api/v1/artists/search``, ``/api/v1/albums/search`` and ``/api/v1/tracks/search`` - endpoints are removed. Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` +- `/api/v1/artists/search`, `/api/v1/albums/search` and `/api/v1/tracks/search` + endpoints are removed. Use `/api/v1/{artists|albums|tracks}/?q=yourquery` instead. It's also more powerful, since you can combine search with other filters and ordering options. -- ``/api/v1/requests/import-requests/search`` endpoint is removed as well. - Use ``/api/v1/requests/import-requests/?q=yourquery`` +- `/api/v1/requests/import-requests/search` endpoint is removed as well. + Use `/api/v1/requests/import-requests/?q=yourquery` instead. It's also more powerful, since you can combine search with other filters and ordering options. Of course, the front-end was updated to work with the new API, so this should not impact end-users in any way, apart from slight performance gains. -.. note:: +```{note} +The API is still not stable and may evolve again in the future. API freeze +will come at a later point. +``` - The API is still not stable and may evolve again in the future. API freeze - will come at a later point. - -Flac files imports via upload -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Flac files imports via upload You have nothing to do to benefit from this, however, since Flac files tend to be a lot bigger than other files, you may want to increase the -``client_max_body_size`` value in your Nginx configuration if you plan +`client_max_body_size` value in your Nginx configuration if you plan to upload flac files. -Missing subsonic configuration block in vhost files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Missing subsonic configuration block in vhost files Because of a missing block in the sample Nginx and Apache configurations, instances that were deployed after the 0.13 release are likely to be unable @@ -2554,26 +2441,28 @@ in the changelog). Ensure you have the following snippets in your Nginx or Apache configuration if you plan to use the Subsonic API. -Nginx:: +Nginx: - location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; - } +```nginx +location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; +} +``` -Apache2:: +Apache2: - <Location "/rest"> - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest - </Location> +```apache +<Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + </Location> +``` - -0.13 (2018-05-19) ------------------ +## 0.13 (2018-05-19) Upgrade instructions are available at - https://docs.funkwhale.audio/upgrading.html +https://docs.funkwhale.audio/upgrading.html Features: @@ -2582,14 +2471,12 @@ Features: - Store file length, size and bitrate (#195) - We now have a brand new instance settings interface in the front-end (#206) - Enhancements: - Disabled browsable HTML API in production (#205) - Instances can now indicate on the nodeinfo endpoint if they want to remain private (#200) - Bugfixes: - .well-known/nodeinfo endpoint can now answer to request with Accept: @@ -2601,9 +2488,7 @@ Bugfixes: - Removed Python 3.6 dependency (secrets module) (#198) - Uplayable tracks are now properly disabled in the interface (#199) - -Instance settings interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Instance settings interface Prior to this release, the only way to update instance settings (such as instance description, signup policy, federation configuration, etc.) was using @@ -2615,11 +2500,9 @@ Starting from this release, we now offer a dedicated interface directly in the front-end. You can view and edit all your instance settings from here, assuming you have the required permissions. -This interface is available at ``/manage/settings`` and via link in the sidebar. +This interface is available at `/manage/settings` and via link in the sidebar. - -Storage of bitrate, size and length in database -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Storage of bitrate, size and length in database Starting with this release, when importing files, Funkwhale will store additional information about audio files: @@ -2634,33 +2517,30 @@ we offer a command to deal with legacy files and populate the missing values. On docker setups: -.. code-block:: shell - - docker-compose run --rm api python manage.py fix_track_files - +```sh +docker-compose run --rm api python manage.py fix_track_files +``` On non-docker setups: -.. code-block:: shell +```sh +# from your activated virtualenv +python manage.py fix_track_files +``` - # from your activated virtualenv - python manage.py fix_track_files +```{note} +The execution time for this command is proportional to the number of +audio files stored on your instance. This is because we need to read the +files from disk to fetch the data. You can run it in the background +while Funkwhale is up. -.. note:: +It's also safe to interrupt this command and rerun it at a later point, or run +it multiple times. - The execution time for this command is proportional to the number of - audio files stored on your instance. This is because we need to read the - files from disk to fetch the data. You can run it in the background - while Funkwhale is up. +Use the --dry-run flag to check how many files would be impacted. +``` - It's also safe to interrupt this command and rerun it at a later point, or run - it multiple times. - - Use the --dry-run flag to check how many files would be impacted. - - -Simpler permission system -^^^^^^^^^^^^^^^^^^^^^^^^^ +### Simpler permission system Starting from this release, the permission system is much simpler. Up until now, we were using Django's built-in permission system, which was working, but also @@ -2674,27 +2554,25 @@ you can migrate those to the new system. On docker setups: -.. code-block:: shell - - docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input +```sh +docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input +``` On non-docker setups: -.. code-block:: shell - - # in your virtualenv - python api/manage.py script django_permissions_to_user_permissions --no-input +```sh +# in your virtualenv +python api/manage.py script django_permissions_to_user_permissions --no-input +``` There is still no dedicated interface to manage user permissions, but you -can use the admin interface at ``/api/admin/users/user/`` for that purpose in +can use the admin interface at `/api/admin/users/user/` for that purpose in the meantime. - -0.12 (2018-05-09) ------------------ +## 0.12 (2018-05-09) Upgrade instructions are available at - https://docs.funkwhale.audio/upgrading.html +https://docs.funkwhale.audio/upgrading.html Features: @@ -2702,25 +2580,20 @@ Features: as DSub (#75) - Use nodeinfo standard for publishing instance information (#192) - Enhancements: - Play button now play tracks immediately instead of appending them to the queue (#99, #156) - Bugfixes: - Fix broken federated import (#193) - Documentation: - Up-to-date documentation for upgrading front-end files on docker setup (#132) - -Subsonic API -^^^^^^^^^^^^ +### Subsonic API This release implements some core parts of the Subsonic API, which is widely deployed in various projects and supported by numerous clients. @@ -2732,44 +2605,46 @@ without developing our own alternative clients for each and every platform. Most advanced Subsonic clients support offline caching of music files, playlist management and search, which makes them well-suited for nomadic use. -Please see `our list of supported apps <https://funkwhale.audio/en_US/apps>`_ +Please see [our list of supported apps](https://funkwhale.audio/en_US/apps) for more information about supported clients and user instructions. At the instance-level, the Subsonic API is enabled by default, but require and additional endpoint to be added in you reverse-proxy configuration. -On nginx, add the following block:: +On nginx, add the following block: - location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; - } +```nginx +location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; +} +``` -On Apache, add the following block:: +On Apache, add the following block: - <Location "/rest"> - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest - </Location> +```apache +<Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest +</Location> +``` The Subsonic can be disabled at the instance level from the django admin. -.. note:: +```{note} +Because of Subsonic's API design which assumes cleartext storing of +user passwords, we chose to have a dedicated, separate password +for that purpose. Users can generate this password from their +settings page in the web client. +``` - Because of Subsonic's API design which assumes cleartext storing of - user passwords, we chose to have a dedicated, separate password - for that purpose. Users can generate this password from their - settings page in the web client. +### Nodeinfo standard for instance information and stats - -Nodeinfo standard for instance information and stats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. warning:: - - The ``/api/v1/instance/stats/`` endpoint which was used to display - instance data in the about page is removed in favor of the new - ``/api/v1/instance/nodeinfo/2.0/`` endpoint. +```{warning} +The ``/api/v1/instance/stats/`` endpoint which was used to display +instance data in the about page is removed in favor of the new +``/api/v1/instance/nodeinfo/2.0/`` endpoint. +``` In earlier version, we where using a custom endpoint and format for our instance information and statistics. While this was working, @@ -2790,41 +2665,45 @@ We offer two settings to manage nodeinfo in your Funkwhale instance: and user activity. To make your instance fully compatible with the nodeinfo protocol, you need to -to edit your nginx configuration file:: +to edit your nginx configuration file: - # before - ... - location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; - } - ... +```nginx +# before +# ... +location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; +} +# ... - # after - ... - location /.well-known/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/; - } - ... +# after +# ... +location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/; +} +# ... +``` -You can do the same if you use apache:: +You can do the same if you use apache: - # before - ... - <Location "/.well-known/webfinger"> - ProxyPass ${funkwhale-api}/.well-known/webfinger - ProxyPassReverse ${funkwhale-api}/.well-known/webfinger - </Location> - ... +```apache +# before +# ... +<Location "/.well-known/webfinger"> + ProxyPass ${funkwhale-api}/.well-known/webfinger + ProxyPassReverse ${funkwhale-api}/.well-known/webfinger +</Location> +# ... - # after - ... - <Location "/.well-known/"> - ProxyPass ${funkwhale-api}/.well-known/ - ProxyPassReverse ${funkwhale-api}/.well-known/ - </Location> - ... +# after +# ... +<Location "/.well-known/"> + ProxyPass ${funkwhale-api}/.well-known/ + ProxyPassReverse ${funkwhale-api}/.well-known/ +</Location> +# ... +``` This will ensure all well-known endpoints are proxied to funkwhale, and not just webfinger one. @@ -2833,9 +2712,7 @@ Links: - About nodeinfo: https://github.com/jhass/nodeinfo - -0.11 (2018-05-06) ------------------ +## 0.11 (2018-05-06) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -2863,7 +2740,6 @@ Enhancements: - Store high-level settings (such as federation or auth-related ones) in database (#186) - Bugfixes: - Ensure in place imported files get a proper mimetype (#183) @@ -2872,7 +2748,6 @@ Bugfixes: - Fixed small UI glitches/bugs in federation tabs (#184) - X-sendfile not working with in place import (#182) - Documentation: - Added a documentation area for third-party projects (#180) @@ -2880,9 +2755,7 @@ Documentation: - Document that the database should use an utf-8 encoding (#185) - Foundations for API documentation with Swagger (#178) - -Database storage for high-level settings -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Database storage for high-level settings Due to the work done in #186, the following environment variables have been deprecated: @@ -2905,9 +2778,7 @@ announcement when the variables won't be used anymore. Please browse https://docs.funkwhale.audio/configuration.html#instance-settings for more information about instance configuration using the web interface. - -System emails -^^^^^^^^^^^^^ +### System emails Starting from this release, Funkwhale will send two types of emails: @@ -2919,34 +2790,29 @@ Email sending is disabled by default, as it requires additional configuration. In this mode, emails are simply outputted on stdout. If you want to actually send those emails to your users, you should edit your -.env file and tweak the ``EMAIL_CONFIG`` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` +.env file and tweak the `EMAIL_CONFIG` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` for more details. -.. note:: +```{note} +As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, +which was not documented, has no effect anymore. You can safely remove it from +your .env file if it is set. +``` - As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, - which was not documented, has no effect anymore. You can safely remove it from - your .env file if it is set. +### Proxy headers for non-docker deployments - -Proxy headers for non-docker deployments -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For non-docker deployments, add ``--proxy-headers`` at the end of the ``daphne`` +For non-docker deployments, add `--proxy-headers` at the end of the `daphne` command in :file:`/etc/systemd/system/funkwhale-server.service`. This will ensure the application receive the correct IP address from the client and not the proxy's one. - -0.10 (2018-04-23) ------------------ +## 0.10 (2018-04-23) Features: - Can now import files in-place from the CLI importer (#155) - Enhancements: - Avoid downloading audio files multiple times from remote libraries (#163) @@ -2957,7 +2823,6 @@ Enhancements: with a really long path (#142) - Player is back in Queue tab (#150) - Bugfixes: - Fail graciously when AP representation includes a null_value for mediaType @@ -2970,59 +2835,62 @@ Bugfixes: - Reset all sensitive front-end data on logout (#124) - Typos/not showing text due to i18n work (#175) - Documentation: - Better documentation for hardware requirements and memory usage (#165) - -In-place import -^^^^^^^^^^^^^^^ +### In-place import This release includes in-place imports for the CLI import. This means you can load gigabytes of music into funkwhale without worrying about about Funkwhale copying those music files in its internal storage and eating your disk space. -`This new feature is documented here <https://docs.funkwhale.audio/importing-music.html#in-place-import>`_ +[This new feature is documented here](https://docs.funkwhale.audio/importing-music.html#in-place-import) and require additional configuration to ensure funkwhale and your webserver can serve those files properly. **Non-docker users:** -Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following -block to your nginx configuration:: +Assuming your music is stored in `/srv/funkwhale/data/music`, add the following +block to your nginx configuration: - location /_protected/music { - internal; - alias /srv/funkwhale/data/music; - } +```nginx +location /_protected/music { + internal; + alias /srv/funkwhale/data/music; +} +``` -And the following to your .env file:: +And the following to your .env file: - MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +```sh +MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +``` **Docker users:** -Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following -block to your nginx configuration:: +Assuming your music is stored in `/srv/funkwhale/data/music`, add the following +block to your nginx configuration: - location /_protected/music { - internal; - alias /srv/funkwhale/data/music; - } +```nginx +location /_protected/music { + internal; + alias /srv/funkwhale/data/music; +} +``` -Assuming you have the following volume directive in your ``docker-compose.yml`` -(it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add -the following to your .env file:: +Assuming you have the following volume directive in your `docker-compose.yml` +(it's the default): `/srv/funkwhale/data/music:/music:ro`, then add +the following to your .env file: - # this is the path in the container - MUSIC_DIRECTORY_PATH=/music - # this is the path on the host - MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music +```sh +# this is the path in the container +MUSIC_DIRECTORY_PATH=/music +# this is the path on the host +MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music +``` - -0.9.1 (2018-04-17) ------------------- +## 0.9.1 (2018-04-17) Bugfixes: @@ -3030,16 +2898,13 @@ Bugfixes: - Fixed broken permission check on library scanning and too aggressive page validation - -0.9 (2018-04-17) ----------------- +## 0.9 (2018-04-17) Features: - Add internationalization support (#5) - Can now follow and import music from remote libraries (#136, #137) - Enhancements: - Added a i18n-extract yarn script to extract strings to PO files (#162) @@ -3047,9 +2912,7 @@ Enhancements: - We now use a proper user agent including instance version and url during outgoing requests - -Federation is here! -^^^^^^^^^^^^^^^^^^^ +### Federation is here! This is for real this time, and includes: @@ -3064,8 +2927,7 @@ those requests. You can also revoke the access at any time. Documentation was updated with relevant instructions to use and benefit from this new feature: https://docs.funkwhale.audio/federation.html -Preparing internationalization -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Preparing internationalization Funkwhale's front-end as always been english-only, and this is a barrier to new users. The work make Funkwhale's interface translatable was started @@ -3076,8 +2938,7 @@ the near future. Many thank to Baptiste for the hard work and for figuring out a proper solution to this difficult problem. -Upgrade path -^^^^^^^^^^^^ +### Upgrade path In addition to the usual instructions from https://docs.funkwhale.audio/upgrading.html, non-docker users will have @@ -3091,21 +2952,21 @@ and keep disk usage to a minimum. In the future, they will also be needed to refetch music metadata or federated information periodically. -Celery beat can be enabled easily:: +Celery beat can be enabled easily: - curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" - # Also edit /etc/systemd/system/funkwhale.target - # and ensure the Wants= line contains the following: - # Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service - nano /etc/systemd/system/funkwhale.target - # reload configuration - systemctl daemon-reload +```sh +curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" +# Also edit /etc/systemd/system/funkwhale.target +# and ensure the Wants= line contains the following: +# Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service +nano /etc/systemd/system/funkwhale.target +# reload configuration +systemctl daemon-reload +``` Docker users already have celerybeat enabled. - -0.8 (2018-04-02) ----------------- +## 0.8 (2018-04-02) Features: @@ -3113,7 +2974,6 @@ Features: - Implemented page title binding (#1) - Previous Track button restart playback after 3 seconds (#146) - Enhancements: - Added credits to Francis Gading for the logotype (#101) @@ -3127,7 +2987,6 @@ Enhancements: (#131) - We now restrict some usernames from being used during signup (#139) - Bugfixes: - Better error handling during file import (#120) @@ -3136,14 +2995,11 @@ Bugfixes: - Upgraded to Python 3.6 to fix weird but harmless weakref error on django task (#121) - Documentation: - Documented the upgrade process (#127) - -Preparing for federation -^^^^^^^^^^^^^^^^^^^^^^^^ +### Preparing for federation Federation of music libraries is one of the most asked feature. While there is still a lot of work to do, this version includes @@ -3157,38 +3013,36 @@ In order to prepare for federation (see #136 and #137), new API endpoints have been added under /federation and /.well-known/webfinger. For these endpoints to work, you will need to update your nginx configuration, -and add the following snippets:: +and add the following snippets: - location /federation/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/federation/; - } - - location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; - } +```nginx +location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/federation/; +} +location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; +} +``` This will ensure federation endpoints will be reachable in the future. You can of course skip this part if you know you will not federate your instance. -A new ``FEDERATION_ENABLED`` env var have also been added to control whether +A new `FEDERATION_ENABLED` env var have also been added to control whether federation is enabled or not on the application side. This settings defaults to True, which should have no consequences at the moment, since actual federation is not implemented and the only available endpoints are for testing purposes. -Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation +Add `FEDERATION_ENABLED=false` to your .env file to disable federation on the application side. To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, and sending it "/ping", for example, via Mastodon, should trigger a response. - - -0.7 (2018-03-21) ----------------- +## 0.7 (2018-03-21) Features: @@ -3199,7 +3053,6 @@ Features: - Playlists are here \o/ :tada: (#3, #93, #94) - Use django-cacheops to cache common ORM requests (#117) - Bugfixes: - Fixed broken import request admin (#115) @@ -3210,50 +3063,41 @@ Bugfixes: - Fixed synchronized start/stop radio buttons for all custom radios (#103) - Fixed typo and missing icon on homepage (#96) - Documentation: - Up-to-date and complete development and contribution instructions in README.rst (#123) - -0.6.1 (2018-03-06) ------------------- +## 0.6.1 (2018-03-06) Features: - Can now skip acoustid on file import with the --no-acoustid flag (#111) - Bugfixes: - Added missing batch id in output during import (#112) - Added some feedback on the play button (#100) - Smarter pagination which takes a fixed size (#84) - Other: - Completely removed django-cachalot from the codebase (#110). You can safely remove the CACHALOT_ENABLED setting from your .env file - -0.6 (2018-03-04) ----------------- +## 0.6 (2018-03-04) Features: - Basic activity stream for listening and favorites (#23) - Switched to django-channels and daphne for serving HTTP and websocket (#34) -Upgrades notes -^^^^^^^^^^^^^^ +### Upgrades notes This version contains breaking changes in the way funkwhale is deployed, please read the notes carefully. -Instance timeline -^^^^^^^^^^^^^^^^^ +### Instance timeline A new "Activity" page is now available from the sidebar, where you can browse your instance activity. At the moment, this includes other users @@ -3270,8 +3114,7 @@ but you can switch to a full private mode where nothing is shared. The setting form is available in your profile. -Switch from gunicorn to daphne -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Switch from gunicorn to daphne This release include an important change in the way we serve the HTTP API. To prepare for new realtime features and enable websocket support in Funkwhale, @@ -3284,26 +3127,27 @@ If you are using docker, please remove the command instruction inside the api service, as the up-to-date command is now included directly in the image as the default entry point: -.. code-block:: yaml +```yaml +services: + api: + restart: unless-stopped + image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} + command: ./compose/django/gunicorn.sh # You can remove this line +``` - api: - restart: unless-stopped - image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} - command: ./compose/django/gunicorn.sh # You can remove this line - -On non docker setups, you'll have to update the [Service] block of your +On non docker setups, you'll have to update the `[Service]` block of your funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn. The new configuration should be similar to this: -.. code-block:: ini - - [Service] - User=funkwhale - # adapt this depending on the path of your funkwhale installation - WorkingDirectory=/srv/funkwhale/api - EnvironmentFile=/srv/funkwhale/config/.env - ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application +```ini +[Service] +User=funkwhale +# adapt this depending on the path of your funkwhale installation +WorkingDirectory=/srv/funkwhale/api +EnvironmentFile=/srv/funkwhale/config/.env +ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application +``` Ensure you update funkwhale's dependencies as usual to install the required packages. @@ -3312,25 +3156,23 @@ On both docker and non-docker setup, you'll also have to update your nginx configuration for websocket support. Ensure you have the following blocks included in your virtualhost file: -.. code-block:: text +```nginx +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - server { - ... - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - } +server { + # ... + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; +} +``` Remember to reload your nginx server after the edit. - -0.5.4 (2018-02-28) ------------------- +## 0.5.4 (2018-02-28) Features: @@ -3341,9 +3183,7 @@ Bugfixes: - Fixed queue skipping tracks (#91) - Now loop properly on queue when we only have one track (#95) - -0.5.3 (2018-02-27) ------------------- +## 0.5.3 (2018-02-27) Features: @@ -3351,7 +3191,6 @@ Features: - Added basic instance stats on /about (#82) - Search now unaccent letters for queries like "The DĆø" or "Bjƶrk" yielding more results (#81) - Bugfixes: - Always use username in sidebar (#89) @@ -3361,14 +3200,11 @@ Bugfixes: - Now exclude tracks without file from radio candidates (#88) - skip to next track properly on 40X errors (#86) - Other: - Switched to towncrier for changelog management and compilation - -0.5.2 (2018-02-26) ------------------- +## 0.5.2 (2018-02-26) - Fixed broken file import due to wrong url (#73) - More accurate mimetype detection @@ -3377,17 +3213,13 @@ Other: - We now have a favicon! - Fixed truncated play icon (#65) - -0.5.1 (2018-02-24) ------------------- +## 0.5.1 (2018-02-24) - Front: Fixed broken ajax call on radio builder (#69) - Front: Shuffle now restart next track from beginning (#70) - Front: volume slider should now have the same style everywhere (#72) - -0.5 (2018-02-24) ----------------- +## 0.5 (2018-02-24) - Front: Now reset player colors when track has no cover (#46) - Front: play button now disabled for unplayable tracks @@ -3405,7 +3237,7 @@ Transcoding: Basic transcoding is now available to/from the following formats : ogg and mp3. -*This is still an alpha feature at the moment, please report any bug.* +_This is still an alpha feature at the moment, please report any bug._ This relies internally on FFMPEG and can put some load on your server. It's definitely recommended you setup some caching for the transcoded files @@ -3421,8 +3253,7 @@ to request music they'd like to see imported. Admins can browse those requests and mark them as completed when an import is made. -0.4 (2018-02-18) ----------------- +## 0.4 (2018-02-18) - Front: ambiant colors in player based on current track cover (#59) - Front: simplified front dev setup thanks to webpack proxy (#59) @@ -3435,43 +3266,31 @@ an import is made. This is disabled by default, but feel free to enable it if you want to help us by sending your error reports :) (#8) - -0.3.5 (2018-01-07) ------------------- +## 0.3.5 (2018-01-07) - Smarter BACKEND_URL in frontend - -0.3.4 (2018-01-07) ------------------- +## 0.3.4 (2018-01-07) - Fixed wrong URL construction in ajax call - -0.3.3 (2018-01-07) ------------------- +## 0.3.3 (2018-01-07) - Users can now create their own dynamic radios (#51) - -0.3.2 ------------------- +## 0.3.2 - Fixed an issue in the main dockerfile - -0.3.1 ------------------- +## 0.3.1 - Revamped all import logic, everything is more tested and consistent - Can now use Acoustid in file imports to automatically grab metadata from musicbrainz - Brand new file import wizard +## 0.2.7 -0.2.7 ------------------- - -- Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track +- Shortcuts: can now use the `f` shortcut to toggle the currently playing track as a favorite (#53) - Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53) - Player: Added looping controls and shortcuts (#52) @@ -3491,15 +3310,11 @@ an import is made. - Now use vuex to manage state for authentication - Now use vuex to manage state for player/queue/radios - -0.2.6 (2017-12-15) ------------------- +## 0.2.6 (2017-12-15) - Fixed broken Dockerfile - -0.2.5 (2017-12-15) ------------------- +## 0.2.5 (2017-12-15) Features: @@ -3516,9 +3331,7 @@ Tech: - Django 2 compatibility, lot of packages upgrades (#47) - -0.2.4 (2017-12-14) ------------------- +## 0.2.4 (2017-12-14) Features: From 2e3205a19d14fab0d96ddf7f8d1408994fe7d445 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Fri, 3 Nov 2023 16:44:41 +0100 Subject: [PATCH 081/371] Only allow MusicBrainz tagged file on a pod (#2083) Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/funkwhale_api/music/tasks.py | 9 +++++++++ api/pyproject.toml | 1 + api/tests/music/test_tasks.py | 27 +++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 2d4e173d7..13baf36ca 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -247,6 +247,15 @@ def process_upload(upload, update_denormalization=True): return fail_import( upload, "invalid_metadata", detail=detail, file_metadata=metadata_dump ) + if ( + settings.ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES is True + and not serializer.validated_data.get("mbid") + ): + return fail_import( + upload, + "Uploading files without a MusicBrainz ID is not permitted in this pod", + detail="You can tag you files with MusicBrainz Picard", + ) final_metadata = collections.ChainMap( additional_data, serializer.validated_data, internal_config diff --git a/api/pyproject.toml b/api/pyproject.toml index ab2d6a47c..075e0e427 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -179,6 +179,7 @@ env = [ "DISABLE_PASSWORD_VALIDATORS=false", "FUNKWHALE_PLUGINS=", "MUSIC_DIRECTORY_PATH=/music", + "ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES=true", ] [tool.coverage.run] diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 43bb87dd3..b11239083 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1400,3 +1400,30 @@ def test_fs_import(factories, cache, mocker, settings): } assert cache.get("fs-import:status") == "finished" assert "Pruning dangling tracks" in cache.get("fs-import:logs")[-1] + + +def test_upload_checks_mbid_tag(temp_signal, factories, mocker): + mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + mocker.patch("funkwhale_api.music.tasks.populate_album_cover") + mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") + # mocker.spy(tasks, "get_track_from_import_metadata") + track = factories["music.Track"](album__attachment_cover=None, mbid=None) + path = os.path.join(DATA_DIR, "with_cover.opus") + + upload = factories["music.Upload"]( + track=None, + audio_file__from_path=path, + import_metadata={"funkwhale": {"track": {"uuid": str(track.uuid)}}}, + ) + mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") + + with temp_signal(signals.upload_import_status_updated) as handler: + tasks.process_upload(upload_id=upload.pk) + + upload.refresh_from_db() + + assert upload.import_status == "errored" + assert upload.import_details == { + "error_code": "Uploading files without a MusicBrainz ID is not permitted in this pod", + "detail": "You can tag you files with MusicBrainz Picard", + } From df6f2d919d1c5d41e5102fc90f31a5377c3e0b35 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Fri, 3 Nov 2023 16:50:29 +0100 Subject: [PATCH 082/371] add common setting and lint Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/config/settings/common.py | 7 +++++++ api/tests/music/test_tasks.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index de4117edc..651ea96c8 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -1484,3 +1484,10 @@ Typesense hostname. Defaults to `localhost` on non-Docker deployments and to `ty Docker deployments. """ TYPESENSE_NUM_TYPO = env("TYPESENSE_NUM_TYPO", default=5) + +ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES = env( + "ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES", default=False +) +""" +If True, files without a Musicbrainz id will not be uploaded. +""" diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index b11239083..77c3ea015 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1417,7 +1417,7 @@ def test_upload_checks_mbid_tag(temp_signal, factories, mocker): ) mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") - with temp_signal(signals.upload_import_status_updated) as handler: + with temp_signal(signals.upload_import_status_updated): tasks.process_upload(upload_id=upload.pk) upload.refresh_from_db() From 6e3185f6534a3f021a5b173fca2c4295f3aac37a Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Fri, 3 Nov 2023 16:56:56 +0100 Subject: [PATCH 083/371] changelog Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- changes/changelog.d/2083.newfeature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/2083.newfeature diff --git a/changes/changelog.d/2083.newfeature b/changes/changelog.d/2083.newfeature new file mode 100644 index 000000000..25046e60e --- /dev/null +++ b/changes/changelog.d/2083.newfeature @@ -0,0 +1 @@ +Only allow MusicBrainz tagged file on a pod (#2083) From 6dea3f3cf84c6d59ea10436581d2c8ac96f74f72 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Fri, 3 Nov 2023 18:14:48 +0100 Subject: [PATCH 084/371] resolve test Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/tests/music/test_tasks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 77c3ea015..d9b07d937 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1276,7 +1276,7 @@ def test_can_import_track_with_same_position_in_different_discs(factories, mocke }, "position": upload.track.position, "disc_number": 2, - "mbid": None, + "mbid": str(uuid.uuid4()), } mocker.patch.object(metadata.TrackMetadataSerializer, "validated_data", data) @@ -1310,7 +1310,7 @@ def test_can_import_track_with_same_position_in_same_discs_skipped(factories, mo }, "position": upload.track.position, "disc_number": upload.track.disc_number, - "mbid": None, + "mbid": str(uuid.uuid4()), } mocker.patch.object(metadata.TrackMetadataSerializer, "validated_data", data) From d3b27b4ba96ca8236776a67a6cbf1cfdccb2b37a Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Fri, 3 Nov 2023 19:52:24 +0100 Subject: [PATCH 085/371] resolve test 2 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/tests/conftest.py | 5 +++++ api/tests/test_import_audio_file.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/api/tests/conftest.py b/api/tests/conftest.py index d241db5a7..99d943b20 100644 --- a/api/tests/conftest.py +++ b/api/tests/conftest.py @@ -429,3 +429,8 @@ def clear_license_cache(db): @pytest.fixture def faker(): return factory.Faker._get_faker() + + +@pytest.fixture() +def dont_check_mbid(settings): + settings.ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES = False diff --git a/api/tests/test_import_audio_file.py b/api/tests/test_import_audio_file.py index 398b7aaa1..f096788f1 100644 --- a/api/tests/test_import_audio_file.py +++ b/api/tests/test_import_audio_file.py @@ -364,7 +364,7 @@ def test_handle_modified_update_existing_path_if_found_and_attributed_to( update_track_metadata.assert_not_called() -def test_import_files(factories, capsys): +def test_import_files(factories, capsys, dont_check_mbid): # smoke test to ensure the command run properly library = factories["music.Library"](actor__local=True) call_command( From 179c53695efeb65a4fd057ae0582efc1a993e745 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Mon, 6 Nov 2023 00:00:39 +0100 Subject: [PATCH 086/371] make setting dynamic Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/config/settings/common.py | 7 ------- .../music/dynamic_preferences_registry.py | 15 +++++++++++++++ api/funkwhale_api/music/tasks.py | 6 ++---- api/pyproject.toml | 1 - api/tests/conftest.py | 5 ----- api/tests/music/test_tasks.py | 3 ++- api/tests/test_import_audio_file.py | 2 +- front/src/views/admin/Settings.vue | 2 ++ 8 files changed, 22 insertions(+), 19 deletions(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index 651ea96c8..de4117edc 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -1484,10 +1484,3 @@ Typesense hostname. Defaults to `localhost` on non-Docker deployments and to `ty Docker deployments. """ TYPESENSE_NUM_TYPO = env("TYPESENSE_NUM_TYPO", default=5) - -ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES = env( - "ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES", default=False -) -""" -If True, files without a Musicbrainz id will not be uploaded. -""" diff --git a/api/funkwhale_api/music/dynamic_preferences_registry.py b/api/funkwhale_api/music/dynamic_preferences_registry.py index 13d5ae56a..f459586d7 100644 --- a/api/funkwhale_api/music/dynamic_preferences_registry.py +++ b/api/funkwhale_api/music/dynamic_preferences_registry.py @@ -32,3 +32,18 @@ class MusicCacheDuration(types.IntPreference): "will be erased and retranscoded on the next listening." ) field_kwargs = {"required": False} + + +@global_preferences_registry.register +class MbidTaggedContent(types.BooleanPreference): + show_in_api = True + section = music + name = "only_allow_musicbrainz_tagged_files" + verbose_name = "Only allow Musicbrainz tagged files" + help_text = ( + "Only Musicbrainz tagged files will be allowed to be uploaded on the server. " + "If files where uploaded before this settings will not affect them. " + "To clean the db from files not following mb tags use the funkwhale cli " + "or use quality filters" + ) + default = False diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 13baf36ca..f50ac8be3 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -247,10 +247,8 @@ def process_upload(upload, update_denormalization=True): return fail_import( upload, "invalid_metadata", detail=detail, file_metadata=metadata_dump ) - if ( - settings.ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES is True - and not serializer.validated_data.get("mbid") - ): + check_mbid = preferences.get("music__only_allow_musicbrainz_tagged_files") + if check_mbid is True and not serializer.validated_data.get("mbid"): return fail_import( upload, "Uploading files without a MusicBrainz ID is not permitted in this pod", diff --git a/api/pyproject.toml b/api/pyproject.toml index 075e0e427..ab2d6a47c 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -179,7 +179,6 @@ env = [ "DISABLE_PASSWORD_VALIDATORS=false", "FUNKWHALE_PLUGINS=", "MUSIC_DIRECTORY_PATH=/music", - "ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES=true", ] [tool.coverage.run] diff --git a/api/tests/conftest.py b/api/tests/conftest.py index 99d943b20..d241db5a7 100644 --- a/api/tests/conftest.py +++ b/api/tests/conftest.py @@ -429,8 +429,3 @@ def clear_license_cache(db): @pytest.fixture def faker(): return factory.Faker._get_faker() - - -@pytest.fixture() -def dont_check_mbid(settings): - settings.ONLY_ALLOW_MUSICBRAINZ_TAGGED_FILES = False diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index d9b07d937..d742bebb4 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1402,7 +1402,8 @@ def test_fs_import(factories, cache, mocker, settings): assert "Pruning dangling tracks" in cache.get("fs-import:logs")[-1] -def test_upload_checks_mbid_tag(temp_signal, factories, mocker): +def test_upload_checks_mbid_tag(temp_signal, factories, mocker, preferences): + preferences["music__only_allow_musicbrainz_tagged_files"] = True mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") mocker.patch("funkwhale_api.music.tasks.populate_album_cover") mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") diff --git a/api/tests/test_import_audio_file.py b/api/tests/test_import_audio_file.py index f096788f1..398b7aaa1 100644 --- a/api/tests/test_import_audio_file.py +++ b/api/tests/test_import_audio_file.py @@ -364,7 +364,7 @@ def test_handle_modified_update_existing_path_if_found_and_attributed_to( update_track_metadata.assert_not_called() -def test_import_files(factories, capsys, dont_check_mbid): +def test_import_files(factories, capsys): # smoke test to ensure the command run properly library = factories["music.Library"](actor__local=True) call_command( diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 34889c866..2f3495bf6 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -57,6 +57,8 @@ const groups = computed(() => [ settings: [ { name: 'music__transcoding_enabled' }, { name: 'music__transcoding_cache_duration' } + { name: 'music__only_allow_musicbrainz_tagged_files' }, + ] }, { From b6b0b22f6cb6153d0e94aecd178637f5e697d15c Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Mon, 6 Nov 2023 00:04:06 +0100 Subject: [PATCH 087/371] typo Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- front/src/views/admin/Settings.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 2f3495bf6..c993131e8 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -56,7 +56,7 @@ const groups = computed(() => [ id: 'music', settings: [ { name: 'music__transcoding_enabled' }, - { name: 'music__transcoding_cache_duration' } + { name: 'music__transcoding_cache_duration' }, { name: 'music__only_allow_musicbrainz_tagged_files' }, ] From ccb9987a95cc93d52adfc5ccdd4925f67e53cb22 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Mon, 6 Nov 2023 00:09:44 +0100 Subject: [PATCH 088/371] lint Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- front/src/views/admin/Settings.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index c993131e8..1ff48b2bc 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -57,7 +57,7 @@ const groups = computed(() => [ settings: [ { name: 'music__transcoding_enabled' }, { name: 'music__transcoding_cache_duration' }, - { name: 'music__only_allow_musicbrainz_tagged_files' }, + { name: 'music__only_allow_musicbrainz_tagged_files' } ] }, From 363a4b5d35813bbebc0bc56437513595c93efd57 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Tue, 7 Nov 2023 15:33:28 +0100 Subject: [PATCH 089/371] resolves review Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/funkwhale_api/music/dynamic_preferences_registry.py | 8 ++++---- api/funkwhale_api/music/tasks.py | 2 +- api/tests/music/test_tasks.py | 5 ++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/api/funkwhale_api/music/dynamic_preferences_registry.py b/api/funkwhale_api/music/dynamic_preferences_registry.py index f459586d7..20890fde8 100644 --- a/api/funkwhale_api/music/dynamic_preferences_registry.py +++ b/api/funkwhale_api/music/dynamic_preferences_registry.py @@ -41,9 +41,9 @@ class MbidTaggedContent(types.BooleanPreference): name = "only_allow_musicbrainz_tagged_files" verbose_name = "Only allow Musicbrainz tagged files" help_text = ( - "Only Musicbrainz tagged files will be allowed to be uploaded on the server. " - "If files where uploaded before this settings will not affect them. " - "To clean the db from files not following mb tags use the funkwhale cli " - "or use quality filters" + "Requires uploaded files to be tagged with a MusicBrainz ID. " + "Enabling this setting has no impact on previously uploaded files. " + "You can use the CLI to clear files that don't contain an MBID or " + "or enable quality filtering to hide untagged content from API calls. " ) default = False diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index f50ac8be3..a5982b371 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -248,7 +248,7 @@ def process_upload(upload, update_denormalization=True): upload, "invalid_metadata", detail=detail, file_metadata=metadata_dump ) check_mbid = preferences.get("music__only_allow_musicbrainz_tagged_files") - if check_mbid is True and not serializer.validated_data.get("mbid"): + if check_mbid and not serializer.validated_data.get("mbid"): return fail_import( upload, "Uploading files without a MusicBrainz ID is not permitted in this pod", diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index d742bebb4..c73535303 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1276,7 +1276,7 @@ def test_can_import_track_with_same_position_in_different_discs(factories, mocke }, "position": upload.track.position, "disc_number": 2, - "mbid": str(uuid.uuid4()), + "mbid": None, } mocker.patch.object(metadata.TrackMetadataSerializer, "validated_data", data) @@ -1310,7 +1310,7 @@ def test_can_import_track_with_same_position_in_same_discs_skipped(factories, mo }, "position": upload.track.position, "disc_number": upload.track.disc_number, - "mbid": str(uuid.uuid4()), + "mbid": None, } mocker.patch.object(metadata.TrackMetadataSerializer, "validated_data", data) @@ -1407,7 +1407,6 @@ def test_upload_checks_mbid_tag(temp_signal, factories, mocker, preferences): mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") mocker.patch("funkwhale_api.music.tasks.populate_album_cover") mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") - # mocker.spy(tasks, "get_track_from_import_metadata") track = factories["music.Track"](album__attachment_cover=None, mbid=None) path = os.path.join(DATA_DIR, "with_cover.opus") From 7bf1d95d8e70657471635fa209ea73e7fa8a334d Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Wed, 8 Nov 2023 14:05:08 +0100 Subject: [PATCH 090/371] add test Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/tests/music/test_tasks.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index c73535303..8b456e2d6 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1427,3 +1427,26 @@ def test_upload_checks_mbid_tag(temp_signal, factories, mocker, preferences): "error_code": "Uploading files without a MusicBrainz ID is not permitted in this pod", "detail": "You can tag you files with MusicBrainz Picard", } + + +def test_upload_checks_mbid_tag_pass(temp_signal, factories, mocker, preferences): + preferences["music__only_allow_musicbrainz_tagged_files"] = True + mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + mocker.patch("funkwhale_api.music.tasks.populate_album_cover") + mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") + track = factories["music.Track"](album__attachment_cover=None, mbid=None) + path = os.path.join(DATA_DIR, "test.mp3") + + upload = factories["music.Upload"]( + track=None, + audio_file__from_path=path, + import_metadata={"funkwhale": {"track": {"uuid": str(track.uuid)}}}, + ) + mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") + + with temp_signal(signals.upload_import_status_updated): + tasks.process_upload(upload_id=upload.pk) + + upload.refresh_from_db() + + assert upload.import_status == "finished" From e2a0697529d87c9c4cb22a7ab53fb46f7f26b1aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Fri, 17 Nov 2023 13:56:51 +0000 Subject: [PATCH 091/371] feat(docs): Add MBID-only setting documentation Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- docs/administrator/configuration/instance-settings.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/administrator/configuration/instance-settings.md b/docs/administrator/configuration/instance-settings.md index 51ef4dbda..085be5a04 100644 --- a/docs/administrator/configuration/instance-settings.md +++ b/docs/administrator/configuration/instance-settings.md @@ -111,6 +111,9 @@ Transcoding enabled Transcoding cache duration The number of minutes you want to store transcoded files on your server. Funkwhale removes transcoded tracks that haven't been downloaded within this duration to save space. +Only allow MusicBrainz tagged files + If enabled, only files tagged with a [MusicBrainz ID](https://musicbrainz.org/doc/MusicBrainz_Identifier) can be uploaded to the server. Users can use [MusicBrainz Picard](https://picard.musicbrainz.org/) to tag their content with a MBID. Enabling this setting **does not** remove files uploaded before the setting was enabled. + ``` ### Channels From a7c76279f654196813c3d1f1340a62f9625af535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Fri, 17 Nov 2023 13:57:32 +0000 Subject: [PATCH 092/371] Apply 1 suggestion(s) to 1 file(s) Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/funkwhale_api/music/tasks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index a5982b371..54801967c 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -251,8 +251,8 @@ def process_upload(upload, update_denormalization=True): if check_mbid and not serializer.validated_data.get("mbid"): return fail_import( upload, - "Uploading files without a MusicBrainz ID is not permitted in this pod", - detail="You can tag you files with MusicBrainz Picard", + "Only content tagged with a MusicBrainz ID is permitted on this pod.", + detail="You can tag your files with MusicBrainz Picard", ) final_metadata = collections.ChainMap( From f769c8ce689e00f6c12972af5748cd69d5c33860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Sat, 18 Nov 2023 15:16:57 +0000 Subject: [PATCH 093/371] fix(tests): fix broken test Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2607> --- api/tests/music/test_tasks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 8b456e2d6..b5b8a31e2 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1424,8 +1424,8 @@ def test_upload_checks_mbid_tag(temp_signal, factories, mocker, preferences): assert upload.import_status == "errored" assert upload.import_details == { - "error_code": "Uploading files without a MusicBrainz ID is not permitted in this pod", - "detail": "You can tag you files with MusicBrainz Picard", + "error_code": "Only content tagged with a MusicBrainz ID is permitted on this pod.", + "detail": "You can tag your files with MusicBrainz Picard", } From 346d4e9639bb674cf0f09e863dacaf1ed16fe34a Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 23 Nov 2023 10:28:41 +0100 Subject: [PATCH 094/371] fix(api): Pin lb-matching-tools version Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2603> --- api/poetry.lock | 5459 +++++++++++++++++++++----------------------- api/pyproject.toml | 2 +- 2 files changed, 2637 insertions(+), 2824 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index ac71aef89..27109801c 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,2440 +1,12 @@ +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. + [[package]] name = "aiohttp" version = "3.8.6" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" -attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] - -[[package]] -name = "aioresponses" -version = "0.7.5" -description = "Mock out requests made by ClientSession from aiohttp package" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -aiohttp = ">=3.3.0,<4.0.0" - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "amqp" -version = "5.2.0" -description = "Low-level AMQP client for Python (fork of amqplib)." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -vine = ">=5.0.0,<6.0.0" - -[[package]] -name = "anyio" -version = "4.0.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.22)"] - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -python-dateutil = ">=2.7.0" - -[[package]] -name = "asgiref" -version = "3.7.2" -description = "ASGI specs, helper code, and adapters" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} - -[package.extras] -tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] - -[[package]] -name = "astroid" -version = "2.15.8" -description = "An abstract syntax tree for Python with inference support." -category = "dev" -optional = false -python-versions = ">=3.7.2" - -[package.dependencies] -lazy-object-proxy = ">=1.4.0" -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, -] - -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "asynctest" -version = "0.13.0" -description = "Enhance the standard unittest package with features for testing asyncio libraries" -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "autobahn" -version = "23.1.2" -description = "WebSocket client & server library, WAMP real-time framework" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -cryptography = ">=3.4.6" -hyperlink = ">=21.0.0" -setuptools = "*" -txaio = ">=21.2.1" - -[package.extras] -all = ["PyGObject (>=3.40.0)", "argon2_cffi (>=20.1.0)", "attrs (>=20.3.0)", "base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "cffi (>=1.14.5)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "flatbuffers (>=22.12.6)", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "msgpack (>=1.0.2)", "passlib (>=1.7.4)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "py-ubjson (>=0.16.1)", "pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "python-snappy (>=0.6.0)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "rlp (>=2.0.1)", "service_identity (>=18.1.0)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "ujson (>=4.0.2)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)", "zope.interface (>=5.2.0)"] -compress = ["python-snappy (>=0.6.0)"] -dev = ["backports.tempfile (>=1.0)", "bumpversion (>=0.5.3)", "codecov (>=2.0.15)", "flake8 (<5)", "humanize (>=0.5.1)", "mypy (>=0.610)", "passlib", "pep8-naming (>=0.3.3)", "pip (>=9.0.1)", "pyenchant (>=1.6.6)", "pyflakes (>=1.0.0)", "pyinstaller (>=4.2)", "pylint (>=1.9.2)", "pytest (>=3.4.2)", "pytest-aiohttp", "pytest-asyncio (>=0.14.0)", "pytest-runner (>=2.11.1)", "pyyaml (>=4.2b4)", "qualname", "sphinx (>=1.7.1)", "sphinx-autoapi (>=1.7.0)", "sphinx_rtd_theme (>=0.1.9)", "sphinxcontrib-images (>=0.9.1)", "tox (>=4.2.8)", "tox-gh-actions (>=2.2.0)", "twine (>=3.3.0)", "twisted (>=22.10.0)", "txaio (>=20.4.1)", "watchdog (>=0.8.3)", "wheel (>=0.36.2)", "yapf (==0.29.0)"] -encryption = ["pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "service_identity (>=18.1.0)"] -nvx = ["cffi (>=1.14.5)"] -scram = ["argon2_cffi (>=20.1.0)", "cffi (>=1.14.5)", "passlib (>=1.7.4)"] -serialization = ["cbor2 (>=5.2.0)", "flatbuffers (>=22.12.6)", "msgpack (>=1.0.2)", "py-ubjson (>=0.16.1)", "ujson (>=4.0.2)"] -twisted = ["attrs (>=20.3.0)", "twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] -ui = ["PyGObject (>=3.40.0)"] -xbr = ["base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "rlp (>=2.0.1)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)"] - -[[package]] -name = "Automat" -version = "22.10.0" -description = "Self-service finite-state machines for the programmer on the go." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -attrs = ">=19.2.0" -six = "*" - -[package.extras] -visualize = ["Twisted (>=16.1.1)", "graphviz (>0.5.1)"] - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "backports.zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -tzdata = ["tzdata"] - -[[package]] -name = "billiard" -version = "3.6.4.0" -description = "Python multiprocessing fork with improvements and bugfixes" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "black" -version = "23.3.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bleach" -version = "5.0.1" -description = "An easy safelist-based HTML-sanitizing tool." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] - -[[package]] -name = "boto3" -version = "1.26.161" -description = "The AWS SDK for Python" -category = "main" -optional = false -python-versions = ">= 3.7" - -[package.dependencies] -botocore = ">=1.29.161,<1.30.0" -jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.6.0,<0.7.0" - -[package.extras] -crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] - -[[package]] -name = "botocore" -version = "1.29.165" -description = "Low-level, data-driven core of boto 3." -category = "main" -optional = false -python-versions = ">= 3.7" - -[package.dependencies] -jmespath = ">=0.7.1,<2.0.0" -python-dateutil = ">=2.1,<3.0.0" -urllib3 = ">=1.25.4,<1.27" - -[package.extras] -crt = ["awscrt (==0.16.9)"] - -[[package]] -name = "cachetools" -version = "5.3.2" -description = "Extensible memoizing collections and decorators" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "celery" -version = "5.2.7" -description = "Distributed Task Queue." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=8.0.3,<9.0" -click-didyoumean = ">=0.0.3" -click-plugins = ">=1.1.1" -click-repl = ">=0.2.0" -kombu = ">=5.2.3,<6.0" -pytz = ">=2021.3" -vine = ">=5.0.0,<6.0" - -[package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.9.0)"] -brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] -couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] -eventlet = ["eventlet (>=0.32.0)"] -gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.11.1)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -s3 = ["boto3 (>=1.9.125)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["kombu[sqs]"] -tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] - -[[package]] -name = "certifi" -version = "2023.7.22" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "cffi" -version = "1.16.0" -description = "Foreign Function Interface for Python calling C code." -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "channels" -version = "4.0.0" -description = "Brings async, event-driven capabilities to Django 3.2 and up." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -asgiref = ">=3.5.0,<4" -daphne = {version = ">=4.0.0", optional = true, markers = "extra == \"daphne\""} -Django = ">=3.2" - -[package.extras] -daphne = ["daphne (>=4.0.0)"] -tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", "pytest-django"] - -[[package]] -name = "channels-redis" -version = "4.1.0" -description = "Redis-backed ASGI channel layer implementation" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -asgiref = ">=3.2.10,<4" -channels = "*" -msgpack = ">=1.0,<2.0" -redis = ">=4.5.3" - -[package.extras] -cryptography = ["cryptography (>=1.3.0)"] -tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", "pytest-timeout"] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = ">=3.7.0" - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click-didyoumean" -version = "0.3.0" -description = "Enables git-like *did-you-mean* feature in click" -category = "main" -optional = false -python-versions = ">=3.6.2,<4.0.0" - -[package.dependencies] -click = ">=7" - -[[package]] -name = "click-plugins" -version = "1.1.1" -description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -click = ">=4.0" - -[package.extras] -dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] - -[[package]] -name = "click-repl" -version = "0.3.0" -description = "REPL plugin for Click" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -click = ">=7.0" -prompt-toolkit = ">=3.0.36" - -[package.extras] -testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" - -[[package]] -name = "constantly" -version = "23.10.4" -description = "Symbolic constants in Python" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "countryinfo" -version = "0.1.2" -description = "countryinfo is a python module for returning data about countries, ISO info and states/provinces within them." -category = "main" -optional = false -python-versions = ">3.0.0" - -[[package]] -name = "coverage" -version = "6.5.0" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cryptography" -version = "38.0.4" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] - -[[package]] -name = "daphne" -version = "4.0.0" -description = "Django ASGI (HTTP/WebSocket) server" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -asgiref = ">=3.5.2,<4" -autobahn = ">=22.4.2" -twisted = {version = ">=22.4", extras = ["tls"]} - -[package.extras] -tests = ["django", "hypothesis", "pytest", "pytest-asyncio"] - -[[package]] -name = "debugpy" -version = "1.6.7.post1" -description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "Deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "dill" -version = "0.3.7" -description = "serialize all of Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -graph = ["objgraph (>=1.7.2)"] - -[[package]] -name = "dj-rest-auth" -version = "2.2.8" -description = "Authentication and Registration in Django Rest Framework" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -Django = ">=2.0" -django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extra == \"with_social\""} -djangorestframework = ">=3.7.0" - -[package.extras] -with-social = ["django-allauth (>=0.40.0,<0.53.0)"] - -[[package]] -name = "Django" -version = "3.2.23" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -asgiref = ">=3.3.2,<4" -pytz = "*" -sqlparse = ">=0.2.2" - -[package.extras] -argon2 = ["argon2-cffi (>=19.1.0)"] -bcrypt = ["bcrypt"] - -[[package]] -name = "django-allauth" -version = "0.42.0" -description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Django = ">=2.0" -python3-openid = ">=3.0.8" -requests = "*" -requests-oauthlib = ">=0.3.0" - -[[package]] -name = "django-auth-ldap" -version = "4.1.0" -description = "Django LDAP authentication backend." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -Django = ">=2.2" -python-ldap = ">=3.1" - -[[package]] -name = "django-cache-memoize" -version = "0.1.10" -description = "Django utility for a memoization decorator that uses the Django cache framework." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["black", "flake8", "therapist", "tox", "twine"] - -[[package]] -name = "django-cacheops" -version = "6.1" -description = "A slick ORM cache with automatic granular event-driven invalidation for Django." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -django = ">=2.1" -funcy = ">=1.8,<2.0" -redis = ">=3.0.0" -six = ">=1.4.0" - -[[package]] -name = "django-cleanup" -version = "6.0.0" -description = "Deletes old files." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "django-cors-headers" -version = "3.13.0" -description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-coverage-plugin" -version = "3.0.0" -description = "Django template coverage.py plugin" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -coverage = "*" - -[[package]] -name = "django-debug-toolbar" -version = "3.8.1" -description = "A configurable set of panels that display various debug information about the current request/response." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -django = ">=3.2.4" -sqlparse = ">=0.2" - -[[package]] -name = "django-dynamic-preferences" -version = "1.14.0" -description = "Dynamic global and instance settings for your django project" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -django = ">=3.2" -persisting_theory = "1.0" -six = "*" - -[[package]] -name = "django-environ" -version = "0.10.0" -description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." -category = "main" -optional = false -python-versions = ">=3.5,<4" - -[package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] - -[[package]] -name = "django-extensions" -version = "3.2.3" -description = "Extensions for Django" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-filter" -version = "22.1" -description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-oauth-toolkit" -version = "2.2.0" -description = "OAuth2 Provider for Django" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -django = ">=2.2,<4.0.0 || >4.0.0" -jwcrypto = ">=0.8.0" -oauthlib = ">=3.1.0" -requests = ">=2.13.0" - -[[package]] -name = "django-redis" -version = "5.2.0" -description = "Full featured redis cache backend for Django." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -Django = ">=2.2" -redis = ">=3,<4.0.0 || >4.0.0,<4.0.1 || >4.0.1" - -[package.extras] -hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"] - -[[package]] -name = "django-storages" -version = "1.13.2" -description = "Support for many storage backends in Django" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -Django = ">=3.2" - -[package.extras] -azure = ["azure-storage-blob (>=12.0.0)"] -boto3 = ["boto3 (>=1.4.4)"] -dropbox = ["dropbox (>=7.2.1)"] -google = ["google-cloud-storage (>=1.27.0)"] -libcloud = ["apache-libcloud"] -sftp = ["paramiko (>=1.10.0)"] - -[[package]] -name = "django-versatileimagefield" -version = "2.2" -description = "A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creating new images from the one assigned to the field." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Pillow = ">=2.4.0" -python-magic = ">=0.4.15,<1.0.0" - -[[package]] -name = "djangorestframework" -version = "3.14.0" -description = "Web APIs for Django, made easy." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -django = ">=3.0" -pytz = "*" - -[[package]] -name = "drf-spectacular" -version = "0.26.1" -description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -Django = ">=2.2" -djangorestframework = ">=3.10.3" -inflection = ">=0.3.1" -jsonschema = ">=2.6.0" -PyYAML = ">=5.1" -uritemplate = ">=2.0.0" - -[package.extras] -offline = ["drf-spectacular-sidecar"] -sidecar = ["drf-spectacular-sidecar"] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "factory-boy" -version = "3.2.1" -description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -Faker = ">=0.7.0" - -[package.extras] -dev = ["Django", "Pillow", "SQLAlchemy", "coverage", "flake8", "isort", "mongoengine", "tox", "wheel (>=0.32.0)", "zest.releaser[recommended]"] -doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] - -[[package]] -name = "Faker" -version = "15.3.4" -description = "Faker is a Python package that generates fake data for you." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -python-dateutil = ">=2.4" - -[[package]] -name = "feedparser" -version = "6.0.10" -description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -sgmllib3k = "*" - -[[package]] -name = "flake8" -version = "3.9.2" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - -[[package]] -name = "frozendict" -version = "2.3.8" -description = "A simple immutable dictionary" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "frozenlist" -version = "1.4.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "funcy" -version = "1.18" -description = "A fancy and practical functional tools" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "gunicorn" -version = "20.1.0" -description = "WSGI HTTP Server for UNIX" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -setuptools = ">=3.0" - -[package.extras] -eventlet = ["eventlet (>=0.24.1)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -tornado = ["tornado (>=0.2)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "httptools" -version = "0.6.1" -description = "A collection of framework independent HTTP protocol utils." -category = "main" -optional = false -python-versions = ">=3.8.0" - -[package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] - -[[package]] -name = "hyperlink" -version = "21.0.0" -description = "A featureful, immutable, and correct URL for Python." -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -idna = ">=2.5" - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "6.1.1" -description = "Read resources from Python packages" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] - -[[package]] -name = "incremental" -version = "22.10.0" -description = "\"A small library that versions your Python projects.\"" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -mypy = ["click (>=6.0)", "mypy (==0.812)", "twisted (>=16.4.0)"] -scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] - -[[package]] -name = "inflection" -version = "0.5.1" -description = "A port of Ruby on Rails inflector to Python" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "ipdb" -version = "0.13.13" -description = "IPython-enabled pdb" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -decorator = {version = "*", markers = "python_version > \"3.6\""} -ipython = {version = ">=7.31.1", markers = "python_version > \"3.6\""} -tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < \"3.11\""} - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] - -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.8.0" - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - -[[package]] -name = "jedi" -version = "0.19.1" -description = "An autocompletion tool for Python that can be used for text editors." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "jsonschema" -version = "4.19.2" -description = "An implementation of JSON Schema validation for Python" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -attrs = ">=22.2.0" -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.11.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.31.0" - -[[package]] -name = "jwcrypto" -version = "1.5.0" -description = "Implementation of JOSE Web standards" -category = "main" -optional = false -python-versions = ">= 3.6" - -[package.dependencies] -cryptography = ">=3.4" -deprecated = "*" - -[[package]] -name = "kombu" -version = "5.2.4" -description = "Messaging library for Python." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -amqp = ">=5.0.9,<6.0.0" -vine = "*" - -[package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (>=3.3.0,<3.12.1)"] -msgpack = ["msgpack"] -pyro = ["pyro4"] -qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] - -[[package]] -name = "lazy-object-proxy" -version = "1.9.0" -description = "A fast and thorough lazy object proxy." -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "lb-matching-tools" -version = "0.1.0" -description = "ListenBrainz tools for matching metadata to and from MusicBrainz." -category = "main" -optional = false -python-versions = ">=3.7" -develop = false - -[package.dependencies] -regex = "*" - -[package.source] -type = "git" -url = "https://github.com/metabrainz/listenbrainz-matching-tools.git" -reference = "main" -resolved_reference = "5c0d9c1f2ef39bbb0b1f4892334b306ac2700cd9" - -[[package]] -name = "lxml" -version = "4.9.3" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] - -[[package]] -name = "Markdown" -version = "3.4.4" -description = "Python implementation of John Gruber's Markdown." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] -testing = ["coverage", "pyyaml"] - -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "more-itertools" -version = "10.1.0" -description = "More routines for operating on iterables, beyond itertools" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "msgpack" -version = "1.0.7" -description = "MessagePack serializer" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "musicbrainzngs" -version = "0.7.1" -description = "Python bindings for the MusicBrainz NGS and the Cover Art Archive webservices" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "mutagen" -version = "1.46.0" -description = "read and write audio tags for many formats" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "persisting-theory" -version = "1.0" -description = "Registries that can autodiscover values accross your project apps" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "Pillow" -version = "9.3.0" -description = "Python Imaging Library (Fork)" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "pkgutil_resolve_name" -version = "1.3.10" -description = "Resolve a name to an object." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "platformdirs" -version = "4.0.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] - -[[package]] -name = "pluggy" -version = "1.3.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.8" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pluralizer" -version = "1.2.0" -description = "Singularize or pluralize a given word useing a pre-defined list of rules" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "prompt-toolkit" -version = "3.0.41" -description = "Library for building powerful interactive command lines in Python" -category = "main" -optional = false -python-versions = ">=3.7.0" - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psycopg2" -version = "2.9.9" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "psycopg2-binary" -version = "2.9.9" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyasn1" -version = "0.5.0" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" - -[[package]] -name = "pyasn1-modules" -version = "0.3.0" -description = "A collection of ASN.1-based protocols modules" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.6.0" - -[[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pydub" -version = "0.25.1" -description = "Manipulate audio with an simple and easy high level interface" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyflakes" -version = "2.3.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "Pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "PyLD" -version = "2.0.3" -description = "Python implementation of the JSON-LD API" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -cachetools = "*" -frozendict = "*" -lxml = "*" - -[package.extras] -aiohttp = ["aiohttp"] -cachetools = ["cachetools"] -frozendict = ["frozendict"] -requests = ["requests"] - -[[package]] -name = "pylint" -version = "2.17.2" -description = "python code static checker" -category = "dev" -optional = false -python-versions = ">=3.7.2" - -[package.dependencies] -astroid = ">=2.15.2,<=2.17.0-dev0" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -dill = [ - {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, -] -isort = ">=4.2.5,<6" -mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -tomlkit = ">=0.10.1" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -spelling = ["pyenchant (>=3.2,<4.0)"] -testutils = ["gitpython (>3)"] - -[[package]] -name = "pylint-django" -version = "2.5.3" -description = "A Pylint plugin to help Pylint understand the Django web framework" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -pylint = ">=2.0,<3" -pylint-plugin-utils = ">=0.7" - -[package.extras] -for-tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] -with-django = ["Django"] - -[[package]] -name = "pylint-plugin-utils" -version = "0.8.2" -description = "Utilities and helpers for writing Pylint plugins" -category = "dev" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -pylint = ">=1.7" - -[[package]] -name = "pylistenbrainz" -version = "0.5.2" -description = "A simple ListenBrainz client library for Python" -category = "main" -optional = false -python-versions = ">=3.5" -develop = false - -[package.dependencies] -importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} -requests = ">=2.23.0" - -[package.source] -type = "git" -url = "https://github.com/metabrainz/pylistenbrainz.git" -reference = "v0.5.2" -resolved_reference = "f66414d2da3a260b9d4322d42f98ec7a6d6b982f" - -[[package]] -name = "pyOpenSSL" -version = "23.2.0" -description = "Python wrapper module around the OpenSSL library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" - -[package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] - -[[package]] -name = "pyparsing" -version = "3.1.1" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pytest" -version = "7.2.2" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.21.0" -description = "Pytest support for asyncio" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] -testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] - -[[package]] -name = "pytest-cov" -version = "4.0.0" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] - -[[package]] -name = "pytest-django" -version = "4.5.2" -description = "A Django plugin for pytest." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -pytest = ">=5.4.0" - -[package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] -testing = ["Django", "django-configurations (>=2.0)"] - -[[package]] -name = "pytest-env" -version = "0.8.1" -description = "py.test plugin that allows you to add environment variables." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=7.1.3" - -[package.extras] -test = ["coverage (>=6.5)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pytest-mock" -version = "3.10.0" -description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - -[[package]] -name = "pytest-randomly" -version = "3.12.0" -description = "Pytest plugin to randomly order tests and control random.seed." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} -pytest = "*" - -[[package]] -name = "pytest-sugar" -version = "0.9.7" -description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -packaging = ">=21.3" -pytest = ">=6.2.0" -termcolor = ">=2.1.0" - -[package.extras] -dev = ["black", "flake8", "pre-commit"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-ldap" -version = "3.4.3" -description = "Python modules for implementing LDAP clients" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyasn1 = ">=0.3.7" -pyasn1_modules = ">=0.1.5" - -[[package]] -name = "python-magic" -version = "0.4.27" -description = "File type identification using libmagic" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "python3-openid" -version = "3.2.0" -description = "OpenID support for modern servers and consumers." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -defusedxml = "*" - -[package.extras] -mysql = ["mysql-connector-python"] -postgresql = ["psycopg2"] - -[[package]] -name = "pytz" -version = "2023.3.post1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "PyYAML" -version = "6.0.1" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "redis" -version = "4.5.5" -description = "Python client for Redis database and key-value store" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} - -[package.extras] -hiredis = ["hiredis (>=1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] - -[[package]] -name = "referencing" -version = "0.31.0" -description = "JSON Referencing + Python" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - -[[package]] -name = "regex" -version = "2023.10.3" -description = "Alternative regular expression module, to replace re." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=3.7, <4" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-http-message-signatures" -version = "0.3.1" -description = "A request authentication plugin implementing IETF HTTP Message Signatures" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -cryptography = ">=1.8.2" -requests = ">=2,<3" - -[[package]] -name = "requests-mock" -version = "1.10.0" -description = "Mock out responses from the requests package" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -requests = ">=2.3,<3" -six = "*" - -[package.extras] -fixture = ["fixtures"] -test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testrepository (>=0.0.18)", "testtools"] - -[[package]] -name = "requests-oauthlib" -version = "1.3.1" -description = "OAuthlib authentication support for Requests." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "rpds-py" -version = "0.12.0" -description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "s3transfer" -version = "0.6.2" -description = "An Amazon S3 Transfer Manager" -category = "main" -optional = false -python-versions = ">= 3.7" - -[package.dependencies] -botocore = ">=1.12.36,<2.0a.0" - -[package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] - -[[package]] -name = "sentry-sdk" -version = "1.19.1" -description = "Python client for Sentry (https://sentry.io)" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -certifi = "*" -urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} - -[package.extras] -aiohttp = ["aiohttp (>=3.5)"] -arq = ["arq (>=0.23)"] -beam = ["apache-beam (>=2.12)"] -bottle = ["bottle (>=0.12.13)"] -celery = ["celery (>=3)"] -chalice = ["chalice (>=1.16.0)"] -django = ["django (>=1.8)"] -falcon = ["falcon (>=1.4)"] -fastapi = ["fastapi (>=0.79.0)"] -flask = ["blinker (>=1.1)", "flask (>=0.11)"] -grpcio = ["grpcio (>=1.21.1)"] -httpx = ["httpx (>=0.16.0)"] -huey = ["huey (>=2)"] -opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -pure-eval = ["asttokens", "executing", "pure-eval"] -pymongo = ["pymongo (>=3.1)"] -pyspark = ["pyspark (>=2.4.4)"] -quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] -rq = ["rq (>=0.6)"] -sanic = ["sanic (>=0.8)"] -sqlalchemy = ["sqlalchemy (>=1.2)"] -starlette = ["starlette (>=0.19.1)"] -starlite = ["starlite (>=1.48)"] -tornado = ["tornado (>=5)"] - -[[package]] -name = "service-identity" -version = "21.1.0" -description = "Service identity verification for pyOpenSSL & cryptography." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -attrs = ">=19.1.0" -cryptography = "*" -pyasn1 = "*" -pyasn1-modules = "*" -six = "*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "idna", "pyOpenSSL", "pytest", "sphinx"] -docs = ["furo", "sphinx"] -idna = ["idna"] -tests = ["coverage[toml] (>=5.0.2)", "pytest"] - -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "sgmllib3k" -version = "1.0.0" -description = "Py3k port of sgmllib." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "spotipy" -version = "2.23.0" -description = "A light weight Python library for the Spotify Web API" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -redis = ">=3.5.3" -requests = ">=2.25.0" -six = ">=1.15.0" -urllib3 = ">=1.26.0" - -[package.extras] -doc = ["Sphinx (>=1.5.2)"] -test = ["mock (==2.0.0)"] - -[[package]] -name = "sqlparse" -version = "0.4.4" -description = "A non-validating SQL parser." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["build", "flake8"] -doc = ["sphinx"] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "termcolor" -version = "2.3.0" -description = "ANSI color formatting for output in terminal" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "tomlkit" -version = "0.12.3" -description = "Style preserving TOML library" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "traitlets" -version = "5.13.0" -description = "Traitlets Python configuration system" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] - -[[package]] -name = "troi" -version = "0.1.0" -description = "An empathetic music recommendation system pipeline" -category = "main" -optional = false -python-versions = ">=3.6" -develop = false - -[package.dependencies] -click = ">=8.0" -countryinfo = ">=0.1.2" -more_itertools = "*" -psycopg2-binary = ">=2.9.3" -pylistenbrainz = {git = "https://github.com/metabrainz/pylistenbrainz.git", rev = "v0.5.2"} -pyparsing = "*" -python-dateutil = ">=2.8.2" -requests = "*" -spotipy = ">=2.22.1" -ujson = ">=5.4.0" - -[package.source] -type = "git" -url = "https://github.com/metabrainz/troi-recommendation-playground.git" -reference = "main" -resolved_reference = "a0ca6f9e064eb3a5872db0299a46780f2d118821" - -[[package]] -name = "Twisted" -version = "23.10.0" -description = "An asynchronous networking framework written in Python" -category = "main" -optional = false -python-versions = ">=3.8.0" - -[package.dependencies] -attrs = ">=21.3.0" -automat = ">=0.8.0" -constantly = ">=15.1" -hyperlink = ">=17.1.1" -idna = {version = ">=2.4", optional = true, markers = "extra == \"tls\""} -incremental = ">=22.10.0" -pyopenssl = {version = ">=21.0.0", optional = true, markers = "extra == \"tls\""} -service-identity = {version = ">=18.1.0", optional = true, markers = "extra == \"tls\""} -twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} -typing-extensions = ">=4.2.0" -zope-interface = ">=5" - -[package.extras] -all-non-platform = ["twisted[conch,http2,serial,test,tls]", "twisted[conch,http2,serial,test,tls]"] -conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] -dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "towncrier (>=23.6,<24.0)"] -gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] -http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] -macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] -mypy = ["mypy (>=1.5.1,<1.6.0)", "mypy-zope (>=1.0.1,<1.1.0)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] -osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] -serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] -test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] -tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] -windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platform]", "twisted[all-non-platform]"] - -[[package]] -name = "twisted-iocpsupport" -version = "1.0.4" -description = "An extension for use in the twisted I/O Completion Ports reactor." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "txaio" -version = "23.1.1" -description = "Compatibility API between asyncio/Twisted/Trollius" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -all = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] -dev = ["pep8 (>=1.6.2)", "pyenchant (>=1.6.6)", "pytest (>=2.6.4)", "pytest-cov (>=1.8.1)", "sphinx (>=1.2.3)", "sphinx-rtd-theme (>=0.1.9)", "sphinxcontrib-spelling (>=2.1.2)", "tox (>=2.1.1)", "tox-gh-actions (>=2.2.0)", "twine (>=1.6.5)", "wheel"] -twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] - -[[package]] -name = "typesense" -version = "0.15.1" -description = "Python client for Typesense, an open source and typo tolerant search engine." -category = "main" -optional = true -python-versions = ">=3" - -[package.dependencies] -requests = "*" - -[[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "ujson" -version = "5.8.0" -description = "Ultra fast JSON encoder and decoder for Python" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "unicode-slugify" -version = "0.1.5" -description = "A slug generator that turns strings into unicode slugs." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" -unidecode = "*" - -[[package]] -name = "Unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "uritemplate" -version = "4.1.1" -description = "Implementation of RFC 6570 URI Templates" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "urllib3" -version = "1.26.18" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.20.0" -description = "The lightning-fast ASGI server." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.19.0" -description = "Fast implementation of asyncio event loop on top of libuv" -category = "main" -optional = false -python-versions = ">=3.8.0" - -[package.extras] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] - -[[package]] -name = "vine" -version = "5.1.0" -description = "Python promises." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "watchdog" -version = "2.2.1" -description = "Filesystem events monitoring" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "watchfiles" -version = "0.21.0" -description = "Simple, modern and high performance file watching and code reload in python." -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "wcwidth" -version = "0.2.10" -description = "Measures the displayed width of unicode strings in a terminal" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "websockets" -version = "12.0" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "yarl" -version = "1.9.2" -description = "Yet another URL library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[[package]] -name = "zope.interface" -version = "6.1" -description = "Interfaces for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -setuptools = "*" - -[package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] -test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] -testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] - -[extras] -typesense = ["typesense"] - -[metadata] -lock-version = "1.1" -python-versions = "^3.8,<3.12" -content-hash = "85939cb972d9f931f7f77e47422637e2ffc6cc792ea85fa2a1d1568364635b25" - -[metadata.files] -aiohttp = [ +files = [ {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, @@ -2523,62 +95,247 @@ aiohttp = [ {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, ] -aioresponses = [ + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet"] + +[[package]] +name = "aioresponses" +version = "0.7.5" +description = "Mock out requests made by ClientSession from aiohttp package" +optional = false +python-versions = "*" +files = [ {file = "aioresponses-0.7.5-py2.py3-none-any.whl", hash = "sha256:0af13b077bde04ae965bc21981a1c6afd7dd17b861150d858de477d1c39c26a6"}, {file = "aioresponses-0.7.5.tar.gz", hash = "sha256:794b3e04837a683fd2c0c099bdf77f8d7ecdd284bc2c15203003518bf5cb8da8"}, ] -aiosignal = [ + +[package.dependencies] +aiohttp = ">=3.3.0,<4.0.0" + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, ] -amqp = [ + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "amqp" +version = "5.2.0" +description = "Low-level AMQP client for Python (fork of amqplib)." +optional = false +python-versions = ">=3.6" +files = [ {file = "amqp-5.2.0-py3-none-any.whl", hash = "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637"}, {file = "amqp-5.2.0.tar.gz", hash = "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd"}, ] -anyio = [ - {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, - {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, + +[package.dependencies] +vine = ">=5.0.0,<6.0.0" + +[[package]] +name = "anyio" +version = "4.1.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.1.0-py3-none-any.whl", hash = "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f"}, + {file = "anyio-4.1.0.tar.gz", hash = "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da"}, ] -appnope = [ + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, ] -arrow = [ + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.6" +files = [ {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, ] -asgiref = [ + +[package.dependencies] +python-dateutil = ">=2.7.0" + +[[package]] +name = "asgiref" +version = "3.7.2" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.7" +files = [ {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, ] -astroid = [ + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + +[[package]] +name = "astroid" +version = "2.15.8" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.7.2" +files = [ {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, ] -async-timeout = [ + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] -asynctest = [ + +[[package]] +name = "asynctest" +version = "0.13.0" +description = "Enhance the standard unittest package with features for testing asyncio libraries" +optional = false +python-versions = ">=3.5" +files = [ {file = "asynctest-0.13.0-py3-none-any.whl", hash = "sha256:5da6118a7e6d6b54d83a8f7197769d046922a44d2a99c21382f0a6e4fadae676"}, {file = "asynctest-0.13.0.tar.gz", hash = "sha256:c27862842d15d83e6a34eb0b2866c323880eb3a75e4485b079ea11748fd77fac"}, ] -attrs = [ + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] -autobahn = [ + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "autobahn" +version = "23.1.2" +description = "WebSocket client & server library, WAMP real-time framework" +optional = false +python-versions = ">=3.7" +files = [ {file = "autobahn-23.1.2.tar.gz", hash = "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a"}, ] -Automat = [ + +[package.dependencies] +cryptography = ">=3.4.6" +hyperlink = ">=21.0.0" +setuptools = "*" +txaio = ">=21.2.1" + +[package.extras] +all = ["PyGObject (>=3.40.0)", "argon2_cffi (>=20.1.0)", "attrs (>=20.3.0)", "base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "cffi (>=1.14.5)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "flatbuffers (>=22.12.6)", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "msgpack (>=1.0.2)", "passlib (>=1.7.4)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "py-ubjson (>=0.16.1)", "pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "python-snappy (>=0.6.0)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "rlp (>=2.0.1)", "service_identity (>=18.1.0)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "ujson (>=4.0.2)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)", "zope.interface (>=5.2.0)"] +compress = ["python-snappy (>=0.6.0)"] +dev = ["backports.tempfile (>=1.0)", "bumpversion (>=0.5.3)", "codecov (>=2.0.15)", "flake8 (<5)", "humanize (>=0.5.1)", "mypy (>=0.610)", "passlib", "pep8-naming (>=0.3.3)", "pip (>=9.0.1)", "pyenchant (>=1.6.6)", "pyflakes (>=1.0.0)", "pyinstaller (>=4.2)", "pylint (>=1.9.2)", "pytest (>=3.4.2)", "pytest-aiohttp", "pytest-asyncio (>=0.14.0)", "pytest-runner (>=2.11.1)", "pyyaml (>=4.2b4)", "qualname", "sphinx (>=1.7.1)", "sphinx-autoapi (>=1.7.0)", "sphinx_rtd_theme (>=0.1.9)", "sphinxcontrib-images (>=0.9.1)", "tox (>=4.2.8)", "tox-gh-actions (>=2.2.0)", "twine (>=3.3.0)", "twisted (>=22.10.0)", "txaio (>=20.4.1)", "watchdog (>=0.8.3)", "wheel (>=0.36.2)", "yapf (==0.29.0)"] +encryption = ["pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "service_identity (>=18.1.0)"] +nvx = ["cffi (>=1.14.5)"] +scram = ["argon2_cffi (>=20.1.0)", "cffi (>=1.14.5)", "passlib (>=1.7.4)"] +serialization = ["cbor2 (>=5.2.0)", "flatbuffers (>=22.12.6)", "msgpack (>=1.0.2)", "py-ubjson (>=0.16.1)", "ujson (>=4.0.2)"] +twisted = ["attrs (>=20.3.0)", "twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] +ui = ["PyGObject (>=3.40.0)"] +xbr = ["base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "rlp (>=2.0.1)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)"] + +[[package]] +name = "automat" +version = "22.10.0" +description = "Self-service finite-state machines for the programmer on the go." +optional = false +python-versions = "*" +files = [ {file = "Automat-22.10.0-py2.py3-none-any.whl", hash = "sha256:c3164f8742b9dc440f3682482d32aaff7bb53f71740dd018533f9de286b64180"}, {file = "Automat-22.10.0.tar.gz", hash = "sha256:e56beb84edad19dcc11d30e8d9b895f75deeb5ef5e96b84a467066b3b84bb04e"}, ] -backcall = [ + +[package.dependencies] +attrs = ">=19.2.0" +six = "*" + +[package.extras] +visualize = ["Twisted (>=16.1.1)", "graphviz (>0.5.1)"] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -"backports.zoneinfo" = [ + +[[package]] +name = "backports-zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +optional = false +python-versions = ">=3.6" +files = [ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, @@ -2596,11 +353,28 @@ backcall = [ {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, ] -billiard = [ + +[package.extras] +tzdata = ["tzdata"] + +[[package]] +name = "billiard" +version = "3.6.4.0" +description = "Python multiprocessing fork with improvements and bugfixes" +optional = false +python-versions = "*" +files = [ {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, ] -black = [ + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.7" +files = [ {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, @@ -2627,31 +401,162 @@ black = [ {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] -bleach = [ + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bleach" +version = "5.0.1" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.7" +files = [ {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, ] -boto3 = [ + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] +dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] + +[[package]] +name = "boto3" +version = "1.26.161" +description = "The AWS SDK for Python" +optional = false +python-versions = ">= 3.7" +files = [ {file = "boto3-1.26.161-py3-none-any.whl", hash = "sha256:f66e5c9dbe7f34383bcf64fa6070771355c11a44dd75c7f1279f2f37e1c89183"}, {file = "boto3-1.26.161.tar.gz", hash = "sha256:662731e464d14af1035f44fc6a46b0e3112ee011ac0a5ed416d205daa3e15f25"}, ] -botocore = [ + +[package.dependencies] +botocore = ">=1.29.161,<1.30.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.6.0,<0.7.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.29.165" +description = "Low-level, data-driven core of boto 3." +optional = false +python-versions = ">= 3.7" +files = [ {file = "botocore-1.29.165-py3-none-any.whl", hash = "sha256:6f35d59e230095aed7cd747604fe248fa384bebb7d09549077892f936a8ca3df"}, {file = "botocore-1.29.165.tar.gz", hash = "sha256:988b948be685006b43c4bbd8f5c0cb93e77c66deb70561994e0c5b31b5a67210"}, ] -cachetools = [ + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = ">=1.25.4,<1.27" + +[package.extras] +crt = ["awscrt (==0.16.9)"] + +[[package]] +name = "cachetools" +version = "5.3.2" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, ] -celery = [ + +[[package]] +name = "celery" +version = "5.2.7" +description = "Distributed Task Queue." +optional = false +python-versions = ">=3.7" +files = [ {file = "celery-5.2.7-py3-none-any.whl", hash = "sha256:138420c020cd58d6707e6257b6beda91fd39af7afde5d36c6334d175302c0e14"}, {file = "celery-5.2.7.tar.gz", hash = "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d"}, ] -certifi = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + +[package.dependencies] +billiard = ">=3.6.4.0,<4.0" +click = ">=8.0.3,<9.0" +click-didyoumean = ">=0.0.3" +click-plugins = ">=1.1.1" +click-repl = ">=0.2.0" +kombu = ">=5.2.3,<6.0" +pytz = ">=2021.3" +vine = ">=5.0.0,<6.0" + +[package.extras] +arangodb = ["pyArango (>=1.3.2)"] +auth = ["cryptography"] +azureblockblob = ["azure-storage-blob (==12.9.0)"] +brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] +cassandra = ["cassandra-driver (<3.21.0)"] +consul = ["python-consul2"] +cosmosdbsql = ["pydocumentdb (==2.3.2)"] +couchbase = ["couchbase (>=3.0.0)"] +couchdb = ["pycouchdb"] +django = ["Django (>=1.11)"] +dynamodb = ["boto3 (>=1.9.178)"] +elasticsearch = ["elasticsearch"] +eventlet = ["eventlet (>=0.32.0)"] +gevent = ["gevent (>=1.5.0)"] +librabbitmq = ["librabbitmq (>=1.5.0)"] +memcache = ["pylibmc"] +mongodb = ["pymongo[srv] (>=3.11.1)"] +msgpack = ["msgpack"] +pymemcache = ["python-memcached"] +pyro = ["pyro4"] +pytest = ["pytest-celery"] +redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] +s3 = ["boto3 (>=1.9.125)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +solar = ["ephem"] +sqlalchemy = ["sqlalchemy"] +sqs = ["kombu[sqs]"] +tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] +yaml = ["PyYAML (>=3.10)"] +zookeeper = ["kazoo (>=1.3.1)"] +zstd = ["zstandard"] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] -cffi = [ + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, @@ -2705,15 +610,58 @@ cffi = [ {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] -channels = [ + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "channels" +version = "4.0.0" +description = "Brings async, event-driven capabilities to Django 3.2 and up." +optional = false +python-versions = ">=3.7" +files = [ {file = "channels-4.0.0-py3-none-any.whl", hash = "sha256:2253334ac76f67cba68c2072273f7e0e67dbdac77eeb7e318f511d2f9a53c5e4"}, {file = "channels-4.0.0.tar.gz", hash = "sha256:0ce53507a7da7b148eaa454526e0e05f7da5e5d1c23440e4886cf146981d8420"}, ] -channels-redis = [ + +[package.dependencies] +asgiref = ">=3.5.0,<4" +daphne = {version = ">=4.0.0", optional = true, markers = "extra == \"daphne\""} +Django = ">=3.2" + +[package.extras] +daphne = ["daphne (>=4.0.0)"] +tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", "pytest-django"] + +[[package]] +name = "channels-redis" +version = "4.1.0" +description = "Redis-backed ASGI channel layer implementation" +optional = false +python-versions = ">=3.7" +files = [ {file = "channels_redis-4.1.0-py3-none-any.whl", hash = "sha256:3696f5b9fe367ea495d402ba83d7c3c99e8ca0e1354ff8d913535976ed0abf73"}, {file = "channels_redis-4.1.0.tar.gz", hash = "sha256:6bd4f75f4ab4a7db17cee495593ace886d7e914c66f8214a1f247ff6659c073a"}, ] -charset-normalizer = [ + +[package.dependencies] +asgiref = ">=3.2.10,<4" +channels = "*" +msgpack = ">=1.0,<2.0" +redis = ">=4.5.3" + +[package.extras] +cryptography = ["cryptography (>=1.3.0)"] +tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", "pytest-timeout"] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, @@ -2805,34 +753,109 @@ charset-normalizer = [ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] -click = [ + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] -click-didyoumean = [ + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-didyoumean" +version = "0.3.0" +description = "Enables git-like *did-you-mean* feature in click" +optional = false +python-versions = ">=3.6.2,<4.0.0" +files = [ {file = "click-didyoumean-0.3.0.tar.gz", hash = "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035"}, {file = "click_didyoumean-0.3.0-py3-none-any.whl", hash = "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667"}, ] -click-plugins = [ + +[package.dependencies] +click = ">=7" + +[[package]] +name = "click-plugins" +version = "1.1.1" +description = "An extension module for click to enable registering CLI commands via setuptools entry-points." +optional = false +python-versions = "*" +files = [ {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, ] -click-repl = [ + +[package.dependencies] +click = ">=4.0" + +[package.extras] +dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] + +[[package]] +name = "click-repl" +version = "0.3.0" +description = "REPL plugin for Click" +optional = false +python-versions = ">=3.6" +files = [ {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, ] -colorama = [ + +[package.dependencies] +click = ">=7.0" +prompt-toolkit = ">=3.0.36" + +[package.extras] +testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -constantly = [ + +[[package]] +name = "constantly" +version = "23.10.4" +description = "Symbolic constants in Python" +optional = false +python-versions = ">=3.8" +files = [ {file = "constantly-23.10.4-py3-none-any.whl", hash = "sha256:3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9"}, {file = "constantly-23.10.4.tar.gz", hash = "sha256:aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd"}, ] -countryinfo = [ + +[[package]] +name = "countryinfo" +version = "0.1.2" +description = "countryinfo is a python module for returning data about countries, ISO info and states/provinces within them." +optional = false +python-versions = ">3.0.0" +files = [ {file = "countryinfo-0.1.2-py3-none-any.whl", hash = "sha256:fd518b3fd8899f6520518320ac17b67bf410c7db5044c61cb191f802bb85c34d"}, ] -coverage = [ + +[[package]] +name = "coverage" +version = "6.5.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.7" +files = [ {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, @@ -2884,7 +907,20 @@ coverage = [ {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, ] -cryptography = [ + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cryptography" +version = "38.0.4" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.6" +files = [ {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"}, {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"}, {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"}, @@ -2912,11 +948,44 @@ cryptography = [ {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"}, {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"}, ] -daphne = [ + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +sdist = ["setuptools-rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] + +[[package]] +name = "daphne" +version = "4.0.0" +description = "Django ASGI (HTTP/WebSocket) server" +optional = false +python-versions = ">=3.7" +files = [ {file = "daphne-4.0.0-py3-none-any.whl", hash = "sha256:a288ece46012b6b719c37150be67c69ebfca0793a8521bf821533bad983179b2"}, {file = "daphne-4.0.0.tar.gz", hash = "sha256:cce9afc8f49a4f15d4270b8cfb0e0fe811b770a5cc795474e97e4da287497666"}, ] -debugpy = [ + +[package.dependencies] +asgiref = ">=3.5.2,<4" +autobahn = ">=22.4.2" +twisted = {version = ">=22.4", extras = ["tls"]} + +[package.extras] +tests = ["django", "hypothesis", "pytest", "pytest-asyncio"] + +[[package]] +name = "debugpy" +version = "1.6.7.post1" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.7" +files = [ {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, @@ -2936,119 +1005,465 @@ debugpy = [ {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, ] -decorator = [ + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -defusedxml = [ + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] -Deprecated = [ + +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, ] -dill = [ + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + +[[package]] +name = "dill" +version = "0.3.7" +description = "serialize all of Python" +optional = false +python-versions = ">=3.7" +files = [ {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, ] -dj-rest-auth = [ + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + +[[package]] +name = "dj-rest-auth" +version = "2.2.8" +description = "Authentication and Registration in Django Rest Framework" +optional = false +python-versions = ">=3.5" +files = [ {file = "dj-rest-auth-2.2.8.tar.gz", hash = "sha256:9fb3492888185ede8b2064ad6803120c7b0b83ab08e2347a02e9b44282374242"}, ] -Django = [ + +[package.dependencies] +Django = ">=2.0" +django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extra == \"with_social\""} +djangorestframework = ">=3.7.0" + +[package.extras] +with-social = ["django-allauth (>=0.40.0,<0.53.0)"] + +[[package]] +name = "django" +version = "3.2.23" +description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +optional = false +python-versions = ">=3.6" +files = [ {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, ] -django-allauth = [ + +[package.dependencies] +asgiref = ">=3.3.2,<4" +pytz = "*" +sqlparse = ">=0.2.2" + +[package.extras] +argon2 = ["argon2-cffi (>=19.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +name = "django-allauth" +version = "0.42.0" +description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." +optional = false +python-versions = "*" +files = [ {file = "django-allauth-0.42.0.tar.gz", hash = "sha256:f17209410b7f87da0a84639fd79d3771b596a6d3fc1a8e48ce50dabc7f441d30"}, ] -django-auth-ldap = [ + +[package.dependencies] +Django = ">=2.0" +python3-openid = ">=3.0.8" +requests = "*" +requests-oauthlib = ">=0.3.0" + +[[package]] +name = "django-auth-ldap" +version = "4.1.0" +description = "Django LDAP authentication backend." +optional = false +python-versions = ">=3.7" +files = [ {file = "django-auth-ldap-4.1.0.tar.gz", hash = "sha256:77f749d3b17807ce8eb56a9c9c8e5746ff316567f81d5ba613495d9c7495a949"}, {file = "django_auth_ldap-4.1.0-py3-none-any.whl", hash = "sha256:68870e7921e84b1a9867e268a9c8a3e573e8a0d95ea08bcf31be178f5826ff36"}, ] -django-cache-memoize = [ + +[package.dependencies] +Django = ">=2.2" +python-ldap = ">=3.1" + +[[package]] +name = "django-cache-memoize" +version = "0.1.10" +description = "Django utility for a memoization decorator that uses the Django cache framework." +optional = false +python-versions = ">=3.5" +files = [ {file = "django-cache-memoize-0.1.10.tar.gz", hash = "sha256:63e8faa245a41c0dbad843807e9f21a6e59eba8e6e50df310fdf6485a6749843"}, {file = "django_cache_memoize-0.1.10-py3-none-any.whl", hash = "sha256:676299313079cde9242ae84db0160e80b1d44e8dd6bc9b1f4f1247e11b30c9e0"}, ] -django-cacheops = [ + +[package.extras] +dev = ["black", "flake8", "therapist", "tox", "twine"] + +[[package]] +name = "django-cacheops" +version = "6.1" +description = "A slick ORM cache with automatic granular event-driven invalidation for Django." +optional = false +python-versions = ">=3.5" +files = [ {file = "django-cacheops-6.1.tar.gz", hash = "sha256:b684ef39fd434189d3cbb7d85417cd972af635289a032447982473b4a89f727d"}, ] -django-cleanup = [ + +[package.dependencies] +django = ">=2.1" +funcy = ">=1.8,<2.0" +redis = ">=3.0.0" +six = ">=1.4.0" + +[[package]] +name = "django-cleanup" +version = "6.0.0" +description = "Deletes old files." +optional = false +python-versions = "*" +files = [ {file = "django-cleanup-6.0.0.tar.gz", hash = "sha256:922e06ef8839c92bd3ab37a84db6058b8764f3fe44dbb4487bbca941d288280a"}, {file = "django_cleanup-6.0.0-py2.py3-none-any.whl", hash = "sha256:997feab3b1f7a2e84f71c29e83b1d664459ec0d4b1924977b1fa25b5babb8703"}, ] -django-cors-headers = [ + +[[package]] +name = "django-cors-headers" +version = "3.13.0" +description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." +optional = false +python-versions = ">=3.7" +files = [ {file = "django-cors-headers-3.13.0.tar.gz", hash = "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf"}, {file = "django_cors_headers-3.13.0-py3-none-any.whl", hash = "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4"}, ] -django-coverage-plugin = [ + +[package.dependencies] +Django = ">=3.2" + +[[package]] +name = "django-coverage-plugin" +version = "3.0.0" +description = "Django template coverage.py plugin" +optional = false +python-versions = "*" +files = [ {file = "django_coverage_plugin-3.0.0-py3-none-any.whl", hash = "sha256:245ecd6e91e5be7a66e0f811fd57091c46b55c0eb85c7fe1a1e4aebca9842a5f"}, {file = "django_coverage_plugin-3.0.0.tar.gz", hash = "sha256:c063d8d49ba2da30fe95d91cf3f0f9f659b55c3f80d4a029d619b2b3144b1206"}, ] -django-debug-toolbar = [ + +[package.dependencies] +coverage = "*" + +[[package]] +name = "django-debug-toolbar" +version = "3.8.1" +description = "A configurable set of panels that display various debug information about the current request/response." +optional = false +python-versions = ">=3.7" +files = [ {file = "django_debug_toolbar-3.8.1-py3-none-any.whl", hash = "sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478"}, {file = "django_debug_toolbar-3.8.1.tar.gz", hash = "sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27"}, ] -django-dynamic-preferences = [ + +[package.dependencies] +django = ">=3.2.4" +sqlparse = ">=0.2" + +[[package]] +name = "django-dynamic-preferences" +version = "1.14.0" +description = "Dynamic global and instance settings for your django project" +optional = false +python-versions = "*" +files = [ {file = "django-dynamic-preferences-1.14.0.tar.gz", hash = "sha256:c00abcb8d524067390a66518cfcd32683b87ad3cc620d5913649fc7707b80833"}, ] -django-environ = [ + +[package.dependencies] +django = ">=3.2" +persisting_theory = "1.0" +six = "*" + +[[package]] +name = "django-environ" +version = "0.10.0" +description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." +optional = false +python-versions = ">=3.5,<4" +files = [ {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, {file = "django_environ-0.10.0-py2.py3-none-any.whl", hash = "sha256:510f8c9c1d0a38b0815f91504270c29440a0cf44fab07f55942fa8d31bbb9be6"}, ] -django-extensions = [ + +[package.extras] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] + +[[package]] +name = "django-extensions" +version = "3.2.3" +description = "Extensions for Django" +optional = false +python-versions = ">=3.6" +files = [ {file = "django-extensions-3.2.3.tar.gz", hash = "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a"}, {file = "django_extensions-3.2.3-py3-none-any.whl", hash = "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401"}, ] -django-filter = [ + +[package.dependencies] +Django = ">=3.2" + +[[package]] +name = "django-filter" +version = "22.1" +description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." +optional = false +python-versions = ">=3.7" +files = [ {file = "django-filter-22.1.tar.gz", hash = "sha256:ed473b76e84f7e83b2511bb2050c3efb36d135207d0128dfe3ae4b36e3594ba5"}, {file = "django_filter-22.1-py3-none-any.whl", hash = "sha256:ed429e34760127e3520a67f415bec4c905d4649fbe45d0d6da37e6ff5e0287eb"}, ] -django-oauth-toolkit = [ + +[package.dependencies] +Django = ">=3.2" + +[[package]] +name = "django-oauth-toolkit" +version = "2.2.0" +description = "OAuth2 Provider for Django" +optional = false +python-versions = "*" +files = [ {file = "django-oauth-toolkit-2.2.0.tar.gz", hash = "sha256:46890decb24a34e2a5382debeaf7752e50d90b7a11716cf2a9fd067097ec0963"}, {file = "django_oauth_toolkit-2.2.0-py3-none-any.whl", hash = "sha256:abd85c74af525a62365ec2049113e73a2ff8b46ef906e7104a7ba968ef02a11d"}, ] -django-redis = [ + +[package.dependencies] +django = ">=2.2,<4.0.0 || >4.0.0" +jwcrypto = ">=0.8.0" +oauthlib = ">=3.1.0" +requests = ">=2.13.0" + +[[package]] +name = "django-redis" +version = "5.2.0" +description = "Full featured redis cache backend for Django." +optional = false +python-versions = ">=3.6" +files = [ {file = "django-redis-5.2.0.tar.gz", hash = "sha256:8a99e5582c79f894168f5865c52bd921213253b7fd64d16733ae4591564465de"}, {file = "django_redis-5.2.0-py3-none-any.whl", hash = "sha256:1d037dc02b11ad7aa11f655d26dac3fb1af32630f61ef4428860a2e29ff92026"}, ] -django-storages = [ + +[package.dependencies] +Django = ">=2.2" +redis = ">=3,<4.0.0 || >4.0.0,<4.0.1 || >4.0.1" + +[package.extras] +hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"] + +[[package]] +name = "django-storages" +version = "1.13.2" +description = "Support for many storage backends in Django" +optional = false +python-versions = ">=3.7" +files = [ {file = "django-storages-1.13.2.tar.gz", hash = "sha256:cbadd15c909ceb7247d4ffc503f12a9bec36999df8d0bef7c31e57177d512688"}, {file = "django_storages-1.13.2-py3-none-any.whl", hash = "sha256:31dc5a992520be571908c4c40d55d292660ece3a55b8141462b4e719aa38eab3"}, ] -django-versatileimagefield = [ + +[package.dependencies] +Django = ">=3.2" + +[package.extras] +azure = ["azure-storage-blob (>=12.0.0)"] +boto3 = ["boto3 (>=1.4.4)"] +dropbox = ["dropbox (>=7.2.1)"] +google = ["google-cloud-storage (>=1.27.0)"] +libcloud = ["apache-libcloud"] +sftp = ["paramiko (>=1.10.0)"] + +[[package]] +name = "django-versatileimagefield" +version = "2.2" +description = "A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creating new images from the one assigned to the field." +optional = false +python-versions = "*" +files = [ {file = "django-versatileimagefield-2.2.tar.gz", hash = "sha256:6569d5c3e13c69ab8912ba5100084aa5abcdcffb8d1f5abc085b226e7bbd65b3"}, {file = "django_versatileimagefield-2.2-py2.py3-none-any.whl", hash = "sha256:03766f4d2332f192978879fdb196e18c53e6ccef6c55c5c26b59747b76a97288"}, ] -djangorestframework = [ + +[package.dependencies] +Pillow = ">=2.4.0" +python-magic = ">=0.4.15,<1.0.0" + +[[package]] +name = "djangorestframework" +version = "3.14.0" +description = "Web APIs for Django, made easy." +optional = false +python-versions = ">=3.6" +files = [ {file = "djangorestframework-3.14.0-py3-none-any.whl", hash = "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"}, {file = "djangorestframework-3.14.0.tar.gz", hash = "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8"}, ] -drf-spectacular = [ + +[package.dependencies] +django = ">=3.0" +pytz = "*" + +[[package]] +name = "drf-spectacular" +version = "0.26.1" +description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" +optional = false +python-versions = ">=3.6" +files = [ {file = "drf-spectacular-0.26.1.tar.gz", hash = "sha256:1599a204bf9cc6be7ef3e509859885a38d4f871fe287a1f191479868afd9e234"}, {file = "drf_spectacular-0.26.1-py3-none-any.whl", hash = "sha256:6df86ff6c2dc663792e5ff618643bf41d2ac9dc6fb5d1b0f273e2778bab951e5"}, ] -exceptiongroup = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + +[package.dependencies] +Django = ">=2.2" +djangorestframework = ">=3.10.3" +inflection = ">=0.3.1" +jsonschema = ">=2.6.0" +PyYAML = ">=5.1" +uritemplate = ">=2.0.0" + +[package.extras] +offline = ["drf-spectacular-sidecar"] +sidecar = ["drf-spectacular-sidecar"] + +[[package]] +name = "exceptiongroup" +version = "1.2.0" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] -factory-boy = [ + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "factory-boy" +version = "3.2.1" +description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." +optional = false +python-versions = ">=3.6" +files = [ {file = "factory_boy-3.2.1-py2.py3-none-any.whl", hash = "sha256:eb02a7dd1b577ef606b75a253b9818e6f9eaf996d94449c9d5ebb124f90dc795"}, {file = "factory_boy-3.2.1.tar.gz", hash = "sha256:a98d277b0c047c75eb6e4ab8508a7f81fb03d2cb21986f627913546ef7a2a55e"}, ] -Faker = [ + +[package.dependencies] +Faker = ">=0.7.0" + +[package.extras] +dev = ["Django", "Pillow", "SQLAlchemy", "coverage", "flake8", "isort", "mongoengine", "tox", "wheel (>=0.32.0)", "zest.releaser[recommended]"] +doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] + +[[package]] +name = "faker" +version = "15.3.4" +description = "Faker is a Python package that generates fake data for you." +optional = false +python-versions = ">=3.7" +files = [ {file = "Faker-15.3.4-py3-none-any.whl", hash = "sha256:c2a2ff9dd8dfd991109b517ab98d5cb465e857acb45f6b643a0e284a9eb2cc76"}, {file = "Faker-15.3.4.tar.gz", hash = "sha256:2d5443724f640ce07658ca8ca8bbd40d26b58914e63eec6549727869aa67e2cc"}, ] -feedparser = [ + +[package.dependencies] +python-dateutil = ">=2.4" + +[[package]] +name = "feedparser" +version = "6.0.10" +description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" +optional = false +python-versions = ">=3.6" +files = [ {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, ] -flake8 = [ + +[package.dependencies] +sgmllib3k = "*" + +[[package]] +name = "flake8" +version = "3.9.2" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, ] -frozendict = [ + +[package.dependencies] +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.7.0,<2.8.0" +pyflakes = ">=2.3.0,<2.4.0" + +[[package]] +name = "frozendict" +version = "2.3.8" +description = "A simple immutable dictionary" +optional = false +python-versions = ">=3.6" +files = [ {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, @@ -3087,7 +1502,14 @@ frozendict = [ {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, ] -frozenlist = [ + +[[package]] +name = "frozenlist" +version = "1.4.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, @@ -3150,19 +1572,56 @@ frozenlist = [ {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, ] -funcy = [ + +[[package]] +name = "funcy" +version = "1.18" +description = "A fancy and practical functional tools" +optional = false +python-versions = "*" +files = [ {file = "funcy-1.18-py2.py3-none-any.whl", hash = "sha256:00ce91afc850357a131dc54f0db2ad8a1110d5087f1fa4480d7ea3ba0249f89d"}, {file = "funcy-1.18.tar.gz", hash = "sha256:15448d19a8ebcc7a585afe7a384a19186d0bd67cbf56fb42cd1fd0f76313f9b2"}, ] -gunicorn = [ + +[[package]] +name = "gunicorn" +version = "20.1.0" +description = "WSGI HTTP Server for UNIX" +optional = false +python-versions = ">=3.5" +files = [ {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, ] -h11 = [ + +[package.dependencies] +setuptools = ">=3.0" + +[package.extras] +eventlet = ["eventlet (>=0.24.1)"] +gevent = ["gevent (>=1.4.0)"] +setproctitle = ["setproctitle"] +tornado = ["tornado (>=0.2)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] -httptools = [ + +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, @@ -3200,70 +1659,298 @@ httptools = [ {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, ] -hyperlink = [ + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + +[[package]] +name = "hyperlink" +version = "21.0.0" +description = "A featureful, immutable, and correct URL for Python." +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4"}, {file = "hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b"}, ] -idna = [ + +[package.dependencies] +idna = ">=2.5" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] -importlib-metadata = [ + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] -importlib-resources = [ + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, ] -incremental = [ + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + +[[package]] +name = "incremental" +version = "22.10.0" +description = "\"A small library that versions your Python projects.\"" +optional = false +python-versions = "*" +files = [ {file = "incremental-22.10.0-py2.py3-none-any.whl", hash = "sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51"}, {file = "incremental-22.10.0.tar.gz", hash = "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0"}, ] -inflection = [ + +[package.extras] +mypy = ["click (>=6.0)", "mypy (==0.812)", "twisted (>=16.4.0)"] +scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] + +[[package]] +name = "inflection" +version = "0.5.1" +description = "A port of Ruby on Rails inflector to Python" +optional = false +python-versions = ">=3.5" +files = [ {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, ] -iniconfig = [ + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -ipdb = [ + +[[package]] +name = "ipdb" +version = "0.13.13" +description = "IPython-enabled pdb" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4"}, {file = "ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726"}, ] -ipython = [ + +[package.dependencies] +decorator = {version = "*", markers = "python_version > \"3.6\""} +ipython = {version = ">=7.31.1", markers = "python_version > \"3.6\""} +tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < \"3.11\""} + +[[package]] +name = "ipython" +version = "7.34.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.7" +files = [ {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, ] -isort = [ + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[package.extras] +all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] + +[[package]] +name = "isort" +version = "5.12.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, ] -jedi = [ + +[package.extras] +colors = ["colorama (>=0.4.3)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] -jmespath = [ + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.7" +files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -jsonschema = [ - {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, - {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, + +[[package]] +name = "jsonschema" +version = "4.20.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, ] -jsonschema-specifications = [ + +[package.dependencies] +attrs = ">=22.2.0" +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +jsonschema-specifications = ">=2023.03.6" +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.11.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ {file = "jsonschema_specifications-2023.11.1-py3-none-any.whl", hash = "sha256:f596778ab612b3fd29f72ea0d990393d0540a5aab18bf0407a46632eab540779"}, {file = "jsonschema_specifications-2023.11.1.tar.gz", hash = "sha256:c9b234904ffe02f079bf91b14d79987faa685fd4b39c377a0996954c0090b9ca"}, ] -jwcrypto = [ + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.31.0" + +[[package]] +name = "jwcrypto" +version = "1.5.0" +description = "Implementation of JOSE Web standards" +optional = false +python-versions = ">= 3.6" +files = [ {file = "jwcrypto-1.5.0.tar.gz", hash = "sha256:2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d"}, ] -kombu = [ + +[package.dependencies] +cryptography = ">=3.4" +deprecated = "*" + +[[package]] +name = "kombu" +version = "5.2.4" +description = "Messaging library for Python." +optional = false +python-versions = ">=3.7" +files = [ {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, {file = "kombu-5.2.4.tar.gz", hash = "sha256:37cee3ee725f94ea8bb173eaab7c1760203ea53bbebae226328600f9d2799610"}, ] -lazy-object-proxy = [ + +[package.dependencies] +amqp = ">=5.0.9,<6.0.0" +vine = "*" + +[package.extras] +azureservicebus = ["azure-servicebus (>=7.0.0)"] +azurestoragequeues = ["azure-storage-queue"] +consul = ["python-consul (>=0.6.0)"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +mongodb = ["pymongo (>=3.3.0,<3.12.1)"] +msgpack = ["msgpack"] +pyro = ["pyro4"] +qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] +redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +sqlalchemy = ["sqlalchemy"] +sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] +yaml = ["PyYAML (>=3.10)"] +zookeeper = ["kazoo (>=1.3.1)"] + +[[package]] +name = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.7" +files = [ {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, @@ -3301,8 +1988,32 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, ] -lb-matching-tools = [] -lxml = [ + +[[package]] +name = "lb-matching-tools" +version = "0.1.0" +description = "ListenBrainz tools for matching metadata to and from MusicBrainz." +optional = false +python-versions = ">=3.7" +files = [] +develop = false + +[package.dependencies] +regex = "*" + +[package.source] +type = "git" +url = "https://github.com/metabrainz/listenbrainz-matching-tools.git" +reference = "main" +resolved_reference = "5c0d9c1f2ef39bbb0b1f4892334b306ac2700cd9" + +[[package]] +name = "lxml" +version = "4.9.3" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +files = [ {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, @@ -3396,23 +2107,74 @@ lxml = [ {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, ] -Markdown = [ + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=0.29.35)"] + +[[package]] +name = "markdown" +version = "3.4.4" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.7" +files = [ {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, ] -matplotlib-inline = [ + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] +testing = ["coverage", "pyyaml"] + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, ] -mccabe = [ + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = "*" +files = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] -more-itertools = [ + +[[package]] +name = "more-itertools" +version = "10.1.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.8" +files = [ {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, ] -msgpack = [ + +[[package]] +name = "msgpack" +version = "1.0.7" +description = "MessagePack serializer" +optional = false +python-versions = ">=3.8" +files = [ {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862"}, {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329"}, {file = "msgpack-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b"}, @@ -3470,7 +2232,14 @@ msgpack = [ {file = "msgpack-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3"}, {file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"}, ] -multidict = [ + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, @@ -3546,47 +2315,136 @@ multidict = [ {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] -musicbrainzngs = [ + +[[package]] +name = "musicbrainzngs" +version = "0.7.1" +description = "Python bindings for the MusicBrainz NGS and the Cover Art Archive webservices" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "musicbrainzngs-0.7.1-py2.py3-none-any.whl", hash = "sha256:e841a8f975104c0a72290b09f59326050194081a5ae62ee512f41915090e1a10"}, {file = "musicbrainzngs-0.7.1.tar.gz", hash = "sha256:ab1c0100fd0b305852e65f2ed4113c6de12e68afd55186987b8ed97e0f98e627"}, ] -mutagen = [ + +[[package]] +name = "mutagen" +version = "1.46.0" +description = "read and write audio tags for many formats" +optional = false +python-versions = ">=3.7" +files = [ {file = "mutagen-1.46.0-py3-none-any.whl", hash = "sha256:8af0728aa2d5c3ee5a727e28d0627966641fddfe804c23eabb5926a4d770aed5"}, {file = "mutagen-1.46.0.tar.gz", hash = "sha256:6e5f8ba84836b99fe60be5fb27f84be4ad919bbb6b49caa6ae81e70584b55e58"}, ] -mypy-extensions = [ + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -oauthlib = [ + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, ] -packaging = [ + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] -parso = [ + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] -pathspec = [ + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.7" +files = [ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] -persisting-theory = [ + +[[package]] +name = "persisting-theory" +version = "1.0" +description = "Registries that can autodiscover values accross your project apps" +optional = false +python-versions = "*" +files = [ {file = "persisting-theory-1.0.tar.gz", hash = "sha256:0f840fa22247bcaa514094da7f3b26c602359429ab12d2cd88be06b49a336290"}, {file = "persisting_theory-1.0-py3-none-any.whl", hash = "sha256:73fe3ba1ea7ab67632a1c292fc5c9fa6d3ebfd0e2ad74defa56e316abf3c8d21"}, ] -pexpect = [ + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] -pickleshare = [ + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -Pillow = [ + +[[package]] +name = "pillow" +version = "9.3.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.7" +files = [ {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, @@ -3649,27 +2507,84 @@ Pillow = [ {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, ] -pkgutil_resolve_name = [ + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +optional = false +python-versions = ">=3.6" +files = [ {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, ] -platformdirs = [ + +[[package]] +name = "platformdirs" +version = "4.0.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, ] -pluggy = [ + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] -pluralizer = [ + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pluralizer" +version = "1.2.0" +description = "Singularize or pluralize a given word useing a pre-defined list of rules" +optional = false +python-versions = ">=3.6" +files = [ {file = "pluralizer-1.2.0-py3-none-any.whl", hash = "sha256:d8f92ffa787661d9e704d1e0d8abc6c6c4bbaae9e790d7c709707eafbe17ed12"}, {file = "pluralizer-1.2.0.tar.gz", hash = "sha256:fe3fb8e1e53fabf372e77d8cbebe04b0f8fc7db853aeff50095dbd5628ac39c5"}, ] -prompt-toolkit = [ + +[[package]] +name = "prompt-toolkit" +version = "3.0.41" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, ] -psycopg2 = [ + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psycopg2" +version = "2.9.9" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.7" +files = [ {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"}, {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, @@ -3684,7 +2599,14 @@ psycopg2 = [ {file = "psycopg2-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913"}, {file = "psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156"}, ] -psycopg2-binary = [ + +[[package]] +name = "psycopg2-binary" +version = "2.9.9" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.7" +files = [ {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, @@ -3711,7 +2633,6 @@ psycopg2-binary = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -3720,8 +2641,6 @@ psycopg2-binary = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -3758,124 +2677,475 @@ psycopg2-binary = [ {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, ] -ptyprocess = [ + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] -pyasn1 = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + +[[package]] +name = "pyasn1" +version = "0.5.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, ] -pyasn1-modules = [ + +[[package]] +name = "pyasn1-modules" +version = "0.3.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, ] -pycodestyle = [ + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.6.0" + +[[package]] +name = "pycodestyle" +version = "2.7.0" +description = "Python style guide checker" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] -pycparser = [ + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pydub = [ + +[[package]] +name = "pydub" +version = "0.25.1" +description = "Manipulate audio with an simple and easy high level interface" +optional = false +python-versions = "*" +files = [ {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, ] -pyflakes = [ + +[[package]] +name = "pyflakes" +version = "2.3.1" +description = "passive checker of Python programs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, ] -Pygments = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] -PyLD = [ + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyld" +version = "2.0.3" +description = "Python implementation of the JSON-LD API" +optional = false +python-versions = "*" +files = [ {file = "PyLD-2.0.3.tar.gz", hash = "sha256:287445f888c3a332ccbd20a14844c66c2fcbaeab3c99acd506a0788e2ebb2f82"}, ] -pylint = [ + +[package.dependencies] +cachetools = "*" +frozendict = "*" +lxml = "*" + +[package.extras] +aiohttp = ["aiohttp"] +cachetools = ["cachetools"] +frozendict = ["frozendict"] +requests = ["requests"] + +[[package]] +name = "pylint" +version = "2.17.2" +description = "python code static checker" +optional = false +python-versions = ">=3.7.2" +files = [ {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, ] -pylint-django = [ + +[package.dependencies] +astroid = ">=2.15.2,<=2.17.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pylint-django" +version = "2.5.3" +description = "A Pylint plugin to help Pylint understand the Django web framework" +optional = false +python-versions = "*" +files = [ {file = "pylint-django-2.5.3.tar.gz", hash = "sha256:0ac090d106c62fe33782a1d01bda1610b761bb1c9bf5035ced9d5f23a13d8591"}, {file = "pylint_django-2.5.3-py3-none-any.whl", hash = "sha256:56b12b6adf56d548412445bd35483034394a1a94901c3f8571980a13882299d5"}, ] -pylint-plugin-utils = [ + +[package.dependencies] +pylint = ">=2.0,<3" +pylint-plugin-utils = ">=0.7" + +[package.extras] +for-tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] +with-django = ["Django"] + +[[package]] +name = "pylint-plugin-utils" +version = "0.8.2" +description = "Utilities and helpers for writing Pylint plugins" +optional = false +python-versions = ">=3.7,<4.0" +files = [ {file = "pylint_plugin_utils-0.8.2-py3-none-any.whl", hash = "sha256:ae11664737aa2effbf26f973a9e0b6779ab7106ec0adc5fe104b0907ca04e507"}, {file = "pylint_plugin_utils-0.8.2.tar.gz", hash = "sha256:d3cebf68a38ba3fba23a873809155562571386d4c1b03e5b4c4cc26c3eee93e4"}, ] -pylistenbrainz = [] -pyOpenSSL = [ + +[package.dependencies] +pylint = ">=1.7" + +[[package]] +name = "pylistenbrainz" +version = "0.5.2" +description = "A simple ListenBrainz client library for Python" +optional = false +python-versions = ">=3.5" +files = [] +develop = false + +[package.dependencies] +importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} +requests = ">=2.23.0" + +[package.source] +type = "git" +url = "https://github.com/metabrainz/pylistenbrainz.git" +reference = "v0.5.2" +resolved_reference = "f66414d2da3a260b9d4322d42f98ec7a6d6b982f" + +[[package]] +name = "pyopenssl" +version = "23.2.0" +description = "Python wrapper module around the OpenSSL library" +optional = false +python-versions = ">=3.6" +files = [ {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, ] -pyparsing = [ + +[package.dependencies] +cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" + +[package.extras] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] -pytest = [ + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "7.2.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, ] -pytest-asyncio = [ + +[package.dependencies] +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.21.0" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-asyncio-0.21.0.tar.gz", hash = "sha256:2b38a496aef56f56b0e87557ec313e11e1ab9276fc3863f6a7be0f1d0e415e1b"}, {file = "pytest_asyncio-0.21.0-py3-none-any.whl", hash = "sha256:f2b3366b7cd501a4056858bd39349d5af19742aed2d81660b7998b6341c7eb9c"}, ] -pytest-cov = [ + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] + +[[package]] +name = "pytest-cov" +version = "4.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.6" +files = [ {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, ] -pytest-django = [ + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-django" +version = "4.5.2" +description = "A Django plugin for pytest." +optional = false +python-versions = ">=3.5" +files = [ {file = "pytest-django-4.5.2.tar.gz", hash = "sha256:d9076f759bb7c36939dbdd5ae6633c18edfc2902d1a69fdbefd2426b970ce6c2"}, {file = "pytest_django-4.5.2-py3-none-any.whl", hash = "sha256:c60834861933773109334fe5a53e83d1ef4828f2203a1d6a0fa9972f4f75ab3e"}, ] -pytest-env = [ + +[package.dependencies] +pytest = ">=5.4.0" + +[package.extras] +docs = ["sphinx", "sphinx-rtd-theme"] +testing = ["Django", "django-configurations (>=2.0)"] + +[[package]] +name = "pytest-env" +version = "0.8.1" +description = "py.test plugin that allows you to add environment variables." +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest_env-0.8.1-py3-none-any.whl", hash = "sha256:8c0605ae09a5b7e41c20ebcc44f2c906eea9654095b4b0c342b3814bcc3a8492"}, {file = "pytest_env-0.8.1.tar.gz", hash = "sha256:d7b2f5273ec6d1e221757998bc2f50d2474ed7d0b9331b92556011fadc4e9abf"}, ] -pytest-mock = [ + +[package.dependencies] +pytest = ">=7.1.3" + +[package.extras] +test = ["coverage (>=6.5)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pytest-mock" +version = "3.10.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, ] -pytest-randomly = [ + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-randomly" +version = "3.12.0" +description = "Pytest plugin to randomly order tests and control random.seed." +optional = false +python-versions = ">=3.7" +files = [ {file = "pytest-randomly-3.12.0.tar.gz", hash = "sha256:d60c2db71ac319aee0fc6c4110a7597d611a8b94a5590918bfa8583f00caccb2"}, {file = "pytest_randomly-3.12.0-py3-none-any.whl", hash = "sha256:f4f2e803daf5d1ba036cc22bf4fe9dbbf99389ec56b00e5cba732fb5c1d07fdd"}, ] -pytest-sugar = [ + +[package.dependencies] +importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} +pytest = "*" + +[[package]] +name = "pytest-sugar" +version = "0.9.7" +description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." +optional = false +python-versions = "*" +files = [ {file = "pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46"}, {file = "pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062"}, ] -python-dateutil = [ + +[package.dependencies] +packaging = ">=21.3" +pytest = ">=6.2.0" +termcolor = ">=2.1.0" + +[package.extras] +dev = ["black", "flake8", "pre-commit"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] -python-dotenv = [ + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, ] -python-ldap = [ + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-ldap" +version = "3.4.3" +description = "Python modules for implementing LDAP clients" +optional = false +python-versions = ">=3.6" +files = [ {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, ] -python-magic = [ + +[package.dependencies] +pyasn1 = ">=0.3.7" +pyasn1_modules = ">=0.1.5" + +[[package]] +name = "python-magic" +version = "0.4.27" +description = "File type identification using libmagic" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, ] -python3-openid = [ + +[[package]] +name = "python3-openid" +version = "3.2.0" +description = "OpenID support for modern servers and consumers." +optional = false +python-versions = "*" +files = [ {file = "python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf"}, {file = "python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b"}, ] -pytz = [ + +[package.dependencies] +defusedxml = "*" + +[package.extras] +mysql = ["mysql-connector-python"] +postgresql = ["psycopg2"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] -PyYAML = [ + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3883,15 +3153,8 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3908,7 +3171,6 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3916,20 +3178,51 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] -redis = [ + +[[package]] +name = "redis" +version = "4.5.5" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.7" +files = [ {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, ] -referencing = [ + +[package.dependencies] +async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} + +[package.extras] +hiredis = ["hiredis (>=1.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] + +[[package]] +name = "referencing" +version = "0.31.0" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ {file = "referencing-0.31.0-py3-none-any.whl", hash = "sha256:381b11e53dd93babb55696c71cf42aef2d36b8a150c49bf0bc301e36d536c882"}, {file = "referencing-0.31.0.tar.gz", hash = "sha256:cc28f2c88fbe7b961a7817a0abc034c09a1e36358f82fedb4ffdf29a25398863"}, ] -regex = [ + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "regex" +version = "2023.10.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +files = [ {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, @@ -4019,181 +3312,480 @@ regex = [ {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, ] -requests = [ + +[[package]] +name = "requests" +version = "2.28.2" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7, <4" +files = [ {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, ] -requests-http-message-signatures = [ + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-http-message-signatures" +version = "0.3.1" +description = "A request authentication plugin implementing IETF HTTP Message Signatures" +optional = false +python-versions = ">=3.7,<4.0" +files = [ {file = "requests-http-message-signatures-0.3.1.tar.gz", hash = "sha256:0235bb5cd3f4a7d659645e2ac937da72791321434e77570f7e21042e510820da"}, {file = "requests_http_message_signatures-0.3.1-py3-none-any.whl", hash = "sha256:c20d49adecbebdccfa98676b0760c12a8c2753d262dcb3a8f54cd672794bfb85"}, ] -requests-mock = [ + +[package.dependencies] +cryptography = ">=1.8.2" +requests = ">=2,<3" + +[[package]] +name = "requests-mock" +version = "1.10.0" +description = "Mock out responses from the requests package" +optional = false +python-versions = "*" +files = [ {file = "requests-mock-1.10.0.tar.gz", hash = "sha256:59c9c32419a9fb1ae83ec242d98e889c45bd7d7a65d48375cc243ec08441658b"}, {file = "requests_mock-1.10.0-py2.py3-none-any.whl", hash = "sha256:2fdbb637ad17ee15c06f33d31169e71bf9fe2bdb7bc9da26185be0dd8d842699"}, ] -requests-oauthlib = [ + +[package.dependencies] +requests = ">=2.3,<3" +six = "*" + +[package.extras] +fixture = ["fixtures"] +test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testrepository (>=0.0.18)", "testtools"] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, ] -rpds-py = [ - {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, - {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, - {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, - {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, - {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, - {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, - {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, - {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, - {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, - {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, - {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, - {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, - {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "rpds-py" +version = "0.13.1" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.13.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:83feb0f682d75a09ddc11aa37ba5c07dd9b824b22915207f6176ea458474ff75"}, + {file = "rpds_py-0.13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa84bbe22ffa108f91631935c28a623001e335d66e393438258501e618fb0dde"}, + {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04f8c76b8d5c70695b4e8f1d0b391d8ef91df00ef488c6c1ffb910176459bc6"}, + {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:032c242a595629aacace44128f9795110513ad27217b091e834edec2fb09e800"}, + {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91276caef95556faeb4b8f09fe4439670d3d6206fee78d47ddb6e6de837f0b4d"}, + {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d22f2cb82e0b40e427a74a93c9a4231335bbc548aed79955dde0b64ea7f88146"}, + {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c9e2794329ef070844ff9bfc012004aeddc0468dc26970953709723f76c8a5"}, + {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c797ea56f36c6f248656f0223b11307fdf4a1886f3555eba371f34152b07677f"}, + {file = "rpds_py-0.13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:82dbcd6463e580bcfb7561cece35046aaabeac5a9ddb775020160b14e6c58a5d"}, + {file = "rpds_py-0.13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:736817dbbbd030a69a1faf5413a319976c9c8ba8cdcfa98c022d3b6b2e01eca6"}, + {file = "rpds_py-0.13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f36a1e80ef4ed1996445698fd91e0d3e54738bf597c9995118b92da537d7a28"}, + {file = "rpds_py-0.13.1-cp310-none-win32.whl", hash = "sha256:4f13d3f6585bd07657a603780e99beda96a36c86acaba841f131e81393958336"}, + {file = "rpds_py-0.13.1-cp310-none-win_amd64.whl", hash = "sha256:545e94c84575057d3d5c62634611858dac859702b1519b6ffc58eca7fb1adfcf"}, + {file = "rpds_py-0.13.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6bfe72b249264cc1ff2f3629be240d7d2fdc778d9d298087cdec8524c91cd11f"}, + {file = "rpds_py-0.13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edc91c50e17f5cd945d821f0f1af830522dba0c10267c3aab186dc3dbaab8def"}, + {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2eca04a365be380ca1f8fa48b334462e19e3382c0bb7386444d8ca43aa01c481"}, + {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e3ac5b602fea378243f993d8b707189f9061e55ebb4e56cb9fdef8166060f28"}, + {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfb5d2ab183c0efe5e7b8917e4eaa2e837aacafad8a69b89aa6bc81550eed857"}, + {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d9793d46d3e6522ae58e9321032827c9c0df1e56cbe5d3de965facb311aed6aa"}, + {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cd935c0220d012a27c20135c140f9cdcbc6249d5954345c81bfb714071b985c"}, + {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37b08df45f02ff1866043b95096cbe91ac99de05936dd09d6611987a82a3306a"}, + {file = "rpds_py-0.13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad666a904212aa9a6c77da7dce9d5170008cda76b7776e6731928b3f8a0d40fa"}, + {file = "rpds_py-0.13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8a6ad8429340e0a4de89353447c6441329def3632e7b2293a7d6e873217d3c2b"}, + {file = "rpds_py-0.13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7c40851b659d958c5245c1236e34f0d065cc53dca8d978b49a032c8e0adfda6e"}, + {file = "rpds_py-0.13.1-cp311-none-win32.whl", hash = "sha256:4145172ab59b6c27695db6d78d040795f635cba732cead19c78cede74800949a"}, + {file = "rpds_py-0.13.1-cp311-none-win_amd64.whl", hash = "sha256:46a07a258bda12270de02b34c4884f200f864bba3dcd6e3a37fef36a168b859d"}, + {file = "rpds_py-0.13.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:ba4432301ad7eeb1b00848cf46fae0e5fecfd18a8cb5fdcf856c67985f79ecc7"}, + {file = "rpds_py-0.13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d22e0660de24bd8e9ac82f4230a22a5fe4e397265709289d61d5fb333839ba50"}, + {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76a8374b294e4ccb39ccaf11d39a0537ed107534139c00b4393ca3b542cc66e5"}, + {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d152ec7bb431040af2500e01436c9aa0d993f243346f0594a15755016bf0be1"}, + {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74a2044b870df7c9360bb3ce7e12f9ddf8e72e49cd3a353a1528cbf166ad2383"}, + {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:960e7e460fda2d0af18c75585bbe0c99f90b8f09963844618a621b804f8c3abe"}, + {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37f79f4f1f06cc96151f4a187528c3fd4a7e1065538a4af9eb68c642365957f7"}, + {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd4ea56c9542ad0091dfdef3e8572ae7a746e1e91eb56c9e08b8d0808b40f1d1"}, + {file = "rpds_py-0.13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0290712eb5603a725769b5d857f7cf15cf6ca93dda3128065bbafe6fdb709beb"}, + {file = "rpds_py-0.13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0b70c1f800059c92479dc94dda41288fd6607f741f9b1b8f89a21a86428f6383"}, + {file = "rpds_py-0.13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3dd5fb7737224e1497c886fb3ca681c15d9c00c76171f53b3c3cc8d16ccfa7fb"}, + {file = "rpds_py-0.13.1-cp312-none-win32.whl", hash = "sha256:74be3b215a5695690a0f1a9f68b1d1c93f8caad52e23242fcb8ba56aaf060281"}, + {file = "rpds_py-0.13.1-cp312-none-win_amd64.whl", hash = "sha256:f47eef55297799956464efc00c74ae55c48a7b68236856d56183fe1ddf866205"}, + {file = "rpds_py-0.13.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e4a45ba34f904062c63049a760790c6a2fa7a4cc4bd160d8af243b12371aaa05"}, + {file = "rpds_py-0.13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:20147996376be452cd82cd6c17701daba69a849dc143270fa10fe067bb34562a"}, + {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b9535aa22ab023704cfc6533e968f7e420affe802d85e956d8a7b4c0b0b5ea"}, + {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d4fa1eeb9bea6d9b64ac91ec51ee94cc4fc744955df5be393e1c923c920db2b0"}, + {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b2415d5a7b7ee96aa3a54d4775c1fec140476a17ee12353806297e900eaeddc"}, + {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:577d40a72550eac1386b77b43836151cb61ff6700adacda2ad4d883ca5a0b6f2"}, + {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af2d1648eb625a460eee07d3e1ea3a4a6e84a1fb3a107f6a8e95ac19f7dcce67"}, + {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b769396eb358d6b55dbf78f3f7ca631ca1b2fe02136faad5af74f0111b4b6b7"}, + {file = "rpds_py-0.13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:249c8e0055ca597707d71c5ad85fd2a1c8fdb99386a8c6c257e1b47b67a9bec1"}, + {file = "rpds_py-0.13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:fe30ef31172bdcf946502a945faad110e8fff88c32c4bec9a593df0280e64d8a"}, + {file = "rpds_py-0.13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2647192facf63be9ed2d7a49ceb07efe01dc6cfb083bd2cc53c418437400cb99"}, + {file = "rpds_py-0.13.1-cp38-none-win32.whl", hash = "sha256:4011d5c854aa804c833331d38a2b6f6f2fe58a90c9f615afdb7aa7cf9d31f721"}, + {file = "rpds_py-0.13.1-cp38-none-win_amd64.whl", hash = "sha256:7cfae77da92a20f56cf89739a557b76e5c6edc094f6ad5c090b9e15fbbfcd1a4"}, + {file = "rpds_py-0.13.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e9be1f7c5f9673616f875299339984da9447a40e3aea927750c843d6e5e2e029"}, + {file = "rpds_py-0.13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:839676475ac2ccd1532d36af3d10d290a2ca149b702ed464131e450a767550df"}, + {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90031658805c63fe488f8e9e7a88b260ea121ba3ee9cdabcece9c9ddb50da39"}, + {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ba9fbc5d6e36bfeb5292530321cc56c4ef3f98048647fabd8f57543c34174ec"}, + {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08832078767545c5ee12561ce980714e1e4c6619b5b1e9a10248de60cddfa1fd"}, + {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19f5aa7f5078d35ed8e344bcba40f35bc95f9176dddb33fc4f2084e04289fa63"}, + {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80080972e1d000ad0341c7cc58b6855c80bd887675f92871221451d13a975072"}, + {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ee352691c4434eb1c01802e9daa5edcc1007ff15023a320e2693fed6a661b"}, + {file = "rpds_py-0.13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d20da6b4c7aa9ee75ad0730beaba15d65157f5beeaca54a038bb968f92bf3ce3"}, + {file = "rpds_py-0.13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:faa12a9f34671a30ea6bb027f04ec4e1fb8fa3fb3ed030893e729d4d0f3a9791"}, + {file = "rpds_py-0.13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7cf241dbb50ea71c2e628ab2a32b5bfcd36e199152fc44e5c1edb0b773f1583e"}, + {file = "rpds_py-0.13.1-cp39-none-win32.whl", hash = "sha256:dab979662da1c9fbb464e310c0b06cb5f1d174d09a462553af78f0bfb3e01920"}, + {file = "rpds_py-0.13.1-cp39-none-win_amd64.whl", hash = "sha256:a2b3c79586636f1fa69a7bd59c87c15fca80c0d34b5c003d57f2f326e5276575"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5967fa631d0ed9f8511dede08bc943a9727c949d05d1efac4ac82b2938024fb7"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8308a8d49d1354278d5c068c888a58d7158a419b2e4d87c7839ed3641498790c"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0580faeb9def6d0beb7aa666294d5604e569c4e24111ada423cf9936768d95c"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2da81c1492291c1a90987d76a47c7b2d310661bf7c93a9de0511e27b796a8b46"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c9a1dc5e898ce30e2f9c0aa57181cddd4532b22b7780549441d6429d22d3b58"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4ae6f423cb7d1c6256b7482025ace2825728f53b7ac58bcd574de6ee9d242c2"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3179e0815827cf963e634095ae5715ee73a5af61defbc8d6ca79f1bdae1d1d"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0d9f8930092558fd15c9e07198625efb698f7cc00b3dc311c83eeec2540226a8"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d1d388d2f5f5a6065cf83c54dd12112b7389095669ff395e632003ae8999c6b8"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:08b335fb0c45f0a9e2478a9ece6a1bfb00b6f4c4780f9be3cf36479c5d8dd374"}, + {file = "rpds_py-0.13.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d11afdc5992bbd7af60ed5eb519873690d921425299f51d80aa3099ed49f2bcc"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:8c1f6c8df23be165eb0cb78f305483d00c6827a191e3a38394c658d5b9c80bbd"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:528e2afaa56d815d2601b857644aeb395afe7e59212ab0659906dc29ae68d9a6"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df2af1180b8eeececf4f819d22cc0668bfadadfd038b19a90bd2fb2ee419ec6f"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88956c993a20201744282362e3fd30962a9d86dc4f1dcf2bdb31fab27821b61f"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee70ee5f4144a45a9e6169000b5b525d82673d5dab9f7587eccc92794814e7ac"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5fd099acaee2325f01281a130a39da08d885e4dedf01b84bf156ec2737d78fe"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9656a09653b18b80764647d585750df2dff8928e03a706763ab40ec8c4872acc"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ba239bb37663b2b4cd08e703e79e13321512dccd8e5f0e9451d9e53a6b8509a"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3f55ae773abd96b1de25fc5c3fb356f491bd19116f8f854ba705beffc1ddc3c5"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f4b15a163448ec79241fb2f1bc5a8ae1a4a304f7a48d948d208a2935b26bf8a5"}, + {file = "rpds_py-0.13.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1a3b2583c86bbfbf417304eeb13400ce7f8725376dc7d3efbf35dc5d7052ad48"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:f1059ca9a51c936c9a8d46fbc2c9a6b4c15ab3f13a97f1ad32f024b39666ba85"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f55601fb58f92e4f4f1d05d80c24cb77505dc42103ddfd63ddfdc51d3da46fa2"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcfd5f91b882eedf8d9601bd21261d6ce0e61a8c66a7152d1f5df08d3f643ab1"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6574f619e8734140d96c59bfa8a6a6e7a3336820ccd1bfd95ffa610673b650a2"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4b9d3f5c48bbe8d9e3758e498b3c34863f2c9b1ac57a4e6310183740e59c980"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdd6f8738e1f1d9df5b1603bb03cb30e442710e5672262b95d0f9fcb4edb0dab"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8c2bf286e5d755a075e5e97ba56b3de08cccdad6b323ab0b21cc98875176b03"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d4b390ee70ca9263b331ccfaf9819ee20e90dfd0201a295e23eb64a005dbef"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:db8d0f0ad92f74feb61c4e4a71f1d573ef37c22ef4dc19cab93e501bfdad8cbd"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2abd669a39be69cdfe145927c7eb53a875b157740bf1e2d49e9619fc6f43362e"}, + {file = "rpds_py-0.13.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c173f529666bab8e3f948b74c6d91afa22ea147e6ebae49a48229d9020a47c4"}, + {file = "rpds_py-0.13.1.tar.gz", hash = "sha256:264f3a5906c62b9df3a00ad35f6da1987d321a053895bd85f9d5c708de5c0fbf"}, ] -s3transfer = [ + +[[package]] +name = "s3transfer" +version = "0.6.2" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">= 3.7" +files = [ {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, ] -sentry-sdk = [ + +[package.dependencies] +botocore = ">=1.12.36,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] + +[[package]] +name = "sentry-sdk" +version = "1.19.1" +description = "Python client for Sentry (https://sentry.io)" +optional = false +python-versions = "*" +files = [ {file = "sentry-sdk-1.19.1.tar.gz", hash = "sha256:7ae78bd921981a5010ab540d6bdf3b793659a4db8cccf7f16180702d48a80d84"}, {file = "sentry_sdk-1.19.1-py2.py3-none-any.whl", hash = "sha256:885a11c69df23e53eb281d003b9ff15a5bdfa43d8a2a53589be52104a1b4582f"}, ] -service-identity = [ + +[package.dependencies] +certifi = "*" +urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +arq = ["arq (>=0.23)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +chalice = ["chalice (>=1.16.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["blinker (>=1.1)", "flask (>=0.11)"] +grpcio = ["grpcio (>=1.21.1)"] +httpx = ["httpx (>=0.16.0)"] +huey = ["huey (>=2)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +pure-eval = ["asttokens", "executing", "pure-eval"] +pymongo = ["pymongo (>=3.1)"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] +tornado = ["tornado (>=5)"] + +[[package]] +name = "service-identity" +version = "21.1.0" +description = "Service identity verification for pyOpenSSL & cryptography." +optional = false +python-versions = "*" +files = [ {file = "service-identity-21.1.0.tar.gz", hash = "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34"}, {file = "service_identity-21.1.0-py2.py3-none-any.whl", hash = "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db"}, ] -setuptools = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, + +[package.dependencies] +attrs = ">=19.1.0" +cryptography = "*" +pyasn1 = "*" +pyasn1-modules = "*" +six = "*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "furo", "idna", "pyOpenSSL", "pytest", "sphinx"] +docs = ["furo", "sphinx"] +idna = ["idna"] +tests = ["coverage[toml] (>=5.0.2)", "pytest"] + +[[package]] +name = "setuptools" +version = "69.0.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, ] -sgmllib3k = [ + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "sgmllib3k" +version = "1.0.0" +description = "Py3k port of sgmllib." +optional = false +python-versions = "*" +files = [ {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, ] -six = [ + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -sniffio = [ + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] -spotipy = [ + +[[package]] +name = "spotipy" +version = "2.23.0" +description = "A light weight Python library for the Spotify Web API" +optional = false +python-versions = "*" +files = [ {file = "spotipy-2.23.0-py2-none-any.whl", hash = "sha256:da850fbf62faaa05912132d2886c293a5fbbe8350d0821e7208a6a2fdd6a0079"}, {file = "spotipy-2.23.0-py3-none-any.whl", hash = "sha256:6bf8b963c10d0a3e51037e4baf92e29732dee36b2a1f1b7dcc8cd5771e662a5b"}, {file = "spotipy-2.23.0.tar.gz", hash = "sha256:0dfafe08239daae6c16faa68f60b5775d40c4110725e1a7c545ad4c7fb66d4e8"}, ] -sqlparse = [ + +[package.dependencies] +redis = ">=3.5.3" +requests = ">=2.25.0" +six = ">=1.15.0" +urllib3 = ">=1.26.0" + +[package.extras] +doc = ["Sphinx (>=1.5.2)"] +test = ["mock (==2.0.0)"] + +[[package]] +name = "sqlparse" +version = "0.4.4" +description = "A non-validating SQL parser." +optional = false +python-versions = ">=3.5" +files = [ {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, ] -termcolor = [ + +[package.extras] +dev = ["build", "flake8"] +doc = ["sphinx"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "termcolor" +version = "2.3.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.7" +files = [ {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, ] -tomli = [ + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -tomlkit = [ + +[[package]] +name = "tomlkit" +version = "0.12.3" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.7" +files = [ {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, ] -traitlets = [ + +[[package]] +name = "traitlets" +version = "5.13.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, ] -troi = [] -Twisted = [ + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "troi" +version = "0.1.0" +description = "An empathetic music recommendation system pipeline" +optional = false +python-versions = ">=3.6" +files = [] +develop = false + +[package.dependencies] +click = ">=8.0" +countryinfo = ">=0.1.2" +more_itertools = "*" +psycopg2-binary = ">=2.9.3" +pylistenbrainz = {git = "https://github.com/metabrainz/pylistenbrainz.git", rev = "v0.5.2"} +pyparsing = "*" +python-dateutil = ">=2.8.2" +requests = "*" +spotipy = ">=2.22.1" +ujson = ">=5.4.0" + +[package.source] +type = "git" +url = "https://github.com/metabrainz/troi-recommendation-playground.git" +reference = "v-2023-10-30.0" +resolved_reference = "a0ca6f9e064eb3a5872db0299a46780f2d118821" + +[[package]] +name = "twisted" +version = "23.10.0" +description = "An asynchronous networking framework written in Python" +optional = false +python-versions = ">=3.8.0" +files = [ {file = "twisted-23.10.0-py3-none-any.whl", hash = "sha256:4ae8bce12999a35f7fe6443e7f1893e6fe09588c8d2bed9c35cdce8ff2d5b444"}, {file = "twisted-23.10.0.tar.gz", hash = "sha256:987847a0790a2c597197613686e2784fd54167df3a55d0fb17c8412305d76ce5"}, ] -twisted-iocpsupport = [ + +[package.dependencies] +attrs = ">=21.3.0" +automat = ">=0.8.0" +constantly = ">=15.1" +hyperlink = ">=17.1.1" +idna = {version = ">=2.4", optional = true, markers = "extra == \"tls\""} +incremental = ">=22.10.0" +pyopenssl = {version = ">=21.0.0", optional = true, markers = "extra == \"tls\""} +service-identity = {version = ">=18.1.0", optional = true, markers = "extra == \"tls\""} +twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} +typing-extensions = ">=4.2.0" +zope-interface = ">=5" + +[package.extras] +all-non-platform = ["twisted[conch,http2,serial,test,tls]", "twisted[conch,http2,serial,test,tls]"] +conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] +dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] +dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "towncrier (>=23.6,<24.0)"] +gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] +http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] +macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] +mypy = ["mypy (>=1.5.1,<1.6.0)", "mypy-zope (>=1.0.1,<1.1.0)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] +osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] +serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] +test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] +tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] +windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platform]", "twisted[all-non-platform]"] + +[[package]] +name = "twisted-iocpsupport" +version = "1.0.4" +description = "An extension for use in the twisted I/O Completion Ports reactor." +optional = false +python-versions = "*" +files = [ {file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"}, {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win32.whl", hash = "sha256:afa2b630797f9ed2f27f3d9f55e3f72b4244911e45a8c82756f44babbf0b243e"}, {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:0058c963c8957bcd3deda62122e89953c9de1e867a274facc9b15dde1a9f31e8"}, @@ -4214,18 +3806,54 @@ twisted-iocpsupport = [ {file = "twisted_iocpsupport-1.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7c66fa0aa4236b27b3c61cb488662d85dae746a6d1c7b0d91cf7aae118445adf"}, {file = "twisted_iocpsupport-1.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:300437af17396a945a58dcfffd77863303a8b6d9e65c6e81f1d2eed55b50d444"}, ] -txaio = [ + +[[package]] +name = "txaio" +version = "23.1.1" +description = "Compatibility API between asyncio/Twisted/Trollius" +optional = false +python-versions = ">=3.7" +files = [ {file = "txaio-23.1.1-py2.py3-none-any.whl", hash = "sha256:aaea42f8aad50e0ecfb976130ada140797e9dcb85fad2cf72b0f37f8cefcb490"}, {file = "txaio-23.1.1.tar.gz", hash = "sha256:f9a9216e976e5e3246dfd112ad7ad55ca915606b60b84a757ac769bd404ff704"}, ] -typesense = [ + +[package.extras] +all = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] +dev = ["pep8 (>=1.6.2)", "pyenchant (>=1.6.6)", "pytest (>=2.6.4)", "pytest-cov (>=1.8.1)", "sphinx (>=1.2.3)", "sphinx-rtd-theme (>=0.1.9)", "sphinxcontrib-spelling (>=2.1.2)", "tox (>=2.1.1)", "tox-gh-actions (>=2.2.0)", "twine (>=1.6.5)", "wheel"] +twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] + +[[package]] +name = "typesense" +version = "0.15.1" +description = "Python client for Typesense, an open source and typo tolerant search engine." +optional = true +python-versions = ">=3" +files = [ {file = "typesense-0.15.1-py2.py3-none-any.whl", hash = "sha256:4e87e66049e863187b5115d4743371edd5db75c80795f35a8ffe632bb407f075"}, ] -typing-extensions = [ + +[package.dependencies] +requests = "*" + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] -ujson = [ + +[[package]] +name = "ujson" +version = "5.8.0" +description = "Ultra fast JSON encoder and decoder for Python" +optional = false +python-versions = ">=3.8" +files = [ {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, @@ -4288,27 +3916,92 @@ ujson = [ {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, ] -unicode-slugify = [ + +[[package]] +name = "unicode-slugify" +version = "0.1.5" +description = "A slug generator that turns strings into unicode slugs." +optional = false +python-versions = "*" +files = [ {file = "unicode-slugify-0.1.5.tar.gz", hash = "sha256:25f424258317e4cb41093e2953374b3af1f23097297664731cdb3ae46f6bd6c3"}, {file = "unicode_slugify-0.1.5-py3-none-any.whl", hash = "sha256:33a11c0ac901f7220659dd0dd6f232cf39637dfd1b9f5f35ef5ead9fef696879"}, ] -Unidecode = [ + +[package.dependencies] +six = "*" +unidecode = "*" + +[[package]] +name = "unidecode" +version = "1.3.6" +description = "ASCII transliterations of Unicode text" +optional = false +python-versions = ">=3.5" +files = [ {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, ] -uritemplate = [ + +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +optional = false +python-versions = ">=3.6" +files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, ] -urllib3 = [ + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, ] -uvicorn = [ + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uvicorn" +version = "0.20.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.7" +files = [ {file = "uvicorn-0.20.0-py3-none-any.whl", hash = "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"}, {file = "uvicorn-0.20.0.tar.gz", hash = "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8"}, ] -uvloop = [ + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.19.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, @@ -4341,11 +4034,29 @@ uvloop = [ {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, ] -vine = [ + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "vine" +version = "5.1.0" +description = "Python promises." +optional = false +python-versions = ">=3.6" +files = [ {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, ] -watchdog = [ + +[[package]] +name = "watchdog" +version = "2.2.1" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.6" +files = [ {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, @@ -4375,7 +4086,17 @@ watchdog = [ {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, ] -watchfiles = [ + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, @@ -4452,15 +4173,39 @@ watchfiles = [ {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, ] -wcwidth = [ - {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, - {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, + +[package.dependencies] +anyio = ">=3.0.0" + +[[package]] +name = "wcwidth" +version = "0.2.12" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] -webencodings = [ + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] -websockets = [ + +[[package]] +name = "websockets" +version = "12.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.8" +files = [ {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, @@ -4534,7 +4279,14 @@ websockets = [ {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] -wrapt = [ + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, @@ -4606,87 +4358,132 @@ wrapt = [ {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] -yarl = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + +[[package]] +name = "yarl" +version = "1.9.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32435d134414e01d937cd9d6cc56e8413a8d4741dea36af5840c7750f04d16ab"}, + {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a5211de242754b5e612557bca701f39f8b1a9408dff73c6db623f22d20f470e"}, + {file = "yarl-1.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:525cd69eff44833b01f8ef39aa33a9cc53a99ff7f9d76a6ef6a9fb758f54d0ff"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc94441bcf9cb8c59f51f23193316afefbf3ff858460cb47b5758bf66a14d130"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e36021db54b8a0475805acc1d6c4bca5d9f52c3825ad29ae2d398a9d530ddb88"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0f17d1df951336a02afc8270c03c0c6e60d1f9996fcbd43a4ce6be81de0bd9d"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5f3faeb8100a43adf3e7925d556801d14b5816a0ac9e75e22948e787feec642"}, + {file = "yarl-1.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aed37db837ecb5962469fad448aaae0f0ee94ffce2062cf2eb9aed13328b5196"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:721ee3fc292f0d069a04016ef2c3a25595d48c5b8ddc6029be46f6158d129c92"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b8bc5b87a65a4e64bc83385c05145ea901b613d0d3a434d434b55511b6ab0067"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:dd952b9c64f3b21aedd09b8fe958e4931864dba69926d8a90c90d36ac4e28c9a"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:c405d482c320a88ab53dcbd98d6d6f32ada074f2d965d6e9bf2d823158fa97de"}, + {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9df9a0d4c5624790a0dea2e02e3b1b3c69aed14bcb8650e19606d9df3719e87d"}, + {file = "yarl-1.9.3-cp310-cp310-win32.whl", hash = "sha256:d34c4f80956227f2686ddea5b3585e109c2733e2d4ef12eb1b8b4e84f09a2ab6"}, + {file = "yarl-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:cf7a4e8de7f1092829caef66fd90eaf3710bc5efd322a816d5677b7664893c93"}, + {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d61a0ca95503867d4d627517bcfdc28a8468c3f1b0b06c626f30dd759d3999fd"}, + {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73cc83f918b69110813a7d95024266072d987b903a623ecae673d1e71579d566"}, + {file = "yarl-1.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d81657b23e0edb84b37167e98aefb04ae16cbc5352770057893bd222cdc6e45f"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a1a8443091c7fbc17b84a0d9f38de34b8423b459fb853e6c8cdfab0eacf613"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe34befb8c765b8ce562f0200afda3578f8abb159c76de3ab354c80b72244c41"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c757f64afe53a422e45e3e399e1e3cf82b7a2f244796ce80d8ca53e16a49b9f"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a57b41a0920b9a220125081c1e191b88a4cdec13bf9d0649e382a822705c65"}, + {file = "yarl-1.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632c7aeb99df718765adf58eacb9acb9cbc555e075da849c1378ef4d18bf536a"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b0b8c06afcf2bac5a50b37f64efbde978b7f9dc88842ce9729c020dc71fae4ce"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1d93461e2cf76c4796355494f15ffcb50a3c198cc2d601ad8d6a96219a10c363"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4003f380dac50328c85e85416aca6985536812c082387255c35292cb4b41707e"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4d6d74a97e898c1c2df80339aa423234ad9ea2052f66366cef1e80448798c13d"}, + {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b61e64b06c3640feab73fa4ff9cb64bd8182de52e5dc13038e01cfe674ebc321"}, + {file = "yarl-1.9.3-cp311-cp311-win32.whl", hash = "sha256:29beac86f33d6c7ab1d79bd0213aa7aed2d2f555386856bb3056d5fdd9dab279"}, + {file = "yarl-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7271d6bd8838c49ba8ae647fc06469137e1c161a7ef97d778b72904d9b68696"}, + {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dd318e6b75ca80bff0b22b302f83a8ee41c62b8ac662ddb49f67ec97e799885d"}, + {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4b1efb11a8acd13246ffb0bee888dd0e8eb057f8bf30112e3e21e421eb82d4a"}, + {file = "yarl-1.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c6f034386e5550b5dc8ded90b5e2ff7db21f0f5c7de37b6efc5dac046eb19c10"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd49a908cb6d387fc26acee8b7d9fcc9bbf8e1aca890c0b2fdfd706057546080"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa4643635f26052401750bd54db911b6342eb1a9ac3e74f0f8b58a25d61dfe41"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e741bd48e6a417bdfbae02e088f60018286d6c141639359fb8df017a3b69415a"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c86d0d0919952d05df880a1889a4f0aeb6868e98961c090e335671dea5c0361"}, + {file = "yarl-1.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d5434b34100b504aabae75f0622ebb85defffe7b64ad8f52b8b30ec6ef6e4b9"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79e1df60f7c2b148722fb6cafebffe1acd95fd8b5fd77795f56247edaf326752"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:44e91a669c43f03964f672c5a234ae0d7a4d49c9b85d1baa93dec28afa28ffbd"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3cfa4dbe17b2e6fca1414e9c3bcc216f6930cb18ea7646e7d0d52792ac196808"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:88d2c3cc4b2f46d1ba73d81c51ec0e486f59cc51165ea4f789677f91a303a9a7"}, + {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cccdc02e46d2bd7cb5f38f8cc3d9db0d24951abd082b2f242c9e9f59c0ab2af3"}, + {file = "yarl-1.9.3-cp312-cp312-win32.whl", hash = "sha256:96758e56dceb8a70f8a5cff1e452daaeff07d1cc9f11e9b0c951330f0a2396a7"}, + {file = "yarl-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:c4472fe53ebf541113e533971bd8c32728debc4c6d8cc177f2bff31d011ec17e"}, + {file = "yarl-1.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:126638ab961633f0940a06e1c9d59919003ef212a15869708dcb7305f91a6732"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c99ddaddb2fbe04953b84d1651149a0d85214780e4d0ee824e610ab549d98d92"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dab30b21bd6fb17c3f4684868c7e6a9e8468078db00f599fb1c14e324b10fca"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:828235a2a169160ee73a2fcfb8a000709edf09d7511fccf203465c3d5acc59e4"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc391e3941045fd0987c77484b2799adffd08e4b6735c4ee5f054366a2e1551d"}, + {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51382c72dd5377861b573bd55dcf680df54cea84147c8648b15ac507fbef984d"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:28a108cb92ce6cf867690a962372996ca332d8cda0210c5ad487fe996e76b8bb"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8f18a7832ff85dfcd77871fe677b169b1bc60c021978c90c3bb14f727596e0ae"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:7eaf13af79950142ab2bbb8362f8d8d935be9aaf8df1df89c86c3231e4ff238a"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:66a6dbf6ca7d2db03cc61cafe1ee6be838ce0fbc97781881a22a58a7c5efef42"}, + {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a0a4f3aaa18580038cfa52a7183c8ffbbe7d727fe581300817efc1e96d1b0e9"}, + {file = "yarl-1.9.3-cp37-cp37m-win32.whl", hash = "sha256:946db4511b2d815979d733ac6a961f47e20a29c297be0d55b6d4b77ee4b298f6"}, + {file = "yarl-1.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2dad8166d41ebd1f76ce107cf6a31e39801aee3844a54a90af23278b072f1ccf"}, + {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bb72d2a94481e7dc7a0c522673db288f31849800d6ce2435317376a345728225"}, + {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a172c3d5447b7da1680a1a2d6ecdf6f87a319d21d52729f45ec938a7006d5d8"}, + {file = "yarl-1.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2dc72e891672343b99db6d497024bf8b985537ad6c393359dc5227ef653b2f17"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8d51817cf4b8d545963ec65ff06c1b92e5765aa98831678d0e2240b6e9fd281"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53ec65f7eee8655bebb1f6f1607760d123c3c115a324b443df4f916383482a67"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cfd77e8e5cafba3fb584e0f4b935a59216f352b73d4987be3af51f43a862c403"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e73db54c967eb75037c178a54445c5a4e7461b5203b27c45ef656a81787c0c1b"}, + {file = "yarl-1.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09c19e5f4404574fcfb736efecf75844ffe8610606f3fccc35a1515b8b6712c4"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6280353940f7e5e2efaaabd686193e61351e966cc02f401761c4d87f48c89ea4"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c25ec06e4241e162f5d1f57c370f4078797ade95c9208bd0c60f484834f09c96"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7217234b10c64b52cc39a8d82550342ae2e45be34f5bff02b890b8c452eb48d7"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4ce77d289f8d40905c054b63f29851ecbfd026ef4ba5c371a158cfe6f623663e"}, + {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f74b015c99a5eac5ae589de27a1201418a5d9d460e89ccb3366015c6153e60a"}, + {file = "yarl-1.9.3-cp38-cp38-win32.whl", hash = "sha256:8a2538806be846ea25e90c28786136932ec385c7ff3bc1148e45125984783dc6"}, + {file = "yarl-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:6465d36381af057d0fab4e0f24ef0e80ba61f03fe43e6eeccbe0056e74aadc70"}, + {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2f3c8822bc8fb4a347a192dd6a28a25d7f0ea3262e826d7d4ef9cc99cd06d07e"}, + {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7831566595fe88ba17ea80e4b61c0eb599f84c85acaa14bf04dd90319a45b90"}, + {file = "yarl-1.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff34cb09a332832d1cf38acd0f604c068665192c6107a439a92abfd8acf90fe2"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe8080b4f25dfc44a86bedd14bc4f9d469dfc6456e6f3c5d9077e81a5fedfba7"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8535e111a064f3bdd94c0ed443105934d6f005adad68dd13ce50a488a0ad1bf3"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d155a092bf0ebf4a9f6f3b7a650dc5d9a5bbb585ef83a52ed36ba46f55cc39d"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778df71c8d0c8c9f1b378624b26431ca80041660d7be7c3f724b2c7a6e65d0d6"}, + {file = "yarl-1.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f9cafaf031c34d95c1528c16b2fa07b710e6056b3c4e2e34e9317072da5d1a"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ca6b66f69e30f6e180d52f14d91ac854b8119553b524e0e28d5291a724f0f423"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0e7e83f31e23c5d00ff618045ddc5e916f9e613d33c5a5823bc0b0a0feb522f"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:af52725c7c39b0ee655befbbab5b9a1b209e01bb39128dce0db226a10014aacc"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0ab5baaea8450f4a3e241ef17e3d129b2143e38a685036b075976b9c415ea3eb"}, + {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d350388ba1129bc867c6af1cd17da2b197dff0d2801036d2d7d83c2d771a682"}, + {file = "yarl-1.9.3-cp39-cp39-win32.whl", hash = "sha256:e2a16ef5fa2382af83bef4a18c1b3bcb4284c4732906aa69422cf09df9c59f1f"}, + {file = "yarl-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d92d897cb4b4bf915fbeb5e604c7911021a8456f0964f3b8ebbe7f9188b9eabb"}, + {file = "yarl-1.9.3-py3-none-any.whl", hash = "sha256:271d63396460b6607b588555ea27a1a02b717ca2e3f2cf53bdde4013d7790929"}, + {file = "yarl-1.9.3.tar.gz", hash = "sha256:4a14907b597ec55740f63e52d7fee0e9ee09d5b9d57a4f399a7423268e457b57"}, ] -zipp = [ + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] -"zope.interface" = [ + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[[package]] +name = "zope-interface" +version = "6.1" +description = "Interfaces for Python" +optional = false +python-versions = ">=3.7" +files = [ {file = "zope.interface-6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb"}, {file = "zope.interface-6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92"}, {file = "zope.interface-6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3"}, @@ -4724,3 +4521,19 @@ zipp = [ {file = "zope.interface-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40"}, {file = "zope.interface-6.1.tar.gz", hash = "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"}, ] + +[package.dependencies] +setuptools = "*" + +[package.extras] +docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] +test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] + +[extras] +typesense = ["typesense"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8,<3.12" +content-hash = "89defcf9df569a1d3e2cdb50b29fd9161288dc88daa8c3e0e574ace88d196db2" diff --git a/api/pyproject.toml b/api/pyproject.toml index ab2d6a47c..3efe52293 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -84,7 +84,7 @@ requests = "==2.28.2" requests-http-message-signatures = "==0.3.1" sentry-sdk = "==1.19.1" watchdog = "==2.2.1" -troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", branch = "main"} +troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", tag = "v-2023-10-30.0"} lb-matching-tools = { git = "https://github.com/metabrainz/listenbrainz-matching-tools.git", branch = "main"} unidecode = "==1.3.6" From abf1306e2f9a73b71d93926d9618ece71b63d877 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 26 Jul 2023 10:17:42 +0200 Subject: [PATCH 095/371] feat(nginx): Use builtin envsubst mechanics of nginx container Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2547> --- docker/nginx/conf.dev | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index ae3cd3fce..e4717bc2f 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -81,6 +81,14 @@ server { proxy_pass http://funkwhale-api/api/subsonic/rest/; } + location /media/__sized__/ { + alias /protected/media/__sized__/; + } + + location /media/attachments/ { + alias /protected/media/attachments/; + } + location /.well-known/ { include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://funkwhale-api; From 88d7bdb8abf640826a6ad4b60ce4625e53364fb5 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 1 Aug 2023 13:31:51 +0200 Subject: [PATCH 096/371] feat(nginx): Generate configs using a template Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2547> --- changes/changelog.d/nginxtemplates.feature | 1 + deploy/docker.proxy.template | 39 +++- deploy/nginx.template | 38 ++-- docker/nginx/conf.dev | 52 ++--- front/docker/funkwhale.conf.template | 26 ++- scripts/compile-templates.py | 38 ++++ templates/nginx.conf.j2 | 231 +++++++++++++++++++++ 7 files changed, 362 insertions(+), 63 deletions(-) create mode 100644 changes/changelog.d/nginxtemplates.feature create mode 100644 scripts/compile-templates.py create mode 100644 templates/nginx.conf.j2 diff --git a/changes/changelog.d/nginxtemplates.feature b/changes/changelog.d/nginxtemplates.feature new file mode 100644 index 000000000..69755d4ed --- /dev/null +++ b/changes/changelog.d/nginxtemplates.feature @@ -0,0 +1 @@ +Generate all nginx configurations from one template diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index a4b297f20..e208c5ef2 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -1,7 +1,8 @@ upstream fw { - # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } + +# Required for websocket support. map $http_upgrade $connection_upgrade { default upgrade; '' close; @@ -10,15 +11,31 @@ map $http_upgrade $connection_upgrade { server { listen 80; listen [::]:80; + # update this to match your instance name server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } + + # useful for Let's Encrypt + location /.well-known/acme-challenge/ { + allow all; + } + + location / { + return 301 https://$host$request_uri; + } } + server { listen 443 ssl http2; listen [::]:443 ssl http2; + server_name ${FUNKWHALE_HOSTNAME}; # TLS + # Feel free to use your own configuration for SSL here or simply remove the + # lines and move the configuration to the previous server block if you + # don't want to run funkwhale behind https (this is not recommended) + # have a look here for let's encrypt configuration: + # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx ssl_protocols TLSv1.2; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; @@ -29,12 +46,10 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; - # Security related headers - # If you are using S3 to host your files, remember to add your S3 URL to the - # media-src and img-src headers (e.g. img-src 'self' https://<your-S3-URL> data:) - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + # General configs + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -42,7 +57,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -61,10 +75,13 @@ server { text/vtt text/x-component text/x-cross-domain-policy; + # end of compression settings + + location / { - include /etc/nginx/funkwhale_proxy.conf; - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://fw; + expires 1d; + proxy_pass http://fw } + } diff --git a/deploy/nginx.template b/deploy/nginx.template index 5ba2ccfa1..d8ba11962 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -1,10 +1,15 @@ -# This file was generated from Funkwhale's nginx.template upstream funkwhale-api { # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + server { listen 80; listen [::]:80; @@ -21,16 +26,10 @@ server { } } -# Required for websocket support. -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - server { listen 443 ssl http2; listen [::]:443 ssl http2; - charset utf-8; + server_name ${FUNKWHALE_HOSTNAME}; # TLS @@ -49,12 +48,11 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; - root ${FUNKWHALE_FRONTEND_PATH}; + # General configs + root ${FUNKWHALE_FRONTEND_PATH}, + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -62,7 +60,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -83,6 +80,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -91,16 +94,16 @@ server { } location / { - alias ${FUNKWHALE_FRONTEND_PATH}/; expires 1d; + alias ${FUNKWHALE_FRONTEND_PATH}/, try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html, add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; expires 1d; } @@ -158,7 +161,7 @@ server { # has been checked on API side. # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. internal; - alias ${MUSIC_DIRECTORY_SERVE_PATH}/; + alias ${MUSIC_DIRECTORY_PATH}/; add_header Access-Control-Allow-Origin '*'; } @@ -166,4 +169,5 @@ server { # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + } diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index e4717bc2f..aecf2688d 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -1,6 +1,9 @@ + upstream funkwhale-api { + # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } + upstream funkwhale-front { server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; } @@ -11,17 +14,18 @@ map $http_upgrade $connection_upgrade { '' close; } + server { listen 80; listen [::]:80; - charset utf-8; - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - include /etc/nginx/funkwhale_proxy.conf; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; + server_name _; + + + # General configs + root /usr/share/nginx/html; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -29,7 +33,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -50,6 +53,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -58,15 +67,15 @@ server { } location / { - proxy_pass http://funkwhale-front; expires 1d; + proxy_pass http://funkwhale-front; } location = /embed.html { + proxy_pass http://funkwhale-front; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - proxy_pass http://funkwhale-front; expires 1d; } @@ -81,14 +90,6 @@ server { proxy_pass http://funkwhale-api/api/subsonic/rest/; } - location /media/__sized__/ { - alias /protected/media/__sized__/; - } - - location /media/attachments/ { - alias /protected/media/attachments/; - } - location /.well-known/ { include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://funkwhale-api; @@ -96,13 +97,13 @@ server { # Allow direct access to only specific subdirectories in /media location /media/__sized__/ { - alias /protected/media/__sized__/; + alias ${MEDIA_ROOT}/__sized__/; add_header Access-Control-Allow-Origin '*'; } # Allow direct access to only specific subdirectories in /media location /media/attachments/ { - alias /protected/media/attachments/; + alias ${MEDIA_ROOT}/attachments/; add_header Access-Control-Allow-Origin '*'; } @@ -119,10 +120,10 @@ server { # if you're storing media files in a S3 bucket. location ~ /_protected/media/(.+) { internal; - alias /protected/media/$1; # NON-S3 + alias ${MEDIA_ROOT}/$1; # NON-S3 # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. -# proxy_set_header Authorization ""; # S3 -# proxy_pass $1; # S3 +# proxy_set_header Authorization ""; # S3 +# proxy_pass $1; # S3 add_header Access-Control-Allow-Origin '*'; } @@ -132,7 +133,7 @@ server { # has been checked on API side. # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. internal; - alias /music/; + alias ${MUSIC_DIRECTORY_PATH}/; add_header Access-Control-Allow-Origin '*'; } @@ -142,7 +143,6 @@ server { } location /staticfiles/ { - alias /staticfiles/; + alias /usr/share/nginx/html/staticfiles/; } - } diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index af2fac74d..abbf636d5 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -1,5 +1,7 @@ + upstream funkwhale-api { - server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } # Required for websocket support. @@ -8,18 +10,18 @@ map $http_upgrade $connection_upgrade { '' close; } + server { listen 80; listen [::]:80; - charset utf-8; + server_name _; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; + # General configs root /usr/share/nginx/html; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -27,7 +29,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -48,6 +49,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -56,16 +63,16 @@ server { } location / { - alias /usr/share/nginx/html/; expires 1d; + alias /usr/share/nginx/html/; try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { + alias /usr/share/nginx/html/embed.html; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - alias /usr/share/nginx/html/embed.html; expires 1d; } @@ -131,4 +138,5 @@ server { # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + } diff --git a/scripts/compile-templates.py b/scripts/compile-templates.py new file mode 100644 index 000000000..596e7bb70 --- /dev/null +++ b/scripts/compile-templates.py @@ -0,0 +1,38 @@ +from jinja2 import Environment, FileSystemLoader + +file_loader = FileSystemLoader("templates") +env = Environment( + loader=file_loader, trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=True +) + +files = [ + { + "output": "docker/nginx/conf.dev", + "config": {"proxy_frontend": True, "inside_docker": True}, + }, + { + "output": "front/docker/funkwhale.conf.template", + "config": {"proxy_frontend": False, "inside_docker": True}, + }, + { + "output": "deploy/nginx.template", + "config": {"proxy_frontend": False, "inside_docker": False}, + }, + { + "output": "deploy/docker.proxy.template", + "config": { + "proxy_frontend": False, + "inside_docker": False, + "reverse_proxy": True, + }, + }, +] + +template = env.get_template("nginx.conf.j2") +for f in files: + print(f["output"]) + output = template.render(config=f["config"]) + + output_file = open(f["output"], "w") + output_file.write(output) + output_file.close() diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 new file mode 100644 index 000000000..8b88ced42 --- /dev/null +++ b/templates/nginx.conf.j2 @@ -0,0 +1,231 @@ +{% if config.reverse_proxy %} +upstream fw { + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +{% else %} + +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +{% endif %} +{% if config.proxy_frontend %} + +upstream funkwhale-front { + server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; +} +{% endif %} + +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +{% if not config.inside_docker %} +server { + listen 80; + listen [::]:80; + # update this to match your instance name + server_name ${FUNKWHALE_HOSTNAME}; + + # useful for Let's Encrypt + location /.well-known/acme-challenge/ { + allow all; + } + + location / { + return 301 https://$host$request_uri; + } +} +{% endif %} + +server { +{% if not config.inside_docker %} + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + # Feel free to use your own configuration for SSL here or simply remove the + # lines and move the configuration to the previous server block if you + # don't want to run funkwhale behind https (this is not recommended) + # have a look here for let's encrypt configuration: + # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + +{% else %} + listen 80; + listen [::]:80; + + server_name _; + +{% endif %} + + # General configs +{% if not config.reverse_proxy %} +{% if config.inside_docker %} + root /usr/share/nginx/html; +{% else %} + root ${FUNKWHALE_FRONTEND_PATH}, +{% endif %} +{% endif %} + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; + + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings + +{% if not config.reverse_proxy %} + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; +{% endif %} + +{% if not config.reverse_proxy %} + location /api/ { + include /etc/nginx/funkwhale_proxy.conf; + # This is needed if you have file import via upload enabled. + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api; + } +{% endif %} + + location / { + expires 1d; +{% if config.proxy_frontend and not config.reverse_proxy %} + proxy_pass http://funkwhale-front; +{% elif not config.proxy_frontend and config.reverse_proxy %} + proxy_pass http://fw +{% else %} +{% if config.inside_docker %} + alias /usr/share/nginx/html/; +{% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/, +{% endif %} + try_files $uri $uri/ /index.html; +{% endif %} + } + +{% if not config.reverse_proxy %} +{% if config.proxy_frontend %} + location = /embed.html { + proxy_pass http://funkwhale-front; +{% else %} + location ~ "/(front/)?embed.html" { +{% if config.inside_docker %} + alias /usr/share/nginx/html/embed.html; +{% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html, +{% endif %} +{% endif %} + add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + expires 1d; + } + + location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + # You can comment this if you do not plan to use the Subsonic API. + location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; + } + + location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + # Allow direct access to only specific subdirectories in /media + location /media/__sized__/ { + alias ${MEDIA_ROOT}/__sized__/; + add_header Access-Control-Allow-Origin '*'; + } + + # Allow direct access to only specific subdirectories in /media + location /media/attachments/ { + alias ${MEDIA_ROOT}/attachments/; + add_header Access-Control-Allow-Origin '*'; + } + + # Allow direct access to only specific subdirectories in /media + location /media/dynamic_preferences/ { + alias ${MEDIA_ROOT}/dynamic_preferences/; + add_header Access-Control-Allow-Origin '*'; + } + + # This is an internal location that is used to serve + # media (uploaded) files once correct permission / authentication + # has been checked on API side. + # Comment the "NON-S3" commented lines and uncomment "S3" commented lines + # if you're storing media files in a S3 bucket. + location ~ /_protected/media/(.+) { + internal; + alias ${MEDIA_ROOT}/$1; # NON-S3 + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. +# proxy_set_header Authorization ""; # S3 +# proxy_pass $1; # S3 + add_header Access-Control-Allow-Origin '*'; + } + + location /_protected/music/ { + # This is an internal location that is used to serve + # local music files once correct permission / authentication + # has been checked on API side. + # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. + internal; + alias ${MUSIC_DIRECTORY_PATH}/; + add_header Access-Control-Allow-Origin '*'; + } + + location /manifest.json { + # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL + return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; + } + +{% if config.proxy_frontend %} + location /staticfiles/ { + alias /usr/share/nginx/html/staticfiles/; + } +{% endif %} +{% endif %} +} From 4cfa3a4f710505de0a4ac87ac8d2eb3624fac9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Thu, 23 Nov 2023 08:43:16 +0000 Subject: [PATCH 097/371] Fix semicolons Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2547> --- deploy/docker.proxy.template | 2 +- deploy/nginx.template | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index e208c5ef2..4e232786c 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -81,7 +81,7 @@ server { location / { expires 1d; - proxy_pass http://fw + proxy_pass http://fw; } } diff --git a/deploy/nginx.template b/deploy/nginx.template index d8ba11962..61cf88ceb 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -50,7 +50,7 @@ server { # General configs - root ${FUNKWHALE_FRONTEND_PATH}, + root ${FUNKWHALE_FRONTEND_PATH}; client_max_body_size ${NGINX_MAX_BODY_SIZE}; charset utf-8; @@ -95,12 +95,12 @@ server { location / { expires 1d; - alias ${FUNKWHALE_FRONTEND_PATH}/, + alias ${FUNKWHALE_FRONTEND_PATH}/; try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html, + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; From dd4d19176730d0e97a0e696db7a30cbafaca4b25 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 23 Nov 2023 10:06:43 +0000 Subject: [PATCH 098/371] chore(front): lock file maintenance Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2640> --- front/yarn.lock | 357 +++++++++++++++++++++++++----------------------- 1 file changed, 183 insertions(+), 174 deletions(-) diff --git a/front/yarn.lock b/front/yarn.lock index eb3c1a885..0fbca9276 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -34,12 +34,12 @@ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" + integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": @@ -68,12 +68,12 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" - integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== +"@babel/generator@^7.23.3", "@babel/generator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" + integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== dependencies: - "@babel/types" "^7.23.3" + "@babel/types" "^7.23.4" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -234,10 +234,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -259,27 +259,27 @@ "@babel/types" "^7.22.19" "@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" + integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.4" + "@babel/types" "^7.23.4" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" - integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== +"@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" + integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" @@ -445,9 +445,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-async-generator-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz#9df2627bad7f434ed13eef3e61b2b65cafd4885b" - integrity sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -471,9 +471,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-block-scoping@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz#e99a3ff08f58edd28a8ed82481df76925a4ffca7" - integrity sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -486,9 +486,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-class-static-block@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz#56f2371c7e5bf6ff964d84c5dc4d4db5536b5159" - integrity sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" @@ -540,9 +540,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-dynamic-import@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz#82625924da9ed5fb11a428efb02e43bc9a3ab13e" - integrity sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" @@ -556,9 +556,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-export-namespace-from@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz#dcd066d995f6ac6077e5a4ccb68322a01e23ac49" - integrity sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" @@ -580,9 +580,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-json-strings@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz#489724ab7d3918a4329afb4172b2fd2cf3c8d245" - integrity sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -595,9 +595,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-logical-assignment-operators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz#3a406d6083feb9487083bca6d2334a3c9b6c4808" - integrity sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -660,25 +660,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz#8a613d514b521b640344ed7c56afeff52f9413f8" - integrity sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-transform-numeric-separator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz#2f8da42b75ba89e5cfcd677afd0856d52c0c2e68" - integrity sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-transform-object-rest-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz#509373753b5f7202fe1940e92fd075bd7874955f" - integrity sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" @@ -695,17 +695,17 @@ "@babel/helper-replace-supers" "^7.22.20" "@babel/plugin-transform-optional-catch-binding@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz#362c0b545ee9e5b0fa9d9e6fe77acf9d4c480027" - integrity sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-transform-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz#92fc83f54aa3adc34288933fa27e54c13113f4be" - integrity sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -727,9 +727,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-private-property-in-object@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz#5cd34a2ce6f2d008cc8f91d8dcc29e2c41466da6" - integrity sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-create-class-features-plugin" "^7.22.15" @@ -925,10 +925,10 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.4", "@babel/runtime@^7.8.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" + integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== dependencies: regenerator-runtime "^0.14.0" @@ -941,28 +941,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" - integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== +"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" + integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" + "@babel/code-frame" "^7.23.4" + "@babel/generator" "^7.23.4" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/parser" "^7.23.4" + "@babel/types" "^7.23.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.4.4": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" - integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.4.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" + integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -1305,12 +1305,12 @@ "@intlify/vue-devtools" "9.3.0-beta.19" "@intlify/core-base@^9.1.9": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.7.0.tgz#329f4225365187d9fbe7a3b5c5d8e897fa703b30" - integrity sha512-1tBnfnCI23jXqGW15cagCjn2GgD487VST1dMG8P5LRzrSfx+kUzqFyTrjMNIwgq1tVaF4HnDpFMUuyrzTLKphw== + version "9.7.1" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.7.1.tgz#d31315a8e9cf027678b65a4155287143ab91b8fd" + integrity sha512-jPJTeECEhqQ7g//8g3Fb79j5SzSSRqlFCWD6pcX94uMLXU+L1m07gVZnnvzoJBnaMyJHiiwxOqZVfvu6rQfLvw== dependencies: - "@intlify/message-compiler" "9.7.0" - "@intlify/shared" "9.7.0" + "@intlify/message-compiler" "9.7.1" + "@intlify/shared" "9.7.1" "@intlify/devtools-if@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1348,12 +1348,12 @@ "@intlify/shared" "9.3.0-beta.19" source-map "0.6.1" -"@intlify/message-compiler@9.7.0", "@intlify/message-compiler@^9.1.9": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.7.0.tgz#6371127c5a2a4f50ec59728f85a7786e3478c931" - integrity sha512-/YdZCio2L2tCM5bZ2eMHbSEIQNPh1QqvZIOLI/yCVKXLscis7O0SsR2nmuU/DfCJ3iSeI8juw82C2wLvfsAeww== +"@intlify/message-compiler@9.7.1", "@intlify/message-compiler@^9.1.9": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.7.1.tgz#2cd5f26c6b9f19afffd62e69d192cc4e9e51ba9a" + integrity sha512-HfIr2Hn/K7b0Zv4kGqkxAxwtipyxAwhI9a3krN5cuhH/G9gkaik7of1PdzjR3Mix43t2onBiKYQyaU7mo7e0aA== dependencies: - "@intlify/shared" "9.7.0" + "@intlify/shared" "9.7.1" source-map-js "^1.0.2" "@intlify/message-compiler@next": @@ -1374,10 +1374,10 @@ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz#bd0d221aaac476b6778a10ddcd0472f812c64e27" integrity sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng== -"@intlify/shared@9.7.0": - version "9.7.0" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.7.0.tgz#96166a54b781997db92259772e9621d3f7dff9a5" - integrity sha512-PUkEuk//YKu4CHS5ah3mNa3XL/+TZj6rAY/6yYN+GCNFd2u+uWUkeuwE4Q6t8dydRWlErOePHHS0KyNoof/oBw== +"@intlify/shared@9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.7.1.tgz#a4902421aacda2d716981eb9528aef0163c7bb0a" + integrity sha512-CBKnHzlUYGrk5QII9q4nElAQKO5cX1rRx8VmSWXltyOZjbkGHXYQTHULn6KwRi+CypuBCfmPkyPBHMzosypIeg== "@intlify/unplugin-vue-i18n@0.8.2": version "0.8.2" @@ -1676,9 +1676,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.4": - version "4.3.10" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.10.tgz#2ad2959d1767edee5b0e4efb1a0cd2b500747317" - integrity sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg== + version "4.3.11" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" + integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== "@types/cookie@^0.3.3": version "0.3.3" @@ -1721,9 +1721,9 @@ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/jquery@*": - version "3.5.27" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.27.tgz#d9d67a003d0292a36fe35868a618c82f8fd12b19" - integrity sha512-TR28Y8ezIGgfyA02UOh9x+Fy16/1qWYAnvtRd2gTBJuccX/vmddyti0MezLkTv7f+OLofVc2T961VPyKv1tXJQ== + version "3.5.29" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" + integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== dependencies: "@types/sizzle" "*" @@ -1752,9 +1752,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.201" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" - integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== "@types/minimatch@*": version "5.1.2" @@ -1769,9 +1769,9 @@ axios ">=0.13.0" "@types/node@*": - version "20.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" - integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== + version "20.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.4.tgz#cc8f970e869c26834bdb7ed480b30ede622d74c7" + integrity sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA== dependencies: undici-types "~5.26.4" @@ -1817,9 +1817,9 @@ "@types/jquery" "*" "@types/semantic-ui-checkbox@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.5.tgz#82a834e34fe32ad7c58b349a9761e3f8a517c321" - integrity sha512-dCz6WtksYMUBQqBRRw56kW0FJhbhmFtJei9lbFJ7dnftyVa5xL3Zu7fzbCOyAn2AlsG+xinmgjTj1AGEdEiIGA== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.6.tgz#b971561563a4bc264b039a0b4e7b5358a006986a" + integrity sha512-N6lHQfr3wsSXATiKW0dx6sQkd8i7BZDkehbMva9wo6XxBPBN13PoeUKzwBjrFNXjVjy8sMTbXgsWvM30cAf+Dg== dependencies: "@types/jquery" "*" @@ -1831,9 +1831,9 @@ "@types/jquery" "*" "@types/semantic-ui-dropdown@*": - version "2.2.8" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.8.tgz#4e18b9481573550142c03acb4b7f9a6505b77097" - integrity sha512-2SAkB777xo0VDv0cBoEOxVoPbkbTnhpOSeP6sWl+wzR7B8xt+EJqaVwbCZakdsgmjq4t7c36rpny3TZQBDKacA== + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.9.tgz#146b97d8bf690ddc0633ab67ad12e17e1952bc04" + integrity sha512-xexijVzkwUNPNfuTLuQETcKqGwKjJFb9ymvpVu/UFy+PNHJRz08rV3SZFdb73Gh+pEJC+8aN9op5ZWiHrB/6NA== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" @@ -1853,9 +1853,9 @@ "@types/jquery" "*" "@types/semantic-ui-modal@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.6.tgz#dc4f2e7cd856e9ee981ee4479e00e9501aa61286" - integrity sha512-LtiE2PUIKFI3X1isKL15RbhTT61hKgt5MPsuxrg0UhOlEymK4/C4DJXvNLKDtMy7BG3XdhtZxdNhYCE5Z8dLvg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.7.tgz#12a7a502876109daa0a2638d9f2923a16da30772" + integrity sha512-vkazvqzPrutKH1jFt+xtpEmcdkLTZojb0RmW/zpS4MsLl7lgvFywfAjewdQgsFW5AEOku4KwrWoBTl7brh35/g== dependencies: "@types/jquery" "*" "@types/semantic-ui-dimmer" "*" @@ -1868,9 +1868,9 @@ "@types/jquery" "*" "@types/semantic-ui-popup@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.6.tgz#3161db5acf0fc18fcb9c81048e589bf6f38a459f" - integrity sha512-g7SlW4fSo2gUBZb3a4tQt8ZMUdvKKqwMTD6mxLdVAS3VxIU/qVq8aTNEtYvOrtiia6BulmqcgLDlw2s/XJKExQ== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.7.tgz#3b28849e09b815283f0fd765dc6480a31f4c3857" + integrity sha512-QeiyPFa5bHYHBGIVI4dDombm/dgLL2uJSBru8tq6DXasohxlBeZxUe08a9viAOWCyi91+FGi3KR6elPbd0u2Ag== dependencies: "@types/jquery" "*" @@ -1889,9 +1889,9 @@ "@types/jquery" "*" "@types/semantic-ui-search@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.6.tgz#ed2da8c0f85837f4dd15626824d2526f9745e9b9" - integrity sha512-IrvOhx4a5bSY8+5/Z7z/gDiAYRk1VHl8FUS2rdpU6gBJXzM0vrQ/5pMs7OOo8p71MLNHy83TGu2/N4Hy+QFtxg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.7.tgz#87388e5e6a33845f6983a9f4315449bd1be3eafa" + integrity sha512-Qay8/dFM5Z+7TM1nZzDnpkv1ZvxtY+vpdrqG5kjnX3XtZ69jm9y44kHDUr+reDEZAMrOCR7gxWuDuhxwRDuA0g== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" @@ -1974,9 +1974,9 @@ "@types/semantic-ui-visibility" "*" "@types/semver@^7.3.12": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" - integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== "@types/showdown@2.0.0": version "2.0.0" @@ -1989,14 +1989,14 @@ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@*", "@types/sizzle@^2.3.2": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.6.tgz#e39b7123dac4631001939bd4c2a26d46010f2275" - integrity sha512-m04Om5Gz6kbjUwAQ7XJJQ30OdEFsSmAVsvn4NYwcTRyMVpKKa1aPuESw1n2CxS5fYkOQv3nHgDKeNa8e76fUkw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== "@types/trusted-types@*", "@types/trusted-types@^2.0.2": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.6.tgz#d12451beaeb9c3838f12024580dc500b7e88b0ad" - integrity sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/vue-virtual-scroller@npm:@earltp/vue-virtual-scroller": version "1.0.1" @@ -2809,7 +2809,7 @@ acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.1.0, acorn@^8.10.0, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.1.0, acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -3043,12 +3043,12 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -automation-events@^6.0.1, automation-events@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.11.tgz#c90be5a58faf6633e1556a7acab0f23af0124551" - integrity sha512-tUqFMJalQ3OAcbQOXzzNDpxzkuygMQ3eM92lJWJRn6YWJnH4oYIU3pzKipANOul/6L2vDFrOzgXVE21Dv4z/zw== +automation-events@^6.0.1, automation-events@^6.0.11, automation-events@^6.0.12: + version "6.0.12" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.12.tgz#1f369af5f5c1c4b0cae24abdf1535cbc56a37ad4" + integrity sha512-XSuK8udXMrHn24PvCuBNGWP6vXgSkCscCl9RokPmKhN/VQUdzuG2inZ03+UU86R1r6p6OCO30yWSPioBPxCXiQ== dependencies: - "@babel/runtime" "^7.23.2" + "@babel/runtime" "^7.23.4" tslib "^2.6.2" available-typed-arrays@^1.0.5: @@ -3275,9 +3275,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001541: - version "1.0.30001562" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz#9d16c5fd7e9c592c4cd5e304bc0f75b0008b2759" - integrity sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng== + version "1.0.30001564" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz#eaa8bbc58c0cbccdcb7b41186df39dd2ba591889" + integrity sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg== caseless@~0.12.0: version "0.12.0" @@ -3475,9 +3475,9 @@ cookie@^0.4.0: integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== + version "3.33.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" + integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== dependencies: browserslist "^4.22.1" @@ -3787,9 +3787,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.535: - version "1.4.585" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.585.tgz#7b3cb6846bb5cc10a8d5904c351a9b8aaa76ea90" - integrity sha512-B4yBlX0azdA3rVMxpYwLQfDpdwOgcnLCkpvSOd68iFmeedo+WYjaBJS3/W58LVD8CB2nf+o7C4K9xz1l09RkWg== + version "1.4.592" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.592.tgz#1ffd49ba3da3da3077ea20014b066c910d50c913" + integrity sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww== emoji-regex@^8.0.0: version "8.0.0" @@ -4839,9 +4839,9 @@ ieee754@^1.1.13: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== immutable@^4.0.0: version "4.3.4" @@ -6427,7 +6427,7 @@ standardized-audio-context-mock@9.6.18: tslib "^2.5.0" vehicles "^9.0.1" -standardized-audio-context@25.3.58, standardized-audio-context@^25.3.46: +standardized-audio-context@25.3.58: version "25.3.58" resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.58.tgz#6c5c61cfe25eb4b9f3a9f8cf43dc4991e7eb362d" integrity sha512-1p5wVGiy4MfmhEt9MRY8yjZdkX+fi5jMxG1lqnAS1YmLUpE9VrOowxSINQ9Gjs89dFZMaENVwcMSPeQCjlz90Q== @@ -6436,6 +6436,15 @@ standardized-audio-context@25.3.58, standardized-audio-context@^25.3.46: automation-events "^6.0.11" tslib "^2.6.2" +standardized-audio-context@^25.3.46: + version "25.3.59" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.59.tgz#61ad6000277f08eb50f4a49c053d498eff6c7a7c" + integrity sha512-iyzP4sgW2oBSHE7QSMG+I5txft0s9Icw9ClNo2LkNzWbtUYgsEPNJsQ2XZffm3tP3chUpHXJ2br1gY8u7rPkeg== + dependencies: + "@babel/runtime" "^7.23.4" + automation-events "^6.0.12" + tslib "^2.6.2" + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -6611,9 +6620,9 @@ text-table@^0.2.0: integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through@^2.3.8: version "2.3.8" @@ -6796,9 +6805,9 @@ typed-array-length@^1.0.4: is-typed-array "^1.1.9" "typescript@4 - 5": - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + version "5.3.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" + integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== typescript@4.9.5: version "4.9.5" @@ -6921,14 +6930,14 @@ unplugin-vue-macros@2.4.6: unplugin-vue-define-options "1.3.15" unplugin@^1.0.0, unplugin@^1.3.2, unplugin@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" - integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== + version "1.5.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.1.tgz#806688376fa3dcca4d2fa2c5d27cf6cd0370fbef" + integrity sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew== dependencies: - acorn "^8.10.0" + acorn "^8.11.2" chokidar "^3.5.3" webpack-sources "^3.2.3" - webpack-virtual-modules "^0.5.0" + webpack-virtual-modules "^0.6.0" untildify@^4.0.0: version "4.0.0" @@ -6979,20 +6988,20 @@ uuid@^8.3.2: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-to-istanbul@^9.0.0: - version "9.1.3" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" - integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" vehicles@^9.0.1: - version "9.0.12" - resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.12.tgz#15882d4ecc060b0d9e739b6e47228c357009b0bf" - integrity sha512-OYOqeFXkC7lSdwWW2iAa7NqRTv1WwqTK7+Y1IpDF1rUUgP3qXsSYhLgcq7pMHvSz3ERXFqODf0ue1DxuVbYn0Q== + version "9.0.13" + resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.13.tgz#cd789d161be15d96f77953d942d5639776eeb733" + integrity sha512-zUnhrF5//DVAcybP5oj1xEyQi09VC3LHs2H12kUcokI7pKYc8ZVl818Ig2JYFowpQUY/NClY/5tdooqMPbQUGw== dependencies: - "@babel/runtime" "^7.23.2" + "@babel/runtime" "^7.23.4" decimal.js "^10.4.3" tslib "^2.6.2" @@ -7239,10 +7248,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" - integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== whatwg-encoding@^2.0.0: version "2.0.0" From e3a28aaeb3cb8cd0f8e8c35925ebb8c0fcbe2bf0 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 16 Nov 2023 08:47:46 +0000 Subject: [PATCH 099/371] chore(api): Remove obsolete file Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2604> --- api/config/api_urls.py | 97 ------------------------------------------ 1 file changed, 97 deletions(-) delete mode 100644 api/config/api_urls.py diff --git a/api/config/api_urls.py b/api/config/api_urls.py deleted file mode 100644 index 6fa17b3c6..000000000 --- a/api/config/api_urls.py +++ /dev/null @@ -1,97 +0,0 @@ -from django.conf.urls import include, url -from rest_framework import routers -from rest_framework.urlpatterns import format_suffix_patterns - -from funkwhale_api.activity import views as activity_views -from funkwhale_api.audio import views as audio_views -from funkwhale_api.common import routers as common_routers -from funkwhale_api.common import views as common_views -from funkwhale_api.music import views -from funkwhale_api.playlists import views as playlists_views -from funkwhale_api.subsonic.views import SubsonicViewSet -from funkwhale_api.tags import views as tags_views - -router = common_routers.OptionalSlashRouter() -router.register(r"activity", activity_views.ActivityViewSet, "activity") -router.register(r"tags", tags_views.TagViewSet, "tags") -router.register(r"plugins", common_views.PluginViewSet, "plugins") -router.register(r"tracks", views.TrackViewSet, "tracks") -router.register(r"uploads", views.UploadViewSet, "uploads") -router.register(r"libraries", views.LibraryViewSet, "libraries") -router.register(r"listen", views.ListenViewSet, "listen") -router.register(r"stream", views.StreamViewSet, "stream") -router.register(r"artists", views.ArtistViewSet, "artists") -router.register(r"channels", audio_views.ChannelViewSet, "channels") -router.register(r"subscriptions", audio_views.SubscriptionsViewSet, "subscriptions") -router.register(r"albums", views.AlbumViewSet, "albums") -router.register(r"licenses", views.LicenseViewSet, "licenses") -router.register(r"playlists", playlists_views.PlaylistViewSet, "playlists") -router.register(r"mutations", common_views.MutationViewSet, "mutations") -router.register(r"attachments", common_views.AttachmentViewSet, "attachments") -v1_patterns = router.urls - -subsonic_router = routers.SimpleRouter(trailing_slash=False) -subsonic_router.register(r"subsonic/rest", SubsonicViewSet, basename="subsonic") - - -v1_patterns += [ - url(r"^oembed/$", views.OembedView.as_view(), name="oembed"), - url( - r"^instance/", - include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), - ), - url( - r"^manage/", - include(("funkwhale_api.manage.urls", "manage"), namespace="manage"), - ), - url( - r"^moderation/", - include( - ("funkwhale_api.moderation.urls", "moderation"), namespace="moderation" - ), - ), - url( - r"^federation/", - include( - ("funkwhale_api.federation.api_urls", "federation"), namespace="federation" - ), - ), - url( - r"^providers/", - include(("funkwhale_api.providers.urls", "providers"), namespace="providers"), - ), - url( - r"^favorites/", - include(("funkwhale_api.favorites.urls", "favorites"), namespace="favorites"), - ), - url(r"^search$", views.Search.as_view(), name="search"), - url( - r"^radios/", - include(("funkwhale_api.radios.urls", "radios"), namespace="radios"), - ), - url( - r"^history/", - include(("funkwhale_api.history.urls", "history"), namespace="history"), - ), - url( - r"^", - include(("funkwhale_api.users.api_urls", "users"), namespace="users"), - ), - # XXX: remove if Funkwhale 1.1 - url( - r"^users/", - include(("funkwhale_api.users.api_urls", "users"), namespace="users-nested"), - ), - url( - r"^oauth/", - include(("funkwhale_api.users.oauth.urls", "oauth"), namespace="oauth"), - ), - url(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), - url( - r"^text-preview/?$", common_views.TextPreviewView.as_view(), name="text-preview" - ), -] - -urlpatterns = [ - url(r"^v1/", include((v1_patterns, "v1"), namespace="v1")) -] + format_suffix_patterns(subsonic_router.urls, allowed=["view"]) From a05b44f27b0200a5ef4b88d9a5827d2497cc3530 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 16 Nov 2023 08:52:52 +0000 Subject: [PATCH 100/371] feat(api): Add atom1.0 to node info services Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2604> --- api/funkwhale_api/instance/views.py | 1 + api/tests/instance/test_nodeinfo.py | 2 +- changes/changelog.d/atom10.feature | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/atom10.feature diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index ffde3db4a..f82e1f888 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -81,6 +81,7 @@ class NodeInfo(views.APIView): data = { "software": {"version": funkwhale_version}, + "services": {"inbound": ["atom1.0"], "outbound": ["atom1.0"]}, "preferences": pref, "stats": cache_memoize(600, prefix="memoize:instance:stats")(stats.get)() if pref["instance__nodeinfo_stats_enabled"] diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index bd5b2e6cd..a58e5cc80 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -14,7 +14,7 @@ def test_nodeinfo_default(api_client): "version": "2.0", "software": OrderedDict([("name", "funkwhale"), ("version", api_version)]), "protocols": ["activitypub"], - "services": OrderedDict([("inbound", []), ("outbound", [])]), + "services": OrderedDict([("inbound", ["atom1.0"]), ("outbound", ["atom1.0"])]), "openRegistrations": False, "usage": { "users": OrderedDict( diff --git a/changes/changelog.d/atom10.feature b/changes/changelog.d/atom10.feature new file mode 100644 index 000000000..2a8376cdc --- /dev/null +++ b/changes/changelog.d/atom10.feature @@ -0,0 +1 @@ +Add atom1.0 to node info services (#2085) From 523245d035b20d144b0600541737371b65d25c9c Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 16 Nov 2023 08:55:48 +0000 Subject: [PATCH 101/371] fix(api): Use proper renderer for nodeinfo in browser Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2604> --- api/funkwhale_api/instance/views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index f82e1f888..0368bdd56 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -11,6 +11,7 @@ from dynamic_preferences.api import viewsets as preferences_viewsets from dynamic_preferences.api.serializers import GlobalPreferenceSerializer from dynamic_preferences.registries import global_preferences_registry from rest_framework import generics, views +from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from funkwhale_api import __version__ as funkwhale_version @@ -61,6 +62,8 @@ class InstanceSettings(generics.GenericAPIView): class NodeInfo(views.APIView): permission_classes = [] authentication_classes = [] + serializer_class = serializers.NodeInfo20Serializer + renderer_classes = (JSONRenderer,) @extend_schema( responses=serializers.NodeInfo20Serializer, operation_id="getNodeInfo20" @@ -113,7 +116,7 @@ class NodeInfo(views.APIView): data["endpoints"]["channels"] = reverse( "federation:index:index-channels" ) - serializer = serializers.NodeInfo20Serializer(data) + serializer = self.serializer_class(data) return Response( serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE ) From 1a0596b102e78938d6db81132965826eac26c7cd Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 16 Nov 2023 09:01:04 +0000 Subject: [PATCH 102/371] feat(settings): Allow moderators to set moderation languages Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2604> --- .../moderation/dynamic_preferences_registry.py | 16 ++++++++++++++++ api/poetry.lock | 15 ++++++++++++++- api/pyproject.toml | 1 + changes/changelog.d/moderation-languages.feature | 1 + front/src/views/admin/Settings.vue | 1 + 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/moderation-languages.feature diff --git a/api/funkwhale_api/moderation/dynamic_preferences_registry.py b/api/funkwhale_api/moderation/dynamic_preferences_registry.py index fbbcd6a61..bda9b5952 100644 --- a/api/funkwhale_api/moderation/dynamic_preferences_registry.py +++ b/api/funkwhale_api/moderation/dynamic_preferences_registry.py @@ -1,3 +1,4 @@ +import pycountry from dynamic_preferences import types from dynamic_preferences.registries import global_preferences_registry from rest_framework import serializers @@ -92,3 +93,18 @@ class SignupFormCustomization(common_preferences.SerializedPreference): required = False default = {} data_serializer_class = CustomFormSerializer + + +@global_preferences_registry.register +class Languages(common_preferences.StringListPreference): + show_in_api = True + section = moderation + name = "languages" + default = ["en"] + verbose_name = "Moderation languages" + help_text = ( + "The language(s) spoken by the server moderator(s). Set this to inform users " + "what languages they should write reports and requests in." + ) + choices = [(lang.alpha_3, lang.name) for lang in pycountry.languages] + field_kwargs = {"choices": choices, "required": False} diff --git a/api/poetry.lock b/api/poetry.lock index 27109801c..9c94730b7 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2725,6 +2725,19 @@ files = [ {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] +[[package]] +name = "pycountry" +version = "22.3.5" +description = "ISO country, subdivision, language, currency and script definitions and their translations" +optional = false +python-versions = ">=3.6, <4" +files = [ + {file = "pycountry-22.3.5.tar.gz", hash = "sha256:b2163a246c585894d808f18783e19137cb70a0c18fb36748dc01fc6f109c1646"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "pycparser" version = "2.21" @@ -4536,4 +4549,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "89defcf9df569a1d3e2cdb50b29fd9161288dc88daa8c3e0e574ace88d196db2" +content-hash = "5a259657d79f98ce6a7c377c5715aaf6f56d7ad4b9c420e784c81aa145c86b1d" diff --git a/api/pyproject.toml b/api/pyproject.toml index 3efe52293..4f9bde163 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -87,6 +87,7 @@ watchdog = "==2.2.1" troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", tag = "v-2023-10-30.0"} lb-matching-tools = { git = "https://github.com/metabrainz/listenbrainz-matching-tools.git", branch = "main"} unidecode = "==1.3.6" +pycountry = "22.3.5" # Typesense typesense = { version = "==0.15.1", optional = true } diff --git a/changes/changelog.d/moderation-languages.feature b/changes/changelog.d/moderation-languages.feature new file mode 100644 index 000000000..2adca49fe --- /dev/null +++ b/changes/changelog.d/moderation-languages.feature @@ -0,0 +1 @@ +Allow moderators to set moderation languages (#2085) diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 1ff48b2bc..1d36566d1 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -80,6 +80,7 @@ const groups = computed(() => [ label: t('views.admin.Settings.header.moderation'), id: 'moderation', settings: [ + { name: 'moderation__languages' }, { name: 'moderation__allow_list_enabled' }, { name: 'moderation__allow_list_public' }, { name: 'moderation__unauthenticated_report_types' } From 71140d5a9bae0823d71fde353ff83697b6962fb4 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 16 Nov 2023 09:02:59 +0000 Subject: [PATCH 103/371] feat(settings): Allow to set the instances server location Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2604> --- .../instance/dynamic_preferences_registry.py | 16 ++++++++++++++++ changes/changelog.d/server-location.feature | 1 + front/src/components/admin/SettingsGroup.vue | 14 ++++++++++++++ front/src/views/admin/Settings.vue | 1 + 4 files changed, 32 insertions(+) create mode 100644 changes/changelog.d/server-location.feature diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index d34fb814f..402fe7e16 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -1,3 +1,4 @@ +import pycountry from django.core.validators import FileExtensionValidator from django.forms import widgets from dynamic_preferences import types @@ -170,3 +171,18 @@ class Banner(ImagePreference): default = None help_text = "This banner will be displayed on your pod's landing and about page. At least 600x100px recommended." field_kwargs = {"required": False} + + +@global_preferences_registry.register +class Location(types.ChoicePreference): + show_in_api = True + section = instance + name = "location" + verbose_name = "Server Location" + default = "" + choices = [(country.alpha_2, country.name) for country in pycountry.countries] + help_text = ( + "The country or territory in which your server is located. This is displayed in the server's Nodeinfo " + "endpoint." + ) + field_kwargs = {"choices": choices, "required": False} diff --git a/changes/changelog.d/server-location.feature b/changes/changelog.d/server-location.feature new file mode 100644 index 000000000..f1c3a1922 --- /dev/null +++ b/changes/changelog.d/server-location.feature @@ -0,0 +1 @@ +Allow to set the instances server location (#2085) diff --git a/front/src/components/admin/SettingsGroup.vue b/front/src/components/admin/SettingsGroup.vue index ae05e1e48..a2bf872a6 100644 --- a/front/src/components/admin/SettingsGroup.vue +++ b/front/src/components/admin/SettingsGroup.vue @@ -217,6 +217,20 @@ const save = async () => { {{ v[1] }} </option> </select> + <select + v-else-if="setting.field.class === 'ChoiceField'" + :id="setting.identifier" + v-model="values[setting.identifier]" + class="ui search selection dropdown" + > + <option + v-for="v in setting.additional_data?.choices" + :key="v[0]" + :value="v[0]" + > + {{ v[1] }} + </option> + </select> <div v-else-if="setting.field.widget.class === 'ImageWidget'"> <input :id="setting.identifier" diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 1d36566d1..d85b0a976 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -24,6 +24,7 @@ const groups = computed(() => [ id: 'instance', settings: [ { name: 'instance__name' }, + { name: 'instance__location' }, { name: 'instance__short_description' }, { name: 'instance__long_description', fieldType: 'markdown', fieldParams: { charLimit: null, permissive: true } }, { name: 'instance__contact_email' }, From a0ae9bbb702f7626312ceea97f376631bd03065f Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 16 Nov 2023 09:10:05 +0000 Subject: [PATCH 104/371] feat(api): Add NodeInfo 2.1 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2604> --- api/config/urls/api_v2.py | 2 +- api/funkwhale_api/instance/serializers.py | 112 +++++++++++++++++----- api/funkwhale_api/instance/stats.py | 35 ++++++- api/funkwhale_api/instance/urls.py | 2 +- api/funkwhale_api/instance/urls_v2.py | 7 ++ api/funkwhale_api/instance/views.py | 57 ++++++++++- api/tests/instance/test_nodeinfo.py | 72 +++++++++++++- api/tests/test_urls.py | 4 +- changes/changelog.d/2085.feature | 1 + 9 files changed, 263 insertions(+), 29 deletions(-) create mode 100644 api/funkwhale_api/instance/urls_v2.py create mode 100644 changes/changelog.d/2085.feature diff --git a/api/config/urls/api_v2.py b/api/config/urls/api_v2.py index d5e040337..a5fda5c7c 100644 --- a/api/config/urls/api_v2.py +++ b/api/config/urls/api_v2.py @@ -8,7 +8,7 @@ v2_patterns = router.urls v2_patterns += [ url( r"^instance/", - include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), + include(("funkwhale_api.instance.urls_v2", "instance"), namespace="instance"), ), url( r"^radios/", diff --git a/api/funkwhale_api/instance/serializers.py b/api/funkwhale_api/instance/serializers.py index 15eeaed59..87dc1b139 100644 --- a/api/funkwhale_api/instance/serializers.py +++ b/api/funkwhale_api/instance/serializers.py @@ -12,6 +12,17 @@ class SoftwareSerializer(serializers.Serializer): return "funkwhale" +class SoftwareSerializer_v2(SoftwareSerializer): + repository = serializers.SerializerMethodField() + homepage = serializers.SerializerMethodField() + + def get_repository(self, obj): + return "https://dev.funkwhale.audio/funkwhale/funkwhale" + + def get_homepage(self, obj): + return "https://funkwhale.audio" + + class ServicesSerializer(serializers.Serializer): inbound = serializers.ListField(child=serializers.CharField(), default=[]) outbound = serializers.ListField(child=serializers.CharField(), default=[]) @@ -31,6 +42,8 @@ class UsersUsageSerializer(serializers.Serializer): class UsageSerializer(serializers.Serializer): users = UsersUsageSerializer() + localPosts = serializers.IntegerField(required=False) + localComments = serializers.IntegerField(required=False) class TotalCountSerializer(serializers.Serializer): @@ -92,19 +105,14 @@ class MetadataSerializer(serializers.Serializer): private = serializers.SerializerMethodField() shortDescription = serializers.SerializerMethodField() longDescription = serializers.SerializerMethodField() - rules = serializers.SerializerMethodField() contactEmail = serializers.SerializerMethodField() - terms = serializers.SerializerMethodField() nodeName = serializers.SerializerMethodField() banner = serializers.SerializerMethodField() defaultUploadQuota = serializers.SerializerMethodField() - library = serializers.SerializerMethodField() supportedUploadExtensions = serializers.ListField(child=serializers.CharField()) allowList = serializers.SerializerMethodField() - reportTypes = ReportTypeSerializer(source="report_types", many=True) funkwhaleSupportMessageEnabled = serializers.SerializerMethodField() instanceSupportMessage = serializers.SerializerMethodField() - endpoints = EndpointsSerializer() usage = MetadataUsageSerializer(source="stats", required=False) def get_private(self, obj) -> bool: @@ -116,15 +124,9 @@ class MetadataSerializer(serializers.Serializer): def get_longDescription(self, obj) -> str: return obj["preferences"].get("instance__long_description") - def get_rules(self, obj) -> str: - return obj["preferences"].get("instance__rules") - def get_contactEmail(self, obj) -> str: return obj["preferences"].get("instance__contact_email") - def get_terms(self, obj) -> str: - return obj["preferences"].get("instance__terms") - def get_nodeName(self, obj) -> str: return obj["preferences"].get("instance__name") @@ -137,15 +139,6 @@ class MetadataSerializer(serializers.Serializer): def get_defaultUploadQuota(self, obj) -> int: return obj["preferences"].get("users__upload_quota") - @extend_schema_field(NodeInfoLibrarySerializer) - def get_library(self, obj): - data = obj["stats"] or {} - data["federationEnabled"] = obj["preferences"].get("federation__enabled") - data["anonymousCanListen"] = not obj["preferences"].get( - "common__api_authentication_required" - ) - return NodeInfoLibrarySerializer(data).data - @extend_schema_field(AllowListStatSerializer) def get_allowList(self, obj): return AllowListStatSerializer( @@ -166,6 +159,54 @@ class MetadataSerializer(serializers.Serializer): return MetadataUsageSerializer(obj["stats"]).data +class Metadata20Serializer(MetadataSerializer): + library = serializers.SerializerMethodField() + reportTypes = ReportTypeSerializer(source="report_types", many=True) + endpoints = EndpointsSerializer() + rules = serializers.SerializerMethodField() + terms = serializers.SerializerMethodField() + + def get_rules(self, obj) -> str: + return obj["preferences"].get("instance__rules") + + def get_terms(self, obj) -> str: + return obj["preferences"].get("instance__terms") + + @extend_schema_field(NodeInfoLibrarySerializer) + def get_library(self, obj): + data = obj["stats"] or {} + data["federationEnabled"] = obj["preferences"].get("federation__enabled") + data["anonymousCanListen"] = not obj["preferences"].get( + "common__api_authentication_required" + ) + return NodeInfoLibrarySerializer(data).data + + +class MetadataContentLocalSerializer(serializers.Serializer): + artists = serializers.IntegerField() + releases = serializers.IntegerField() + recordings = serializers.IntegerField() + hoursOfContent = serializers.IntegerField() + + +class MetadataContentCategorySerializer(serializers.Serializer): + name = serializers.CharField() + count = serializers.IntegerField() + + +class MetadataContentSerializer(serializers.Serializer): + local = MetadataContentLocalSerializer() + topMusicCategories = MetadataContentCategorySerializer(many=True) + topPodcastCategories = MetadataContentCategorySerializer(many=True) + + +class Metadata21Serializer(MetadataSerializer): + languages = serializers.ListField(child=serializers.CharField()) + location = serializers.CharField() + content = MetadataContentSerializer() + features = serializers.ListField(child=serializers.CharField()) + + class NodeInfo20Serializer(serializers.Serializer): version = serializers.SerializerMethodField() software = SoftwareSerializer() @@ -196,9 +237,36 @@ class NodeInfo20Serializer(serializers.Serializer): usage = {"users": {"total": 0, "activeMonth": 0, "activeHalfyear": 0}} return UsageSerializer(usage).data - @extend_schema_field(MetadataSerializer) + @extend_schema_field(Metadata20Serializer) def get_metadata(self, obj): - return MetadataSerializer(obj).data + return Metadata20Serializer(obj).data + + +class NodeInfo21Serializer(NodeInfo20Serializer): + version = serializers.SerializerMethodField() + software = SoftwareSerializer_v2() + + def get_version(self, obj) -> str: + return "2.1" + + @extend_schema_field(UsageSerializer) + def get_usage(self, obj): + usage = None + if obj["preferences"]["instance__nodeinfo_stats_enabled"]: + usage = obj["stats"] + usage["localPosts"] = 0 + usage["localComments"] = 0 + else: + usage = { + "users": {"total": 0, "activeMonth": 0, "activeHalfyear": 0}, + "localPosts": 0, + "localComments": 0, + } + return UsageSerializer(usage).data + + @extend_schema_field(Metadata21Serializer) + def get_metadata(self, obj): + return Metadata21Serializer(obj).data class SpaManifestIconSerializer(serializers.Serializer): diff --git a/api/funkwhale_api/instance/stats.py b/api/funkwhale_api/instance/stats.py index 923a1dadb..9353eb53e 100644 --- a/api/funkwhale_api/instance/stats.py +++ b/api/funkwhale_api/instance/stats.py @@ -1,6 +1,6 @@ import datetime -from django.db.models import Sum +from django.db.models import Count, F, Sum from django.utils import timezone from funkwhale_api.favorites.models import TrackFavorite @@ -22,6 +22,39 @@ def get(): } +def get_content(): + return { + "local": { + "artists": get_artists(), + "releases": get_albums(), + "recordings": get_tracks(), + "hoursOfContent": get_music_duration(), + }, + "topMusicCategories": get_top_music_categories(), + "topPodcastCategories": get_top_podcast_categories(), + } + + +def get_top_music_categories(): + return ( + models.Track.objects.filter(artist__content_category="music") + .exclude(tagged_items__tag_id=None) + .values(name=F("tagged_items__tag__name")) + .annotate(count=Count("name")) + .order_by("-count")[:3] + ) + + +def get_top_podcast_categories(): + return ( + models.Track.objects.filter(artist__content_category="podcast") + .exclude(tagged_items__tag_id=None) + .values(name=F("tagged_items__tag__name")) + .annotate(count=Count("name")) + .order_by("-count")[:3] + ) + + def get_users(): qs = User.objects.filter(is_active=True) now = timezone.now() diff --git a/api/funkwhale_api/instance/urls.py b/api/funkwhale_api/instance/urls.py index 6047eca19..62baa5021 100644 --- a/api/funkwhale_api/instance/urls.py +++ b/api/funkwhale_api/instance/urls.py @@ -8,7 +8,7 @@ admin_router = routers.OptionalSlashRouter() admin_router.register(r"admin/settings", views.AdminSettings, "admin-settings") urlpatterns = [ - url(r"^nodeinfo/2.0/?$", views.NodeInfo.as_view(), name="nodeinfo-2.0"), + url(r"^nodeinfo/2.0/?$", views.NodeInfo20.as_view(), name="nodeinfo-2.0"), url(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), url(r"^spa-manifest.json", views.SpaManifest.as_view(), name="spa-manifest"), ] + admin_router.urls diff --git a/api/funkwhale_api/instance/urls_v2.py b/api/funkwhale_api/instance/urls_v2.py new file mode 100644 index 000000000..2b8ddcb3b --- /dev/null +++ b/api/funkwhale_api/instance/urls_v2.py @@ -0,0 +1,7 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r"^nodeinfo/2.1/?$", views.NodeInfo21.as_view(), name="nodeinfo-2.1"), +] diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index 0368bdd56..3272a95d8 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -59,7 +59,7 @@ class InstanceSettings(generics.GenericAPIView): @method_decorator(ensure_csrf_cookie, name="dispatch") -class NodeInfo(views.APIView): +class NodeInfo20(views.APIView): permission_classes = [] authentication_classes = [] serializer_class = serializers.NodeInfo20Serializer @@ -122,6 +122,61 @@ class NodeInfo(views.APIView): ) +class NodeInfo21(NodeInfo20): + serializer_class = serializers.NodeInfo21Serializer + + @extend_schema( + responses=serializers.NodeInfo20Serializer, operation_id="getNodeInfo20" + ) + def get(self, request): + pref = preferences.all() + if ( + pref["moderation__allow_list_public"] + and pref["moderation__allow_list_enabled"] + ): + allowed_domains = list( + Domain.objects.filter(allowed=True) + .order_by("name") + .values_list("name", flat=True) + ) + else: + allowed_domains = None + + data = { + "software": {"version": funkwhale_version}, + "services": {"inbound": ["atom1.0"], "outbound": ["atom1.0"]}, + "preferences": pref, + "stats": cache_memoize(600, prefix="memoize:instance:stats")(stats.get)() + if pref["instance__nodeinfo_stats_enabled"] + else None, + "actorId": get_service_actor().fid, + "supportedUploadExtensions": SUPPORTED_EXTENSIONS, + "allowed_domains": allowed_domains, + "languages": pref.get("moderation__languages"), + "location": pref.get("instance__location"), + "content": cache_memoize(600, prefix="memoize:instance:content")( + stats.get_content + )() + if pref["instance__nodeinfo_stats_enabled"] + else None, + "features": [ + "channels", + "podcasts", + ], + } + + if not pref.get("common__api_authentication_required"): + data["features"].append("anonymousCanListen") + + if pref.get("federation__enabled"): + data["features"].append("federation") + + serializer = self.serializer_class(data) + return Response( + serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE + ) + + PWA_MANIFEST_PATH = Path(__file__).parent / "pwa-manifest.json" PWA_MANIFEST: dict = json.loads(PWA_MANIFEST_PATH.read_text(encoding="utf-8")) diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index a58e5cc80..4f31aee2a 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -6,7 +6,7 @@ from funkwhale_api import __version__ as api_version from funkwhale_api.music.utils import SUPPORTED_EXTENSIONS -def test_nodeinfo_default(api_client): +def test_nodeinfo_20(api_client): url = reverse("api:v1:instance:nodeinfo-2.0") response = api_client.get(url) @@ -89,3 +89,73 @@ def test_nodeinfo_default(api_client): } assert response.data == expected + + +def test_nodeinfo_21(api_client): + url = reverse("api:v2:instance:nodeinfo-2.1") + response = api_client.get(url) + + expected = { + "version": "2.1", + "software": OrderedDict( + [ + ("name", "funkwhale"), + ("version", api_version), + ("repository", "https://dev.funkwhale.audio/funkwhale/funkwhale"), + ("homepage", "https://funkwhale.audio"), + ] + ), + "protocols": ["activitypub"], + "services": OrderedDict([("inbound", ["atom1.0"]), ("outbound", ["atom1.0"])]), + "openRegistrations": False, + "usage": { + "users": OrderedDict( + [("total", 0), ("activeHalfyear", 0), ("activeMonth", 0)] + ), + "localPosts": 0, + "localComments": 0, + }, + "metadata": { + "actorId": "https://test.federation/federation/actors/service", + "private": False, + "shortDescription": "", + "longDescription": "", + "contactEmail": "", + "nodeName": "", + "banner": None, + "defaultUploadQuota": 1000, + "supportedUploadExtensions": SUPPORTED_EXTENSIONS, + "allowList": {"enabled": False, "domains": None}, + "funkwhaleSupportMessageEnabled": True, + "instanceSupportMessage": "", + "usage": OrderedDict( + [ + ("favorites", OrderedDict([("tracks", {"total": 0})])), + ("listenings", OrderedDict([("total", 0)])), + ("downloads", OrderedDict([("total", 0)])), + ] + ), + "location": "", + "languages": ["en"], + "features": ["channels", "podcasts", "federation"], + "content": OrderedDict( + [ + ( + "local", + OrderedDict( + [ + ("artists", 0), + ("releases", 0), + ("recordings", 0), + ("hoursOfContent", 0), + ] + ), + ), + ("topMusicCategories", []), + ("topPodcastCategories", []), + ] + ), + }, + } + + assert response.data == expected diff --git a/api/tests/test_urls.py b/api/tests/test_urls.py index 9e4449a32..e48861bc1 100644 --- a/api/tests/test_urls.py +++ b/api/tests/test_urls.py @@ -12,5 +12,5 @@ def test_can_resolve_subsonic(): def test_can_resolve_v2(): - path = reverse("api:v2:instance:nodeinfo-2.0") - assert path == "/api/v2/instance/nodeinfo/2.0" + path = reverse("api:v2:instance:nodeinfo-2.1") + assert path == "/api/v2/instance/nodeinfo/2.1" diff --git a/changes/changelog.d/2085.feature b/changes/changelog.d/2085.feature new file mode 100644 index 000000000..aa9b3e308 --- /dev/null +++ b/changes/changelog.d/2085.feature @@ -0,0 +1 @@ +Add NodeInfo 2.1 (#2085) From 08c142cfff1216a11d62711658044886f496b142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Wed, 22 Nov 2023 10:01:14 +0000 Subject: [PATCH 105/371] fix(front): Fixed regex order in embed Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2642> --- changes/changelog.d/embed-regex.bugfix | 1 + front/public/embed.html | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/embed-regex.bugfix diff --git a/changes/changelog.d/embed-regex.bugfix b/changes/changelog.d/embed-regex.bugfix new file mode 100644 index 000000000..83e033937 --- /dev/null +++ b/changes/changelog.d/embed-regex.bugfix @@ -0,0 +1 @@ +Fixed issue with regular expression in embed. diff --git a/front/public/embed.html b/front/public/embed.html index 39bca4c9a..8e367ada3 100644 --- a/front/public/embed.html +++ b/front/public/embed.html @@ -82,7 +82,8 @@ // that do not support other codecs to be able to play it :) if (sources.length > 0 && !sources.some(({ mimetype }) => mimetype === 'audio/mpeg')) { const source = sources[0].listen_url - const url = new URL(source.test(/^https?:/) + const regex = /^https?:/ + const url = new URL(regex.test(source) ? source : source[0] === '/' ? `${baseUrl}${source}` From eb0c644b93a33d6548fd4306aa3ecb205d08dea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Wed, 22 Nov 2023 11:18:30 +0000 Subject: [PATCH 106/371] fix(front): Fix broken copy button in embed modal Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2642> --- changes/changelog.d/copybutton.bugfix | 1 + front/src/components/audio/EmbedWizard.vue | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 changes/changelog.d/copybutton.bugfix diff --git a/changes/changelog.d/copybutton.bugfix b/changes/changelog.d/copybutton.bugfix new file mode 100644 index 000000000..091b15f5a --- /dev/null +++ b/changes/changelog.d/copybutton.bugfix @@ -0,0 +1 @@ +Fixed an issue where the copy button didn't copy the Embed code in the embed modal. diff --git a/front/src/components/audio/EmbedWizard.vue b/front/src/components/audio/EmbedWizard.vue index 05ddd2441..266ba4c7d 100644 --- a/front/src/components/audio/EmbedWizard.vue +++ b/front/src/components/audio/EmbedWizard.vue @@ -39,8 +39,7 @@ const iframeSrc = computed(() => { const frameWidth = computed(() => width.value ?? '100%') const embedCode = computed(() => `<iframe width="${frameWidth.value}" height="${height.value}" scrolling="no" frameborder="no" src="${iframeSrc.value.replace(/&/g, '&')}"></iframe>`) -const textarea = ref() -const { copy, copied } = useClipboard({ source: textarea }) +const { copy, copied } = useClipboard({ source: embedCode }) </script> <template> @@ -103,8 +102,7 @@ const { copy, copied } = useClipboard({ source: textarea }) {{ $t('components.audio.EmbedWizard.help.embed') }} </p> <textarea - ref="textarea" - :value="embedCode" + v-model="embedCode" rows="5" readonly /> From 6157df55520c1caf1b887a3af45e3f01544083ce Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 23 Nov 2023 12:55:52 +0000 Subject: [PATCH 107/371] fix(nginx): Fix docker nginx configurations --- docker/nginx/conf.dev | 3 +-- front/docker/funkwhale.conf.template | 3 +-- templates/nginx.conf.j2 | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index aecf2688d..931d47d35 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -1,7 +1,6 @@ - upstream funkwhale-api { # depending on your setup, you may want to update this - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; } upstream funkwhale-front { diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index abbf636d5..144cd3ae5 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -1,7 +1,6 @@ - upstream funkwhale-api { # depending on your setup, you may want to update this - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; } # Required for websocket support. diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 index 8b88ced42..4822eae31 100644 --- a/templates/nginx.conf.j2 +++ b/templates/nginx.conf.j2 @@ -3,12 +3,19 @@ upstream fw { server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } {% else %} +{% if config.inside_docker %} +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; +} +{% else %} upstream funkwhale-api { # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } {% endif %} +{% endif %} {% if config.proxy_frontend %} upstream funkwhale-front { @@ -68,7 +75,7 @@ server { listen [::]:80; server_name _; - +PI_IP}:${FUNKWHALE_API_PORT}; {% endif %} # General configs @@ -76,7 +83,7 @@ server { {% if config.inside_docker %} root /usr/share/nginx/html; {% else %} - root ${FUNKWHALE_FRONTEND_PATH}, + root ${FUNKWHALE_FRONTEND_PATH}; {% endif %} {% endif %} client_max_body_size ${NGINX_MAX_BODY_SIZE}; @@ -130,12 +137,12 @@ server { {% if config.proxy_frontend and not config.reverse_proxy %} proxy_pass http://funkwhale-front; {% elif not config.proxy_frontend and config.reverse_proxy %} - proxy_pass http://fw + proxy_pass http://fw; {% else %} {% if config.inside_docker %} alias /usr/share/nginx/html/; {% else %} - alias ${FUNKWHALE_FRONTEND_PATH}/, + alias ${FUNKWHALE_FRONTEND_PATH}/; {% endif %} try_files $uri $uri/ /index.html; {% endif %} @@ -150,7 +157,7 @@ server { {% if config.inside_docker %} alias /usr/share/nginx/html/embed.html; {% else %} - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html, + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; {% endif %} {% endif %} add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; From b6190540eee0acbe0b0c039e7b1f405f5844d395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Mon, 20 Nov 2023 09:22:19 +0000 Subject: [PATCH 108/371] feat(docs): Added CoC property to nodeinfo spec Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2641> --- changes/changelog.d/coc-nodeinfo.doc | 1 + docs/specs/nodeinfo21/index.md | 4 ++++ docs/specs/nodeinfo21/schema.yml | 3 +++ 3 files changed, 8 insertions(+) create mode 100644 changes/changelog.d/coc-nodeinfo.doc diff --git a/changes/changelog.d/coc-nodeinfo.doc b/changes/changelog.d/coc-nodeinfo.doc new file mode 100644 index 000000000..7f0174675 --- /dev/null +++ b/changes/changelog.d/coc-nodeinfo.doc @@ -0,0 +1 @@ +Added CoC link to nodeinfo endpoint spec. diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md index e8d100956..adc27ab75 100644 --- a/docs/specs/nodeinfo21/index.md +++ b/docs/specs/nodeinfo21/index.md @@ -91,6 +91,9 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `location` (String) : The country the pod is located in +`codeOfConduct` (String \<Url\>) +: If the server admin has populated the **Rules** setting on their pod, this value is populated with the URL to the pod's about page: `<server_domain>/about/pod#rules`. + `federation.followsInstances` (Number) : The number of Funkwhale pods that the target pod follows @@ -163,6 +166,7 @@ Example response: "instanceSupportMessage": "string", "languages": ["string"], "location": "string", + "codeOfConduct": "string", "content": { "local": { "artists": 1000, diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index 9658c4321..e454b24c0 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -491,6 +491,9 @@ components: type: string location: type: string + codeOfConduct: + type: string + format: url content: type: object properties: From 3db367f4bc67560dff1135f376b17db16b7ba455 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 24 Nov 2023 13:37:11 +0000 Subject: [PATCH 109/371] feat(api): Add codeOfConduct to NodeInfo Endpoint Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2641> --- api/funkwhale_api/instance/serializers.py | 8 ++++++++ api/tests/instance/test_nodeinfo.py | 1 + 2 files changed, 9 insertions(+) diff --git a/api/funkwhale_api/instance/serializers.py b/api/funkwhale_api/instance/serializers.py index 87dc1b139..7856df065 100644 --- a/api/funkwhale_api/instance/serializers.py +++ b/api/funkwhale_api/instance/serializers.py @@ -205,6 +205,14 @@ class Metadata21Serializer(MetadataSerializer): location = serializers.CharField() content = MetadataContentSerializer() features = serializers.ListField(child=serializers.CharField()) + codeOfConduct = serializers.SerializerMethodField() + + def get_codeOfConduct(self, obj) -> str: + return ( + full_url("/about/pod#rules") + if obj["preferences"].get("instance__rules") + else "" + ) class NodeInfo20Serializer(serializers.Serializer): diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index 4f31aee2a..e8896e3bd 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -155,6 +155,7 @@ def test_nodeinfo_21(api_client): ("topPodcastCategories", []), ] ), + "codeOfConduct": "", }, } From 43c286125274fc21b290ccb3832afbc5acb6d55d Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 23 Nov 2023 10:23:39 +0000 Subject: [PATCH 110/371] fix(api): Set logger to DEBUG if DEBUG is enabled Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2643> --- api/config/settings/common.py | 6 +++++- changes/changelog.d/1538.enhancement | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/1538.enhancement diff --git a/api/config/settings/common.py b/api/config/settings/common.py index de4117edc..b6084078e 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -13,7 +13,11 @@ APPS_DIR = ROOT_DIR.path("funkwhale_api") env = environ.Env() ENV = env -LOGLEVEL = env("LOGLEVEL", default="info").upper() +# If DEBUG is `true`, we automatically set the loglevel to "DEBUG" +# If DEBUG is `false`, we try to read the level from LOGLEVEL environment and default to "INFO" +LOGLEVEL = ( + "DEBUG" if env.bool("DEBUG", False) else env("LOGLEVEL", default="info").upper() +) IS_DOCKER_SETUP = env.bool("IS_DOCKER_SETUP", False) diff --git a/changes/changelog.d/1538.enhancement b/changes/changelog.d/1538.enhancement new file mode 100644 index 000000000..9d990b069 --- /dev/null +++ b/changes/changelog.d/1538.enhancement @@ -0,0 +1 @@ +Connect loglevel and debug mode (#1538) From 4740df9d3c27d110234263d2c0c0ab496c7f2fe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Thu, 23 Nov 2023 10:39:17 +0000 Subject: [PATCH 111/371] feat(docs): Move docstring and clarify debug Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2643> --- api/config/settings/common.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index b6084078e..177597efd 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -18,6 +18,24 @@ ENV = env LOGLEVEL = ( "DEBUG" if env.bool("DEBUG", False) else env("LOGLEVEL", default="info").upper() ) +""" +Default logging level for the Funkwhale processes. + +.. note:: + The `DEBUG` variable overrides the `LOGLEVEL` if it is set to `TRUE`. + + The `LOGLEVEL` value only applies if `DEBUG` is `false` or not present. + +Available levels: + +- ``debug`` +- ``info`` +- ``warning`` +- ``error`` +- ``critical`` + +""" + IS_DOCKER_SETUP = env.bool("IS_DOCKER_SETUP", False) @@ -39,19 +57,6 @@ if env("FUNKWHALE_SENTRY_DSN", default=None) is not None: ) sentry_sdk.set_tag("instance", env("FUNKWHALE_HOSTNAME")) -""" -Default logging level for the Funkwhale processes - -Available levels: - -- ``debug`` -- ``info`` -- ``warning`` -- ``error`` -- ``critical`` - -""" # pylint: disable=W0105 - LOGGING_CONFIG = None logging.config.dictConfig( { From dfb893e63bd37df3a33e5e0879f4ff35bd0cecd5 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 24 Nov 2023 14:34:45 +0000 Subject: [PATCH 112/371] chore(api): update dependency aioresponses to v0.7.6 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2647> --- api/poetry.lock | 21 +++++++++++++++++---- api/pyproject.toml | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 9c94730b7..69fc21c21 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -110,13 +110,13 @@ speedups = ["Brotli", "aiodns", "cchardet"] [[package]] name = "aioresponses" -version = "0.7.5" +version = "0.7.6" description = "Mock out requests made by ClientSession from aiohttp package" optional = false python-versions = "*" files = [ - {file = "aioresponses-0.7.5-py2.py3-none-any.whl", hash = "sha256:0af13b077bde04ae965bc21981a1c6afd7dd17b861150d858de477d1c39c26a6"}, - {file = "aioresponses-0.7.5.tar.gz", hash = "sha256:794b3e04837a683fd2c0c099bdf77f8d7ecdd284bc2c15203003518bf5cb8da8"}, + {file = "aioresponses-0.7.6-py2.py3-none-any.whl", hash = "sha256:d2c26defbb9b440ea2685ec132e90700907fd10bcca3e85ec2f157219f0d26f7"}, + {file = "aioresponses-0.7.6.tar.gz", hash = "sha256:f795d9dbda2d61774840e7e32f5366f45752d1adc1b74c9362afd017296c7ee1"}, ] [package.dependencies] @@ -2633,6 +2633,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -2641,6 +2642,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -3159,6 +3162,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3166,8 +3170,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3184,6 +3195,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3191,6 +3203,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -4549,4 +4562,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "5a259657d79f98ce6a7c377c5715aaf6f56d7ad4b9c420e784c81aa145c86b1d" +content-hash = "0c5d14617a13e172f5fa54e389ffce16cd2b16b74edda8e8516cc7df415bdf42" diff --git a/api/pyproject.toml b/api/pyproject.toml index 4f9bde163..092d4939f 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -99,7 +99,7 @@ service-identity = "==21.1.0" unicode-slugify = "==0.1.5" [tool.poetry.group.dev.dependencies] -aioresponses = "==0.7.5" +aioresponses = "==0.7.6" asynctest = "==0.13.0" black = "==23.3.0" coverage = { version = "==6.5.0", extras = ["toml"] } From b74a873b4acdfac951ea4ec83041097ef6ad63e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Sun, 26 Nov 2023 19:46:51 +0100 Subject: [PATCH 113/371] fix(docs): update broken link Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2649> --- docs/changes/funkwhale-0-changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changes/funkwhale-0-changelog.md b/docs/changes/funkwhale-0-changelog.md index c24ce8e2a..6b19b452c 100644 --- a/docs/changes/funkwhale-0-changelog.md +++ b/docs/changes/funkwhale-0-changelog.md @@ -2605,7 +2605,7 @@ without developing our own alternative clients for each and every platform. Most advanced Subsonic clients support offline caching of music files, playlist management and search, which makes them well-suited for nomadic use. -Please see [our list of supported apps](https://funkwhale.audio/en_US/apps) +Please see [our list of supported apps](https://funkwhale.audio/apps) for more information about supported clients and user instructions. At the instance-level, the Subsonic API is enabled by default, but require From 76362b020e9e92c8332dcc0f7acd74b36faf6370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Sun, 26 Nov 2023 19:33:13 +0100 Subject: [PATCH 114/371] fix(nginx): fix websocket issue in template Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2648> --- changes/changelog.d/websocket.bugfix | 1 + deploy/docker.proxy.template | 1 + deploy/nginx.template | 1 + docker/nginx/conf.dev | 1 + front/docker/funkwhale.conf.template | 1 + templates/nginx.conf.j2 | 3 ++- 6 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/websocket.bugfix diff --git a/changes/changelog.d/websocket.bugfix b/changes/changelog.d/websocket.bugfix new file mode 100644 index 000000000..ebafa81a0 --- /dev/null +++ b/changes/changelog.d/websocket.bugfix @@ -0,0 +1 @@ +Fixed an issue with the nginx templates that caused issues when connecting to websockets. diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index 4e232786c..06908cbcc 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -81,6 +81,7 @@ server { location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://fw; } diff --git a/deploy/nginx.template b/deploy/nginx.template index 61cf88ceb..0a5b3ca93 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -95,6 +95,7 @@ server { location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; alias ${FUNKWHALE_FRONTEND_PATH}/; try_files $uri $uri/ /index.html; } diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index 931d47d35..67a27dd8a 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -67,6 +67,7 @@ server { location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://funkwhale-front; } diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index 144cd3ae5..3420a3388 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -63,6 +63,7 @@ server { location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; alias /usr/share/nginx/html/; try_files $uri $uri/ /index.html; } diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 index 4822eae31..936e738fc 100644 --- a/templates/nginx.conf.j2 +++ b/templates/nginx.conf.j2 @@ -75,7 +75,7 @@ server { listen [::]:80; server_name _; -PI_IP}:${FUNKWHALE_API_PORT}; + {% endif %} # General configs @@ -134,6 +134,7 @@ PI_IP}:${FUNKWHALE_API_PORT}; location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; {% if config.proxy_frontend and not config.reverse_proxy %} proxy_pass http://funkwhale-front; {% elif not config.proxy_frontend and config.reverse_proxy %} From 69876867d5bdc312eb6c5714ea353569d959809a Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 27 Nov 2023 11:57:38 +0000 Subject: [PATCH 115/371] fix(embed): Make sure embed has sane default image and correct link Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2650> --- api/config/settings/common.py | 4 +--- api/funkwhale_api/common/middleware.py | 4 +++- api/tests/common/test_middleware.py | 2 +- changes/changelog.d/meta-tags-embed-player.fix | 1 + 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 changes/changelog.d/meta-tags-embed-player.fix diff --git a/api/config/settings/common.py b/api/config/settings/common.py index 177597efd..2ea42cd5c 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -196,9 +196,7 @@ request errors related to this. FUNKWHALE_SPA_HTML_CACHE_DURATION = env.int( "FUNKWHALE_SPA_HTML_CACHE_DURATION", default=60 * 15 ) -FUNKWHALE_EMBED_URL = env( - "FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/front/embed.html" -) +FUNKWHALE_EMBED_URL = env("FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/embed.html") FUNKWHALE_SPA_REWRITE_MANIFEST = env.bool( "FUNKWHALE_SPA_REWRITE_MANIFEST", default=True ) diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index b83beb2e6..63ba1b378 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -150,7 +150,9 @@ def get_default_head_tags(path): { "tag": "meta", "property": "og:image", - "content": utils.join_url(settings.FUNKWHALE_URL, "/front/favicon.png"), + "content": utils.join_url( + settings.FUNKWHALE_URL, "/android-chrome-512x512.png" + ), }, { "tag": "meta", diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 2a7251ab8..ff37ca380 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -108,7 +108,7 @@ def test_get_default_head_tags(preferences, settings): { "tag": "meta", "property": "og:image", - "content": settings.FUNKWHALE_URL + "/front/favicon.png", + "content": settings.FUNKWHALE_URL + "/android-chrome-512x512.png", }, {"tag": "meta", "property": "og:url", "content": settings.FUNKWHALE_URL + "/"}, ] diff --git a/changes/changelog.d/meta-tags-embed-player.fix b/changes/changelog.d/meta-tags-embed-player.fix new file mode 100644 index 000000000..45c485195 --- /dev/null +++ b/changes/changelog.d/meta-tags-embed-player.fix @@ -0,0 +1 @@ +Make sure meta tags link to embedded player correctly From 0c2f9c8dbbc1f53bcf95c93fba10ff33fc3268ca Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sat, 25 Nov 2023 15:25:21 +0000 Subject: [PATCH 116/371] fix(nginx): Make sure pages that require OG tags are served by the backend Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2623> --- changes/changelog.d/2208.bugfix | 1 + deploy/docker.proxy.template | 20 ++++++++++++++++++++ deploy/nginx.template | 20 ++++++++++++++++++++ docker/nginx/conf.dev | 21 ++++++++++++++++++++- front/docker/funkwhale.conf.template | 21 ++++++++++++++++++++- templates/nginx.conf.j2 | 21 ++++++++++++++++++++- 6 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 changes/changelog.d/2208.bugfix diff --git a/changes/changelog.d/2208.bugfix b/changes/changelog.d/2208.bugfix new file mode 100644 index 000000000..23b64f62f --- /dev/null +++ b/changes/changelog.d/2208.bugfix @@ -0,0 +1 @@ +Fix missing og meta tags (#2208) diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index 06908cbcc..9bd8259e5 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -79,6 +79,26 @@ server { + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + location / { expires 1d; include /etc/nginx/funkwhale_proxy.conf; diff --git a/deploy/nginx.template b/deploy/nginx.template index 0a5b3ca93..7789f4281 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -93,6 +93,26 @@ server { proxy_pass http://funkwhale-api; } + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + location / { expires 1d; include /etc/nginx/funkwhale_proxy.conf; diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index 67a27dd8a..34bca7872 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -20,7 +20,6 @@ server { server_name _; - # General configs root /usr/share/nginx/html; client_max_body_size ${NGINX_MAX_BODY_SIZE}; @@ -65,6 +64,26 @@ server { proxy_pass http://funkwhale-api; } + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + location / { expires 1d; include /etc/nginx/funkwhale_proxy.conf; diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index 3420a3388..a27024485 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -16,7 +16,6 @@ server { server_name _; - # General configs root /usr/share/nginx/html; client_max_body_size ${NGINX_MAX_BODY_SIZE}; @@ -61,6 +60,26 @@ server { proxy_pass http://funkwhale-api; } + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + location / { expires 1d; include /etc/nginx/funkwhale_proxy.conf; diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 index 936e738fc..dc3cc2f52 100644 --- a/templates/nginx.conf.j2 +++ b/templates/nginx.conf.j2 @@ -75,7 +75,6 @@ server { listen [::]:80; server_name _; - {% endif %} # General configs @@ -132,6 +131,26 @@ server { } {% endif %} + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + location / { expires 1d; include /etc/nginx/funkwhale_proxy.conf; From 150a9f68a4fc1463230d0a2c957d1f37cf6bf5b2 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 28 Nov 2023 12:52:12 +0000 Subject: [PATCH 117/371] fix(api): Use correct data field for rate limiting identity field Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2653> --- api/funkwhale_api/common/serializers.py | 2 +- api/funkwhale_api/common/throttling.py | 2 +- api/tests/common/test_throttling.py | 4 ++-- api/tests/common/test_views.py | 2 +- changes/changelog.d/2248.bugfix | 1 + 5 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 changes/changelog.d/2248.bugfix diff --git a/api/funkwhale_api/common/serializers.py b/api/funkwhale_api/common/serializers.py index d10969eeb..96f5beddd 100644 --- a/api/funkwhale_api/common/serializers.py +++ b/api/funkwhale_api/common/serializers.py @@ -349,7 +349,7 @@ class ScopesSerializer(serializers.Serializer): class IdentSerializer(serializers.Serializer): type = serializers.CharField() - id = serializers.IntegerField() + id = serializers.CharField() class RateLimitSerializer(serializers.Serializer): diff --git a/api/funkwhale_api/common/throttling.py b/api/funkwhale_api/common/throttling.py index 06b99f9f0..264bb92c5 100644 --- a/api/funkwhale_api/common/throttling.py +++ b/api/funkwhale_api/common/throttling.py @@ -7,7 +7,7 @@ from rest_framework import throttling as rest_throttling def get_ident(user, request): if user and user.is_authenticated: - return {"type": "authenticated", "id": user.pk} + return {"type": "authenticated", "id": f"{user.pk}"} ident = rest_throttling.BaseThrottle().get_ident(request) return {"type": "anonymous", "id": ident} diff --git a/api/tests/common/test_throttling.py b/api/tests/common/test_throttling.py index 5445bfbc9..16cd44196 100644 --- a/api/tests/common/test_throttling.py +++ b/api/tests/common/test_throttling.py @@ -17,7 +17,7 @@ def test_get_ident_anonymous(api_request): def test_get_ident_authenticated(api_request, factories): user = factories["users.User"]() request = api_request.get("/") - expected = {"id": user.pk, "type": "authenticated"} + expected = {"id": f"{user.pk}", "type": "authenticated"} assert throttling.get_ident(user, request) == expected @@ -26,7 +26,7 @@ def test_get_ident_authenticated(api_request, factories): [ ( "create", - {"id": 42, "type": "authenticated"}, + {"id": "42", "type": "authenticated"}, "throttling:create:authenticated:42", ), ( diff --git a/api/tests/common/test_views.py b/api/tests/common/test_views.py index 7b08e50b4..1b4447a3d 100644 --- a/api/tests/common/test_views.py +++ b/api/tests/common/test_views.py @@ -160,7 +160,7 @@ def test_cannot_approve_reject_without_perm( def test_rate_limit(logged_in_api_client, now_time, settings, mocker): - expected_ident = {"type": "authenticated", "id": logged_in_api_client.user.pk} + expected_ident = {"type": "authenticated", "id": f"{logged_in_api_client.user.pk}"} expected = { "ident": expected_ident, diff --git a/changes/changelog.d/2248.bugfix b/changes/changelog.d/2248.bugfix new file mode 100644 index 000000000..f724dc7fc --- /dev/null +++ b/changes/changelog.d/2248.bugfix @@ -0,0 +1 @@ +Use correct data field for rate limiting identity field (#2248) From 362aa9db3e4a4f670c9a302b6679ebd7e75f4504 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 28 Nov 2023 19:28:47 +0100 Subject: [PATCH 118/371] fix: Make sure all changelog snippets have the right ending --- changes/changelog.d/{1861.newfeature => 1861.feature} | 0 changes/changelog.d/{2083.newfeature => 2083.feature} | 0 changes/changelog.d/{2215.enchancement => 2215.enhancement} | 0 ....enchancement => descriptive-service-worker-error.enhancement} | 0 .../{meta-tags-embed-player.fix => meta-tags-embed-player.bugfix} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename changes/changelog.d/{1861.newfeature => 1861.feature} (100%) rename changes/changelog.d/{2083.newfeature => 2083.feature} (100%) rename changes/changelog.d/{2215.enchancement => 2215.enhancement} (100%) rename changes/changelog.d/{descriptive-service-worker-error.enchancement => descriptive-service-worker-error.enhancement} (100%) rename changes/changelog.d/{meta-tags-embed-player.fix => meta-tags-embed-player.bugfix} (100%) diff --git a/changes/changelog.d/1861.newfeature b/changes/changelog.d/1861.feature similarity index 100% rename from changes/changelog.d/1861.newfeature rename to changes/changelog.d/1861.feature diff --git a/changes/changelog.d/2083.newfeature b/changes/changelog.d/2083.feature similarity index 100% rename from changes/changelog.d/2083.newfeature rename to changes/changelog.d/2083.feature diff --git a/changes/changelog.d/2215.enchancement b/changes/changelog.d/2215.enhancement similarity index 100% rename from changes/changelog.d/2215.enchancement rename to changes/changelog.d/2215.enhancement diff --git a/changes/changelog.d/descriptive-service-worker-error.enchancement b/changes/changelog.d/descriptive-service-worker-error.enhancement similarity index 100% rename from changes/changelog.d/descriptive-service-worker-error.enchancement rename to changes/changelog.d/descriptive-service-worker-error.enhancement diff --git a/changes/changelog.d/meta-tags-embed-player.fix b/changes/changelog.d/meta-tags-embed-player.bugfix similarity index 100% rename from changes/changelog.d/meta-tags-embed-player.fix rename to changes/changelog.d/meta-tags-embed-player.bugfix From 0840aeb943be6e92797b6911447937d2d9443066 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 28 Nov 2023 19:35:15 +0100 Subject: [PATCH 119/371] Version bump and changelog for 1.4.0-rc1 --- CHANGELOG.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++ api/pyproject.toml | 2 +- 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8132c91d5..95e37dd44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,94 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog. <!-- towncrier --> +## 1.4.0-rc1 (2023-11-28) + +Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html + +Features: + +- Add atom1.0 to node info services (#2085) +- Add basic cypress testing +- Add NodeInfo 2.1 (#2085) +- Add support for Funkwhale UI library. +- Add support for Python 3.12 +- Allow moderators to set moderation languages (#2085) +- Allow to set the instances server location (#2085) +- Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135) +- Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861) +- Generate all nginx configurations from one template +- New management command to update Uploads which have been imported using --in-place and are now stored in s3 (#2156) +- Add option to only allow MusicBrainz tagged file on a pod (#2083) +- Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI + entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288) + +Enhancements: + +- Add a management command to generate dummy notifications for testing +- Add custom logging functionality (#2155) +- Adding typesense container and api client (2104) +- Cache pip package in api docker builds (#2193) +- Connect loglevel and debug mode (#1538) +- Get api version from python package +- Log service worker registration error and add a warning about Firefox SW incompatibility in development mode +- Maintain api version using poetry +- Maloja: Submit album artists and duration and allow to disable server side metadata fixing +- Replace pytz with zoneinfo in the API +- Speed up linting and type-checking by using cache +- Split front large bundles into smaller chunks +- Support boolean config fields in plugins + +Bugfixes: + +- `postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command. +- Avoid troi radio to give duplicates (#2231) +- Fix help messages for running scripts using funkwhale-manage +- Fix missing og meta tags (#2208) +- Fix multiarch docker builds #2211 +- Fixed an issue where the copy button didn't copy the Embed code in the embed modal. +- Fixed an issue with the nginx templates that caused issues when connecting to websockets. +- Fixed development docker setup (2102) +- Fixed development docker setup (2196) +- Fixed embedded player crash when API returns relative listen URL. (#2163) +- Fixed issue with regular expression in embed. +- Make Artist ordering by name case insensitive +- Make sure build requirements for ujson are met +- Make sure embed codes generated before 1.3.0 are still working +- Make sure funkwhale_api package and metadata are available for docs +- Make sure meta tags link to embedded player correctly +- Merge nginx configs for docker production and development setups (#1939) +- Updated links to the Funkwhale website in the UI. (#2235) +- Use correct data field for rate limiting identity field (#2248) + +Documentation: + +- Add missing `has_mbid` requirement to quality filter spec. +- Add spec for user following. +- Added CoC link to nodeinfo endpoint spec. +- Added multi-artist support spec. +- Added new collections spec. +- Added NodeInfo 2.1 specification +- Archived the pre-1.0 changelog +- Updated nodeinfo spec to include usage statistics. +- Updated the Nodeinfo 2 spec to address feedback from implementation. + +Other: + +- Add build metadata script +- Don't run CI on branch containing stable or develop +- Fix CI deploy docs job after stable branch merge +- Format api container file +- Lint api code using pylint +- Make renovate not pinning the python version to the latest one +- Rename CHANGELOG to CHANGELOG.md +- Replace docs scripts with make +- Rework the CI pipeline +- Use buildx bake in docker job + +Removal: + +- Drop support for python3.7 + ## 1.3.4 (2023-11-16) Upgrade instructions are available at diff --git a/api/pyproject.toml b/api/pyproject.toml index 092d4939f..6e361c127 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "funkwhale-api" -version = "1.3.3" +version = "1.4.0-rc1" description = "Funkwhale API" authors = ["Funkwhale Collective"] From 9dbbe9e7686db2b419f348258d8108e59d39a1dc Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 29 Nov 2023 09:31:08 +0000 Subject: [PATCH 120/371] fix(nginx): Use correct passing in production configs Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2654> --- changes/changelog.d/2252.bugfix | 1 + deploy/docker.proxy.template | 22 ---------------------- deploy/nginx.template | 3 ++- front/docker/funkwhale.conf.template | 3 ++- templates/nginx.conf.j2 | 15 +++++++++++---- 5 files changed, 16 insertions(+), 28 deletions(-) create mode 100644 changes/changelog.d/2252.bugfix diff --git a/changes/changelog.d/2252.bugfix b/changes/changelog.d/2252.bugfix new file mode 100644 index 000000000..0430f4dde --- /dev/null +++ b/changes/changelog.d/2252.bugfix @@ -0,0 +1 @@ +Fix broken nginx templates for docker setup (#2252) diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index 9bd8259e5..1d470b1b9 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -77,28 +77,6 @@ server { text/x-cross-domain-policy; # end of compression settings - - - location ~ ^/library/(albums|tracks|artists|playlists)/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api; - } - - location /channels/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api; - } - - location ~ ^/@(vite-plugin-pwa|vite|id)/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-front; - } - - location /@ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api; - } - location / { expires 1d; include /etc/nginx/funkwhale_proxy.conf; diff --git a/deploy/nginx.template b/deploy/nginx.template index 7789f4281..c77cb9335 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -105,7 +105,8 @@ server { location ~ ^/@(vite-plugin-pwa|vite|id)/ { include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-front; + alias ${FUNKWHALE_FRONTEND_PATH}/; + try_files $uri $uri/ /index.html; } location /@ { diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index a27024485..b7081f56d 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -72,7 +72,8 @@ server { location ~ ^/@(vite-plugin-pwa|vite|id)/ { include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-front; + alias /usr/share/nginx/html/; + try_files $uri $uri/ /index.html; } location /@ { diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 index dc3cc2f52..ab8ea05d9 100644 --- a/templates/nginx.conf.j2 +++ b/templates/nginx.conf.j2 @@ -113,23 +113,20 @@ server { text/x-component text/x-cross-domain-policy; # end of compression settings - {% if not config.reverse_proxy %} + # headers add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; add_header Referrer-Policy "strict-origin-when-cross-origin"; add_header X-Frame-Options "SAMEORIGIN" always; add_header Service-Worker-Allowed "/"; -{% endif %} -{% if not config.reverse_proxy %} location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. client_max_body_size ${NGINX_MAX_BODY_SIZE}; proxy_pass http://funkwhale-api; } -{% endif %} location ~ ^/library/(albums|tracks|artists|playlists)/ { include /etc/nginx/funkwhale_proxy.conf; @@ -143,13 +140,23 @@ server { location ~ ^/@(vite-plugin-pwa|vite|id)/ { include /etc/nginx/funkwhale_proxy.conf; + {% if config.proxy_frontend %} proxy_pass http://funkwhale-front; + {% else %} + {% if config.inside_docker %} + alias /usr/share/nginx/html/; + {% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/; + {% endif %} + try_files $uri $uri/ /index.html; + {% endif %} } location /@ { include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://funkwhale-api; } +{% endif %} location / { expires 1d; From cc2ff8ae880dff8b6cfc8de6ec550e53e684d95e Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 29 Nov 2023 11:09:15 +0000 Subject: [PATCH 121/371] ci: Use correct build arg to disable cache for docker builds Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2655> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d9a38f573..b97e36e95 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -462,7 +462,7 @@ docker: variables: BUILD_ARGS: > --set *.platform=linux/amd64,linux/arm64,linux/arm/v7 - --set *.no-cache + --no-cache --push - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ From 74b2593cb26fa89408bae56e7b906276231e77f5 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 30 Nov 2023 12:29:52 +0100 Subject: [PATCH 122/371] Version bump and changelog for 1.4.0-rc2 --- CHANGELOG.md | 11 +++++++++++ api/pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e37dd44..4542edff5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,17 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog. <!-- towncrier --> +## 1.4.0-rc2 (2023-11-30) + +Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html + +Changes since 1.4.0-rc1: + +Bugfixes: + +- Fix broken nginx templates for docker setup (#2252) +- Fix docker builds in CI by using correct flag to disable cache + ## 1.4.0-rc1 (2023-11-28) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html diff --git a/api/pyproject.toml b/api/pyproject.toml index 6e361c127..f77311f64 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "funkwhale-api" -version = "1.4.0-rc1" +version = "1.4.0-rc2" description = "Funkwhale API" authors = ["Funkwhale Collective"] From bfa50a0c3542f2acbcc8d850590bdee0e0d7048b Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 29 Nov 2023 13:28:30 +0100 Subject: [PATCH 123/371] chore: Add changelog snippet for ended support of Debian 10 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2656> --- changes/changelog.d/debian10.removal | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changes/changelog.d/debian10.removal diff --git a/changes/changelog.d/debian10.removal b/changes/changelog.d/debian10.removal new file mode 100644 index 000000000..6e0ca73dc --- /dev/null +++ b/changes/changelog.d/debian10.removal @@ -0,0 +1,2 @@ +This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend +updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended. From 2edbc6c98f555896820f6d7ff9ac7a731ff5010c Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 30 Nov 2023 11:36:51 +0000 Subject: [PATCH 124/371] chore(api): update dependency drf-spectacular to v0.26.5 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2657> --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 69fc21c21..86cccd72c 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1360,13 +1360,13 @@ pytz = "*" [[package]] name = "drf-spectacular" -version = "0.26.1" +version = "0.26.5" description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" optional = false python-versions = ">=3.6" files = [ - {file = "drf-spectacular-0.26.1.tar.gz", hash = "sha256:1599a204bf9cc6be7ef3e509859885a38d4f871fe287a1f191479868afd9e234"}, - {file = "drf_spectacular-0.26.1-py3-none-any.whl", hash = "sha256:6df86ff6c2dc663792e5ff618643bf41d2ac9dc6fb5d1b0f273e2778bab951e5"}, + {file = "drf-spectacular-0.26.5.tar.gz", hash = "sha256:aee55330a774ba8a9cbdb125714d1c9ee05a8aafd3ce3be8bfd26527649aeb44"}, + {file = "drf_spectacular-0.26.5-py3-none-any.whl", hash = "sha256:c0002a820b11771fdbf37853deb371947caf0159d1afeeffe7598e964bc1db94"}, ] [package.dependencies] @@ -4562,4 +4562,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "0c5d14617a13e172f5fa54e389ffce16cd2b16b74edda8e8516cc7df415bdf42" +content-hash = "bb9cf9d4a4385d7475d78fb2d96491ac3e4498bd71d08d4e3cc209aa87521d22" diff --git a/api/pyproject.toml b/api/pyproject.toml index f77311f64..2023038fb 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -43,7 +43,7 @@ django-redis = "==5.2.0" django-storages = "==1.13.2" django-versatileimagefield = "==2.2" djangorestframework = "==3.14.0" -drf-spectacular = "==0.26.1" +drf-spectacular = "==0.26.5" markdown = "==3.4.4" persisting-theory = "==1.0" psycopg2 = "==2.9.9" From e38808e2ced65ae86f7a0987514c31183f210278 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 2 Dec 2023 14:06:45 +0000 Subject: [PATCH 125/371] chore(api): update dependency pylint to v2.17.7 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2661> --- api/poetry.lock | 10 +++++----- api/pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 86cccd72c..c7e700b55 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2812,17 +2812,17 @@ requests = ["requests"] [[package]] name = "pylint" -version = "2.17.2" +version = "2.17.7" description = "python code static checker" optional = false python-versions = ">=3.7.2" files = [ - {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, - {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, ] [package.dependencies] -astroid = ">=2.15.2,<=2.17.0-dev0" +astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, @@ -4562,4 +4562,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "bb9cf9d4a4385d7475d78fb2d96491ac3e4498bd71d08d4e3cc209aa87521d22" +content-hash = "e5914da748e41356624a0b1253c1fd6672a21b2010deb905522b76dee41c5ce5" diff --git a/api/pyproject.toml b/api/pyproject.toml index 2023038fb..f955b5214 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -120,7 +120,7 @@ pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" pytest-sugar = "==0.9.7" requests-mock = "==1.10.0" -pylint = "==2.17.2" +pylint = "==2.17.7" pylint-django = "==2.5.3" django-extensions = "==3.2.3" From 1ee1c88ed183be9606b4793af95b4eef4c4502b0 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 4 Dec 2023 14:34:30 +0000 Subject: [PATCH 126/371] chore(api): update dependency pytest to v7.4.3 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2664> --- api/poetry.lock | 11 +++++------ api/pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index c7e700b55..3d946185f 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2925,17 +2925,16 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.2.2" +version = "7.4.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" @@ -2944,7 +2943,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" @@ -4562,4 +4561,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "e5914da748e41356624a0b1253c1fd6672a21b2010deb905522b76dee41c5ce5" +content-hash = "ce33dfcf2265815939d8c0df6995b5e3bda40cab9a5accf7565460ac5d09d2ee" diff --git a/api/pyproject.toml b/api/pyproject.toml index f955b5214..3983f628b 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -110,7 +110,7 @@ factory-boy = "==3.2.1" faker = "==15.3.4" flake8 = "==3.9.2" ipdb = "==0.13.13" -pytest = "==7.2.2" +pytest = "==7.4.3" pytest-asyncio = "==0.21.0" prompt-toolkit = "==3.0.41" pytest-cov = "==4.0.0" From 9da463e69d33f9b41d99931c3ef8968095eb42ce Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 4 Dec 2023 16:08:14 +0000 Subject: [PATCH 127/371] chore(api): update dependency pytest-env to v0.8.2 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2663> --- api/poetry.lock | 12 ++++++------ api/pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 3d946185f..6f26e3e01 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3001,20 +3001,20 @@ testing = ["Django", "django-configurations (>=2.0)"] [[package]] name = "pytest-env" -version = "0.8.1" +version = "0.8.2" description = "py.test plugin that allows you to add environment variables." optional = false python-versions = ">=3.7" files = [ - {file = "pytest_env-0.8.1-py3-none-any.whl", hash = "sha256:8c0605ae09a5b7e41c20ebcc44f2c906eea9654095b4b0c342b3814bcc3a8492"}, - {file = "pytest_env-0.8.1.tar.gz", hash = "sha256:d7b2f5273ec6d1e221757998bc2f50d2474ed7d0b9331b92556011fadc4e9abf"}, + {file = "pytest_env-0.8.2-py3-none-any.whl", hash = "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38"}, + {file = "pytest_env-0.8.2.tar.gz", hash = "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff"}, ] [package.dependencies] -pytest = ">=7.1.3" +pytest = ">=7.3.1" [package.extras] -test = ["coverage (>=6.5)", "pytest-mock (>=3.10)"] +test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] [[package]] name = "pytest-mock" @@ -4561,4 +4561,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "ce33dfcf2265815939d8c0df6995b5e3bda40cab9a5accf7565460ac5d09d2ee" +content-hash = "b251e922767001921d8d302b47cc6f66f099daaf3a325e7ef98ab6cb3ccd5b36" diff --git a/api/pyproject.toml b/api/pyproject.toml index 3983f628b..5740d5c3f 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -115,7 +115,7 @@ pytest-asyncio = "==0.21.0" prompt-toolkit = "==3.0.41" pytest-cov = "==4.0.0" pytest-django = "==4.5.2" -pytest-env = "==0.8.1" +pytest-env = "==0.8.2" pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" pytest-sugar = "==0.9.7" From d1dd0bebcff33372e2f225169220f52870f88692 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:49:29 +0000 Subject: [PATCH 128/371] Translated using Weblate (French) Currently translated at 5.2% (1 of 19 strings) Translation: Documentation/administrator-uninstall-docker Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-uninstall-docker/fr/ --- .../LC_MESSAGES/administrator/uninstall/docker.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po index 29a244b87..63bf5a876 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/docker.md:1 @@ -43,7 +46,7 @@ msgstr "" #: ../../administrator/uninstall/docker.md:18 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre rĆ©pertoire Funkwhale." #: ../../administrator/uninstall/docker.md:24 msgid "Stop the containers" @@ -121,4 +124,3 @@ msgstr "" #~ "sure you have [backed up your " #~ "data](../upgrade_docs/backup.md) before proceeding." #~ msgstr "" - From af592d99c26b00e0f60b1b563656dab128ec8faa Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:49:29 +0000 Subject: [PATCH 129/371] Translated using Weblate (French) Currently translated at 3.3% (1 of 30 strings) Translation: Documentation/administrator-uninstall-debian Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-uninstall-debian/fr/ --- .../LC_MESSAGES/administrator/uninstall/debian.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po index f2a8d577e..1aa40eb1d 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/debian.md:1 @@ -105,7 +108,7 @@ msgstr "" #: ../../administrator/uninstall/debian.md:100 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre rĆ©pertoire Funkwhale." #: ../../administrator/uninstall/debian.md:106 msgid "Delete the Funkwhale database." @@ -176,4 +179,3 @@ msgstr "" #~ " up any data](../upgrade_docs/backup.md) you " #~ "want to keep." #~ msgstr "" - From 1061275487a5156acbd50aa288d5b322c8a194a3 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 20:17:10 +0000 Subject: [PATCH 130/371] Translated using Weblate (French) Currently translated at 100.0% (30 of 30 strings) Translation: Documentation/administrator-configuration-ldap Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-configuration-ldap/fr/ --- .../administrator/configuration/ldap.po | 79 ++++++++++++++----- 1 file changed, 58 insertions(+), 21 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po b/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po index d4f605bb9..84376b1ee 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-configuration-ldap/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/ldap.md:1 msgid "Configure LDAP" -msgstr "" +msgstr "Configurer LDAP" #: ../../administrator_documentation/configuration_docs/ldap.md:3 msgid "" @@ -28,14 +31,21 @@ msgid "" "login information. Funkwhale supports LDAP through the [Django LDAP " "authentication module](https://django-auth-ldap.readthedocs.io/)." msgstr "" +"{abbr}`LDAP (Lightweight Directory Access Protocol)` est un protocol pour " +"fournir des services dā€™annuaire. Il agit comme autoritĆ© centrale pour les " +"informations de connexion des utilisateurs. Funkwhale prend en charge le " +"protocole LDAP grĆ¢ce au [module Django dā€™authentification LDAP](https" +"://django-auth-ldap.readthedocs.io/)." #: ../../administrator_documentation/configuration_docs/ldap.md:6 msgid "LDAP users can't change their password in the app." msgstr "" +"Les utilisateurs LDAP ne peuvent pas charger leur mot de passe dans " +"lā€™application." #: ../../administrator_documentation/configuration_docs/ldap.md:9 msgid "Dependencies" -msgstr "" +msgstr "DĆ©pendances" #: ../../administrator_documentation/configuration_docs/ldap.md:11 msgid "" @@ -43,64 +53,75 @@ msgid "" "requirements files to make it easier to set up. If you aren't using LDAP," " you can safely remove these." msgstr "" +"Le support LDAP demande des dĆ©pendances supplĆ©mentaires. Nous les incluons " +"dans nos fichiers dā€™exigence pour en simplifier lā€™installation. Si vous nā€™" +"utilisiez pas LDAP, vous pouvez les supprimer en toute sĆ©curitĆ©." #: ../../administrator_documentation/configuration_docs/ldap.md msgid "OS dependencies" -msgstr "" +msgstr "DĆ©pendances systĆØme" #: ../../administrator_documentation/configuration_docs/ldap.md:15 msgid "`libldap2-dev`" -msgstr "" +msgstr "`libldap2-dev`" #: ../../administrator_documentation/configuration_docs/ldap.md:16 msgid "`libsasl2-dev`" -msgstr "" +msgstr "`libsasl2-dev`" #: ../../administrator_documentation/configuration_docs/ldap.md msgid "Python dependencies" -msgstr "" +msgstr "DĆ©pendances Python" #: ../../administrator_documentation/configuration_docs/ldap.md:22 msgid "`python-ldap`" -msgstr "" +msgstr "`python-ldap`" #: ../../administrator_documentation/configuration_docs/ldap.md:23 msgid "`python-django-auth-ldap`" -msgstr "" +msgstr "`python-django-auth-ldap`" #: ../../administrator_documentation/configuration_docs/ldap.md:27 msgid "Environment variables" -msgstr "" +msgstr "Variables dā€™environnement" #: ../../administrator_documentation/configuration_docs/ldap.md:29 msgid "" "You can configure LDAP authentication using environment variables in your" " `.env` file." msgstr "" +"Vous pouvez configurer lā€™authentification LDAP en utilisant les variables dā€™" +"environnement dans votre fichier `.env` ." #: ../../administrator_documentation/configuration_docs/ldap.md:31 msgid "Basic features" -msgstr "" +msgstr "FonctionnalitĆ©s de base" #: ../../administrator_documentation/configuration_docs/ldap.md:34 msgid "Set this to `True` to enable LDAP support" -msgstr "" +msgstr "Mettez ce paramĆØtre Ć  `True` pour activer le support LDAP" #: ../../administrator_documentation/configuration_docs/ldap.md:44 msgid "" "The LDAP {abbr}`URI (Uniform Resource Identifier)` of your authentication" " server." msgstr "" +"Lā€™{abbr}`URI (Uniform Resource Identifier)` LDAP de votre serveur " +"dā€™authentification." #: ../../administrator_documentation/configuration_docs/ldap.md:53 msgid "" "LDAP user {abbr}`DN (Distinguished Name)` to bind on so you can perform " "searches." msgstr "" +"Les utilisateurs LDAP {abbr}`DN (Distinguished Name)` Ć  lier pour pouvoir " +"effectuer des recherches." #: ../../administrator_documentation/configuration_docs/ldap.md:62 msgid "LDAP user password for bind {abbr}`DN (Distinguished Name)`." msgstr "" +"Les mots de passe des utilisateurs LDAP pour lier {abbr}`DN (Distinguished " +"Name)`." #: ../../administrator_documentation/configuration_docs/ldap.md:71 msgid "" @@ -109,28 +130,36 @@ msgid "" "syntax](https://social.technet.microsoft.com/wiki/contents/articles/5392" ".active-directory-ldap-syntax-filters.aspx)." msgstr "" +"Le filtre des utilisateurs LDAP, utilisant `{0}` comme non dā€™utilisateur. " +"Utilise le standard de la [syntaxe de recherche LDAP](https://social.technet." +"microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-" +"filters.aspx)." #: ../../administrator_documentation/configuration_docs/ldap.md:80 msgid "Set to `True` to enable LDAP StartTLS support." -msgstr "" +msgstr "Mettez le paramĆØtre sur `True` pour activer le support LDAP StartTLS." #: ../../administrator_documentation/configuration_docs/ldap.md:89 msgid "" "The LDAP search root {abbr}`DN (Distinguished Name)`. Supports several " "entries in a comma-delimited list." msgstr "" +"La racine de recherche LDAP {abbr}`DN (Distinguished Name)`. Prend en charge " +"plusieurs entrĆ©es dans une liste dĆ©limitĆ©e par des virgules." #: ../../administrator_documentation/configuration_docs/ldap.md:98 msgid "A mapping of Django user attributes to LDAP values." msgstr "" +"Une correspondance entre les attributs de l'utilisateur Django et les " +"valeurs LDAP." #: ../../administrator_documentation/configuration_docs/ldap.md:107 msgid "Controls whether to use direct binding." -msgstr "" +msgstr "ContrĆ“le sā€™il faut utiliser la liaison directe." #: ../../administrator_documentation/configuration_docs/ldap.md:115 msgid "Group features" -msgstr "" +msgstr "FonctionnalitĆ©s de groupe" #: ../../administrator_documentation/configuration_docs/ldap.md:117 msgid "" @@ -138,28 +167,36 @@ msgid "" " is an advanced feature. Most users don't need to configure these " "settings." msgstr "" +"Le protocole LDAP offre des fonctionnalitĆ©s supplĆ©mentaires pour travailler " +"avec des groupes. La configuration des groupes est une fonctionnalitĆ© " +"avancĆ©e. La plupart des utilisateurs n'ont pas besoin de configurer ces " +"paramĆØtres." #: ../../administrator_documentation/configuration_docs/ldap.md:120 msgid "" "[Django's LDAP documentation](https://django-auth-" "ldap.readthedocs.io/en/latest/groups.html) for groups." msgstr "" +"[La documentation LDAP d Django](https://django-auth-ldap.readthedocs.io/en/" +"latest/groups.html) pour les groupes." #: ../../administrator_documentation/configuration_docs/ldap.md:124 msgid "" "The LDAP group search root {abbr}`DN (Distinguished Name)`. This needs to" " be set to `True` to enable group features." msgstr "" +"La racine de recherche du groupe LDAP {abbr}`DN (Distinguished Name)`. Ce " +"paramĆØtre doit ĆŖtre rĆ©glĆ© sur `True` pour activer les fonctions de groupe." #: ../../administrator_documentation/configuration_docs/ldap.md:133 msgid "The LDAP group filter." -msgstr "" +msgstr "Le filtre de groupe de LDAP." #: ../../administrator_documentation/configuration_docs/ldap.md:142 msgid "The group that users need to be a member of to authenticate." msgstr "" +"Le groupe dont les utilisateurs doivent ĆŖtre membres pour sā€™authentifier." #: ../../administrator_documentation/configuration_docs/ldap.md:151 msgid "A group whose members can't authenticate." -msgstr "" - +msgstr "Un groupe dont les membres ne peuvent pas sā€™authentifier." From 1ccf18412fd73ad350a315394122307799715dc2 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:46:37 +0000 Subject: [PATCH 131/371] Translated using Weblate (French) Currently translated at 100.0% (6 of 6 strings) Translation: Documentation/administrator-configuration-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-configuration-index/fr/ --- .../administrator/configuration/index.po | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po b/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po index 882f71d42..c2ead6351 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/administrator-configuration-index/fr/>\n" @@ -17,24 +17,24 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Environment file" -msgstr "" +msgstr "Fichier dā€™environnement" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Instance settings" -msgstr "" +msgstr "ParamĆØtres de lā€™instance" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Frontend customization" -msgstr "" +msgstr "Personnalisation de lā€™interface" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Configuration options" -msgstr "" +msgstr "Options de configuration" #: ../../administrator_documentation/configuration_docs/index.md:1 msgid "Configure your Funkwhale pod" @@ -46,3 +46,7 @@ msgid "" " range from server-level settings to user-specific settings. Check out " "the guides in this section to get started." msgstr "" +"Vous pouvez personnaliser de nombreux paramĆØtres relatifs Ć  votre pod " +"Funkwhale. Ceux-ci vont des paramĆØtres au niveau du serveur aux paramĆØtres " +"spĆ©cifiques Ć  l'utilisateur. Consultez les guides de cette section pour " +"commencer." From 11f7fa25aeaa3429dd4a508f4d0ccdf6a9e90e6d Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:50:42 +0000 Subject: [PATCH 132/371] Translated using Weblate (French) Currently translated at 7.6% (2 of 26 strings) Translation: Documentation/administrator-upgrade-docker Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-upgrade-docker/fr/ --- .../LC_MESSAGES/administrator/upgrade/docker.po | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po index f1afab3c8..b4ee5ed7b 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/upgrade/docker.md:1 @@ -41,13 +44,15 @@ msgstr "" #: ../../administrator/upgrade/docker.md:14 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre rĆ©pertoire Funkwhale." #: ../../administrator/upgrade/docker.md:20 msgid "" "Export the Funkwhale version you want to update to. You'll use this in " "the rest of the commands in this guide." msgstr "" +"Exportez la version de Funkwhale vers laquelle vous dĆ©sirez mettre Ć  jour. " +"Vous l'utiliserez dans les autres commandes de ce guide." #: ../../administrator/upgrade/docker.md:26 msgid "" @@ -153,4 +158,3 @@ msgstr "" #~ " [Docker guide](../installation_docs/docker.md), follow" #~ " these steps to upgrade." #~ msgstr "" - From 8de3c1489dd62c0861f596eebc238c1e977a2904 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:47:25 +0000 Subject: [PATCH 133/371] Translated using Weblate (French) Currently translated at 100.0% (17 of 17 strings) Translation: Documentation/administrator-upgrade-debian Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-upgrade-debian/fr/ --- .../administrator/upgrade/debian.po | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po index 1e41df85b..0f72b9028 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po @@ -3,99 +3,116 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/upgrade/debian.md:1 msgid "Upgrade your Debian Funkwhale installation" -msgstr "" +msgstr "Mettre votre installation Funkwhale sur Debian Ć  jour" #: ../../administrator/upgrade/debian.md:3 msgid "" "If you installed Funkwhale following the [Debian " "guide](../installation/debian.md), follow these steps to upgrade." msgstr "" +"Si vous avez installĆ© Funkwhale en suivant le [guide Debian](../installation/" +"debian.md), suivez ces Ć©tapes pour mettre Ć  jour." #: ../../administrator/upgrade/debian.md:5 msgid "Cleanup old funkwhale files" -msgstr "" +msgstr "Nettoyer les anciens fichiers Funkwhale" #: ../../administrator/upgrade/debian.md:7 msgid "Stop the Funkwhale services." -msgstr "" +msgstr "ArrĆŖtez les services Funkwhale." #: ../../administrator/upgrade/debian.md:13 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre rĆ©pertoire Funkwhale." #: ../../administrator/upgrade/debian.md:19 msgid "Remove the old files." -msgstr "" +msgstr "Supprimez les anciens fichiers." #: ../../administrator/upgrade/debian.md:25 msgid "Download Funkwhale" -msgstr "" +msgstr "TĆ©lĆ©charger Funkwhale" #: ../../administrator/upgrade/debian.md:27 msgid "" "Export the Funkwhale version you want to update to. You'll use this in " "the rest of the commands in this guide." msgstr "" +"Exportez la version de Funkwhale vers laquelle vous dĆ©sirez mettre Ć  jour. " +"Vous l'utiliserez dans les autres commandes de ce guide." #: ../../administrator/upgrade/debian.md:33 msgid "" "Follow the [Download Funkwhale](../installation/debian.md#3-download-" "funkwhale) instructions in the installation guide." msgstr "" +"Suivez les instructions de [TĆ©lĆ©chargement de Funkwhale](../installation/" +"debian.md#3-download-funkwhale) dans le guide dā€™installation." #: ../../administrator/upgrade/debian.md:35 msgid "" "Follow the [Install the Funkwhale API](../installation/debian.md#4" "-install-the-funkwhale-api) instructions in the installation guide." msgstr "" +"Suivez les instructions dā€™[installation de lā€™API Funkwhale](../installation/" +"debian.md#4-install-the-funkwhale-api) dans le guide dā€™installation." #: ../../administrator/upgrade/debian.md:37 msgid "Update your Funkwhale instance" -msgstr "" +msgstr "Mettre votre instance Funkwhale Ć  jour" #: ../../administrator/upgrade/debian.md:39 msgid "" "Once you have downloaded the new files, you can update your Funkwhale " "instance. To do this:" msgstr "" +"Une fois que vous avez tĆ©lĆ©chargĆ© les nouveaux fichiers, vous pouvez mettre " +"votre instance Funkwhale Ć  jour. Pour ce faire :" #: ../../administrator/upgrade/debian.md:41 msgid "Install or upgrade all OS dependencies using the dependencies script." msgstr "" +"Installez ou mettez Ć  jour toutes les dĆ©pendances systĆØme en utilisant notre " +"script de dĆ©pendances." #: ../../administrator/upgrade/debian.md:47 msgid "Collect the new static files to serve." -msgstr "" +msgstr "Collectez les nouveaux fichiers statiques Ć  servir." #: ../../administrator/upgrade/debian.md:53 msgid "Apply new database migrations." -msgstr "" +msgstr "Appliquer les nouvelles migrations de bases de donnĆ©es." #: ../../administrator/upgrade/debian.md:59 msgid "Restart the Funkwhale services." -msgstr "" +msgstr "RedĆ©marrez les services Funkwhale." #: ../../administrator/upgrade/debian.md:65 msgid "" "That's it! You've updated your Funkwhale pod. You should now see the new " "version running in your web browser." msgstr "" +"Cā€™est tout ! Vous avez mis Ć  jour votre pod Funkwhale. Vous devriez " +"dĆ©sormais voir la nouvelle version ĆŖtre exĆ©cutĆ©e dans votre navigateur web." #~ msgid "" #~ "If you installed Funkwhale following the" @@ -115,4 +132,3 @@ msgstr "" #~ "funkwhale-api) instructions in the " #~ "installation guide." #~ msgstr "" - From 499e1a83546d80dd95190e450f12cdf668fff05c Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 20:16:43 +0000 Subject: [PATCH 134/371] Translated using Weblate (French) Currently translated at 2.5% (1 of 40 strings) Translation: Documentation/developer-setup-gitpod Translate-URL: https://translate.funkwhale.audio/projects/documentation/developer-setup-gitpod/fr/ --- .../fr/LC_MESSAGES/developer/setup/gitpod.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po b/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po index 217267660..2ba9f254a 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po +++ b/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-setup-gitpod/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/setup/gitpod.md:1 @@ -150,7 +153,7 @@ msgstr "" #: ../../developer_documentation/setup/gitpod.md:46 #: ../../developer_documentation/setup/gitpod.md:64 msgid "Environment variables" -msgstr "" +msgstr "Variables dā€™environnement" #: ../../developer_documentation/setup/gitpod.md:49 #: ../../developer_documentation/setup/gitpod.md:67 @@ -211,4 +214,3 @@ msgstr "" #: ../../developer_documentation/setup/gitpod.md:72 msgid "`funkwhale/funkwhale`" msgstr "" - From 65ebb8d90e7dd47f3287ddd82a64e3b3559c74f7 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 135/371] Translated using Weblate (French) Currently translated at 11.4% (4 of 35 strings) Translation: Documentation/moderator-content-delete Translate-URL: https://translate.funkwhale.audio/projects/documentation/moderator-content-delete/fr/ --- .../fr/LC_MESSAGES/moderator/content/delete.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po b/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po index bd9d7b94a..b3f5c0821 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/moderator-content-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/content/delete_content.md:1 @@ -71,7 +70,7 @@ msgstr "Bureau" #: ../../moderator_documentation/content/delete_content.md:84 #: ../../moderator_documentation/content/delete_content.md:106 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../moderator_documentation/content/delete_content.md:34 #: ../../moderator_documentation/content/delete_content.md:85 @@ -165,7 +164,7 @@ msgstr "" #: ../../moderator_documentation/content/delete_content.md:47 #: ../../moderator_documentation/content/delete_content.md:68 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "SĆ©lectionnez {guilabel}`Supprimer`." #: ../../moderator_documentation/content/delete_content.md msgid "Mobile" From 358ce509a5e69911fdb6fe1ad3a98006fd4366d6 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 20:31:48 +0000 Subject: [PATCH 136/371] Translated using Weblate (French) Currently translated at 100.0% (18 of 18 strings) Translation: Documentation/contributor-translation Translate-URL: https://translate.funkwhale.audio/projects/documentation/contributor-translation/fr/ --- docs/locales/fr/LC_MESSAGES/contributor/translation.po | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/contributor/translation.po b/docs/locales/fr/LC_MESSAGES/contributor/translation.po index b212dd288..dabbfbe0f 100644 --- a/docs/locales/fr/LC_MESSAGES/contributor/translation.po +++ b/docs/locales/fr/LC_MESSAGES/contributor/translation.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/contributor-translation/fr/>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../contributor_documentation/translation.md:1 @@ -143,7 +143,6 @@ msgid "Use informal speech patterns, including contractions" msgstr "Utilisez des modes d'expression informels, y compris des contractions" #: ../../contributor_documentation/translation.md:30 -#, fuzzy msgid "" "Use sentence case for all content, including titles. For example: " "\"Language coordination\" rather than \"Language Coordination\"" From f34eb14c9a49f4064cc164891cd3e9278aa70119 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 137/371] Translated using Weblate (French) Currently translated at 36.8% (7 of 19 strings) Translation: Documentation/user-libraries-share Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-share/fr/ --- docs/locales/fr/LC_MESSAGES/user/libraries/share.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/share.po b/docs/locales/fr/LC_MESSAGES/user/libraries/share.po index e692acaec..a119bcc12 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/share.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/share.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-share/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/share_library.md:1 @@ -46,7 +45,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/share_library.md:44 #: ../../user_documentation/libraries/share_library.md:54 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user_documentation/libraries/share_library.md:14 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." From 92f73b175549ba830e2ee5b25bbeb1d995ca35a5 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:55:20 +0000 Subject: [PATCH 138/371] Translated using Weblate (French) Currently translated at 100.0% (21 of 21 strings) Translation: Documentation/user-libraries-follow Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-follow/fr/ --- .../fr/LC_MESSAGES/user/libraries/follow.po | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po b/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po index 6803dee21..7074fa6cd 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-follow/fr/>\n" "Language: fr\n" @@ -18,28 +17,32 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/follow_library.md:1 msgid "Follow a library" -msgstr "" +msgstr "Suivre une audiothĆØque" #: ../../user_documentation/libraries/follow_library.md:3 msgid "" "Follow a library to get access to its content. There are two ways to " "follow a library:" msgstr "" +"Suivez une audiothĆØque pour recevoir lā€™accĆØs Ć  ses contenus. Il y a deux " +"moyens pour suivre une audiothĆØque :" #: ../../user_documentation/libraries/follow_library.md:9 msgid "Use a sharing link" -msgstr "" +msgstr "Utiliser un lien de partage" #: ../../user_documentation/libraries/follow_library.md:11 msgid "" "If you've received a sharing link, you can use this to follow a library. " "To do this:" msgstr "" +"Si vous avez reƧu un lien de partage, vous pouvez lā€™utiliser pour suivre une " +"audiothĆØque. Pour ce faire :" #: ../../user_documentation/libraries/follow_library.md msgid "Desktop" @@ -49,7 +52,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/follow_library.md:31 #: ../../user_documentation/libraries/follow_library.md:50 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user_documentation/libraries/follow_library.md:20 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." @@ -63,6 +66,8 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Follow remote libraries`." " A screen appears showing you the libraries you are following." msgstr "" +"SĆ©lectionnez {guilabel}`DĆ©marrer` sous {guilabel}`Suivre des audiothĆØques " +"distantes`. Un Ć©cran apparaĆ®t vous montant les audiothĆØques que vous suivez." #: ../../user_documentation/libraries/follow_library.md:22 #: ../../user_documentation/libraries/follow_library.md:34 @@ -70,6 +75,8 @@ msgid "" "Paste the sharing link into the {guilabel}`Search a remote library` " "search bar." msgstr "" +"Collez le lien de partage dans la barre de recherche {guilabel}`Rechercher " +"une audiothĆØque distante`." #: ../../user_documentation/libraries/follow_library.md:23 #: ../../user_documentation/libraries/follow_library.md:35 @@ -77,6 +84,9 @@ msgid "" "Select the {guilabel}`Search` icon or hit {kbd}`āŽ Return` to search for " "the library. If the library exists, a library card appears." msgstr "" +"SĆ©lectionnez lā€™icĆ“ne {guilabel}`Rechercher` ou appuyer {kbd}`āŽ Retour` pour " +"rechercher lā€™audiothĆØque. Si lā€™audiothĆØque existe, une carte dā€™audiothĆØque " +"apparaĆ®t." #: ../../user_documentation/libraries/follow_library.md:24 #: ../../user_documentation/libraries/follow_library.md:36 @@ -85,6 +95,9 @@ msgid "" "level is {guilabel}`Nobody except me`, the owner needs to approve the " "request." msgstr "" +"SĆ©lectionnez {guilabel}`Suivre` sur la carte de lā€™audiothĆØque. Si le niveau " +"de confidentialitĆ© de lā€™audiothĆØque est {guilabel}`Personne Ć  part moi`, le " +"propriĆ©taire devra approuver la demande." #: ../../user_documentation/libraries/follow_library.md msgid "Mobile" @@ -92,46 +105,60 @@ msgstr "TĆ©lĆ©phone mobile" #: ../../user_documentation/libraries/follow_library.md:32 msgid "Select the upload icon ({fa}`upload`) at the top of the screen" -msgstr "" +msgstr "SĆ©lectionnez lā€™icĆ“ne de tĆ©lĆ©versement ({fa}`upload` en haut de lā€™Ć©cran" #: ../../user_documentation/libraries/follow_library.md:40 msgid "" "That's it! The server then scans the content and you can see it on your " "{term}`pod`." msgstr "" +"Cā€™est tout ! Le serveur va alors scanner le contenu et vous pouvez le voir " +"dans votre {term}`pod`." #: ../../user_documentation/libraries/follow_library.md:42 msgid "Follow from content on your pod" -msgstr "" +msgstr "Suivre depuis du contenu dans votre pod" #: ../../user_documentation/libraries/follow_library.md:45 msgid "" "You can only follow a library from content pages if its privacy level is " "not {guilabel}`Nobody except me`." msgstr "" +"Vous pouvez suivre une audiothĆØque depuis des pages de contenu seulement " +"lorsque son niveau de confidentialitĆ© nā€™est pas {guilabel}`Personne sauf " +"moi`." #: ../../user_documentation/libraries/follow_library.md:48 msgid "" "If a user on your {term}`pod` has already followed a library, you can " "find it by selecting content from that library. To do this:" msgstr "" +"Si un utilisateur de votre {term}`pod` a dĆ©jĆ  suivi une audiothĆØque, vous " +"pouvez la trouver en sĆ©lectionnant du contenu de cette audiothĆØque. Pour ce " +"faire :" #: ../../user_documentation/libraries/follow_library.md:51 msgid "Select a track, album, or artist from the library you want to follow." msgstr "" +"SĆ©lectionnez une piste, album, ou artiste depuis lā€™audiothĆØque que vous " +"dĆ©sirez suivre." #: ../../user_documentation/libraries/follow_library.md:52 msgid "" "Scroll to the bottom of the page. The library card appears in the " "{guilabel}`User libraries` section." msgstr "" +"Faites dĆ©filer la page jusquā€™en bas. La carte de lā€™audiothĆØque apparaĆ®t dans " +"la section {guilabel}`AudiothĆØques de lā€™utilisateur`." #: ../../user_documentation/libraries/follow_library.md:53 msgid "Select {guilabel}`Follow` on the library card." -msgstr "" +msgstr "SĆ©lectionnez {guilabel}`Suivre` sur la carte de lā€™audiothĆØque." #: ../../user_documentation/libraries/follow_library.md:55 msgid "" "You're done! The content will remain on the server even if the other user" " stops following the library." msgstr "" +"Cā€™est fait ! Le contenu va rester sur le serveur mĆŖme si lā€™autre utilisateur " +"arrĆŖte de suivre lā€™audiothĆØque." From 779a3ee717c23ded83e79ef89b9ed2b6aa219ae3 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 139/371] Translated using Weblate (French) Currently translated at 27.2% (6 of 22 strings) Translation: Documentation/user-libraries-create Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-create/fr/ --- docs/locales/fr/LC_MESSAGES/user/libraries/create.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/create.po b/docs/locales/fr/LC_MESSAGES/user/libraries/create.po index 3cf222cec..72563fc56 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/create.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-create/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/create_library.md:1 @@ -48,7 +47,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/create_library.md:17 #: ../../user_documentation/libraries/create_library.md:36 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user_documentation/libraries/create_library.md:18 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." From 06e49598a36e60f7bee98c980c5465abfd41e96f Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 20:38:52 +0000 Subject: [PATCH 140/371] Translated using Weblate (French) Currently translated at 100.0% (15 of 15 strings) Translation: Documentation/user-libraries-delete Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-delete/fr/ --- .../fr/LC_MESSAGES/user/libraries/delete.po | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po b/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po index f41cfd00a..69b45dae7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-delete/fr/>\n" "Language: fr\n" @@ -18,20 +17,22 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/delete_library.md:1 msgid "Delete a library" -msgstr "" +msgstr "Supprimer une audiothĆØque" #: ../../user_documentation/libraries/delete_library.md:4 msgid "Deleting a library also deletes all content in the library." msgstr "" +"Supprimer une audiothĆØque supprime aussi tout le contenu de cette " +"audiothĆØque." #: ../../user_documentation/libraries/delete_library.md:7 msgid "You can delete a library at any time. To do this:" -msgstr "" +msgstr "Vous pouvez supprimer une audiothĆØque Ć  tout moment. Pour ce faire :" #: ../../user_documentation/libraries/delete_library.md msgid "Desktop" @@ -79,12 +80,14 @@ msgstr "SĆ©lectionnez le bouton {guilabel}`āœŽ Modifier` en haut de l'Ć©cran." #: ../../user_documentation/libraries/delete_library.md:21 #: ../../user_documentation/libraries/delete_library.md:35 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "SĆ©lectionnez {guilabel}`Supprimer`." #: ../../user_documentation/libraries/delete_library.md:22 #: ../../user_documentation/libraries/delete_library.md:36 msgid "Select {guilabel}`Delete library` on the warning notice that appears." msgstr "" +"SĆ©lectionnez {guilabel}`Supprimer lā€™audiothĆØque` sur la notice de warning " +"qui apparaĆ®t." #: ../../user_documentation/libraries/delete_library.md msgid "Mobile" @@ -96,4 +99,4 @@ msgstr "SĆ©lectionnez l'icĆ“ne de ({fa}`tĆ©lĆ©versement`) en haut de l'Ć©cran." #: ../../user_documentation/libraries/delete_library.md:40 msgid "That's it! You've deleted your library and all its content." -msgstr "" +msgstr "Cā€™est tout ! Vous avez supprimĆ© votre audiothĆØque et tout son contenu." From 70c0a038fc4b542017035e5574dbf8166450d164 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 141/371] Translated using Weblate (French) Currently translated at 50.0% (9 of 18 strings) Translation: Documentation/user-libraries-content-delete Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-content-delete/fr/ --- .../fr/LC_MESSAGES/user/libraries/content/delete.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po index eba4e8ea0..a8048f55e 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-content-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/delete_content.md:1 @@ -43,7 +42,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/delete_content.md:15 #: ../../user_documentation/libraries/delete_content.md:32 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user_documentation/libraries/delete_content.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." From fd44d0bf122992fc48301f08a87a344d33079c49 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 142/371] Translated using Weblate (French) Currently translated at 37.5% (6 of 16 strings) Translation: Documentation/user-libraries-content-upload Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-content-upload/fr/ --- .../fr/LC_MESSAGES/user/libraries/content/upload.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po index 67fa8dfcf..48d929175 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-content-upload/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/libraries/content/upload.md:1 @@ -50,7 +49,7 @@ msgstr "Bureau" #: ../../user/libraries/content/upload.md:17 #: ../../user/libraries/content/upload.md:31 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user/libraries/content/upload.md:18 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." From ba365d672215792bc10ee22573711d32c3014387 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 143/371] Translated using Weblate (French) Currently translated at 50.0% (6 of 12 strings) Translation: Documentation/user-accounts-quota Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-accounts-quota/fr/ --- docs/locales/fr/LC_MESSAGES/user/accounts/quota.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po b/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po index d07eb2118..169d1fa00 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-accounts-quota/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/check_quota.md:1 @@ -49,7 +48,7 @@ msgstr "Bureau" #: ../../user_documentation/accounts/check_quota.md:15 #: ../../user_documentation/accounts/check_quota.md:26 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user_documentation/accounts/check_quota.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." @@ -86,4 +85,4 @@ msgstr "TĆ©lĆ©phone mobile" #: ../../user_documentation/accounts/check_quota.md:27 msgid "Select the upload icon ({fa}`upload`) at the top of the screen" -msgstr "" +msgstr "SĆ©lectionnez lā€™icĆ“ne de tĆ©lĆ©versement ({fa}`upload` en haut de lā€™Ć©cran" From 32db5e92a3669fe3f52b9d0282f8c823b303151b Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 20:36:01 +0000 Subject: [PATCH 144/371] Translated using Weblate (French) Currently translated at 100.0% (4 of 4 strings) Translation: Documentation/user-plugins-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-plugins-index/fr/ --- .../fr/LC_MESSAGES/user/plugins/index.po | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/plugins/index.po b/docs/locales/fr/LC_MESSAGES/user/plugins/index.po index 69177358d..af5d855ee 100644 --- a/docs/locales/fr/LC_MESSAGES/user/plugins/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/plugins/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-plugins-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/plugins/index.md:9 msgid "Core plugins" -msgstr "" +msgstr "Plugins principaux" #: ../../user_documentation/plugins/index.md:1 msgid "User plugins" -msgstr "" +msgstr "Plugins utilisateur" #: ../../user_documentation/plugins/index.md:4 msgid "" @@ -31,6 +34,9 @@ msgid "" "them. If you can't find the plugins mentioned here, contact your pod " "admin." msgstr "" +"Votre administarteur de {term}`pod <Pod>`doit permettre les plugins pour que " +"vous puissiez les utiliser. Si vous ne pouvez pas voir les plugins " +"mentionnĆ©s ici, veuillez contacter votre administrateur de pod." #: ../../user_documentation/plugins/index.md:7 msgid "" @@ -38,4 +44,7 @@ msgid "" "maintains core plugins to make your listening experience even better. " "Developers can create extra plugins to add features to a pod." msgstr "" - +"Utilisez des plugins pour Ć©tendre les fonctionnalitĆ©s de Funkwhale. Le " +"collectif Funkwhale maintient des plugins de base pour rendre votre " +"expĆ©rience d'Ć©coute encore meilleure. Les dĆ©veloppeurs peuvent crĆ©er des " +"plugins supplĆ©mentaires pour ajouter des fonctionnalitĆ©s Ć  un pod." From 6e46660d70fe07c837930d2aba03fe13c60c4b52 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 20:39:39 +0000 Subject: [PATCH 145/371] Translated using Weblate (French) Currently translated at 42.8% (6 of 14 strings) Translation: Documentation/user-channels-delete Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-channels-delete/fr/ --- docs/locales/fr/LC_MESSAGES/user/channels/delete.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/delete.po index bca7fcefe..4febbf7c1 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/delete_channel.md:1 @@ -81,7 +80,7 @@ msgstr "" #: ../../user_documentation/channels/delete_channel.md:21 #: ../../user_documentation/channels/delete_channel.md:34 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "SĆ©lectionnez {guilabel}`Supprimer`." #: ../../user_documentation/channels/delete_channel.md msgid "Mobile" From d44c29bedbff0171b7746c821447e5cd9fe2f2ef Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 146/371] Translated using Weblate (French) Currently translated at 16.6% (5 of 30 strings) Translation: Documentation/user-channels-create Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-channels-create/fr/ --- docs/locales/fr/LC_MESSAGES/user/channels/create.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/create.po b/docs/locales/fr/LC_MESSAGES/user/channels/create.po index 110670974..d8c9a3d67 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/create.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-create/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/create.md:1 @@ -58,7 +57,7 @@ msgstr "Bureau" #: ../../user/channels/create.md:25 ../../user/channels/create.md:42 #: ../../user/channels/create.md:68 ../../user/channels/create.md:90 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user/channels/create.md:26 ../../user/channels/create.md:69 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." From a4ea1a06b9ec3bb9ca9c2ce9cc7db17dbbfe18e5 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 147/371] Translated using Weblate (French) Currently translated at 19.2% (5 of 26 strings) Translation: Documentation/user-channels-artist-delete Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-channels-artist-delete/fr/ --- .../fr/LC_MESSAGES/user/channels/artist/delete.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po index 632e3d2d0..6b0866f92 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-artist-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/artist/delete.md:1 @@ -54,7 +53,7 @@ msgstr "Bureau" #: ../../user/channels/artist/delete.md:66 #: ../../user/channels/artist/delete.md:80 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user/channels/artist/delete.md:24 #: ../../user/channels/artist/delete.md:67 From d842243b3c507b7870fac1ec567d801d85174c1a Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 148/371] Translated using Weblate (French) Currently translated at 19.2% (5 of 26 strings) Translation: Documentation/user-channels-podcast-delete Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-channels-podcast-delete/fr/ --- .../fr/LC_MESSAGES/user/channels/podcast/delete.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po index 3a425b227..8cb0b0cc9 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-podcast-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/podcast/delete.md:1 @@ -54,7 +53,7 @@ msgstr "Bureau" #: ../../user/channels/podcast/delete.md:66 #: ../../user/channels/podcast/delete.md:80 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user/channels/podcast/delete.md:24 #: ../../user/channels/podcast/delete.md:67 From 516c281a57c08d9965ae5e82530113b65d7ea3c4 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 149/371] Translated using Weblate (French) Currently translated at 8.6% (5 of 58 strings) Translation: Documentation/user-channels-artist-upload Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-channels-artist-upload/fr/ --- .../fr/LC_MESSAGES/user/channels/artist/upload.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po b/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po index b424642d0..044342672 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-artist-upload/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/artist/upload.md:1 @@ -57,7 +56,7 @@ msgstr "Bureau" #: ../../user/channels/artist/upload.md:129 #: ../../user/channels/artist/upload.md:147 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user/channels/artist/upload.md:22 #: ../../user/channels/artist/upload.md:71 From 259fb1b61d33c09bd0977c1013c1f27277443a58 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:56:57 +0000 Subject: [PATCH 150/371] Translated using Weblate (French) Currently translated at 8.6% (5 of 58 strings) Translation: Documentation/user-channels-podcast-upload Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-channels-podcast-upload/fr/ --- .../fr/LC_MESSAGES/user/channels/podcast/upload.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po index fc36be23e..49b4ab930 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-podcast-upload/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/podcast/upload.md:1 @@ -57,7 +56,7 @@ msgstr "Bureau" #: ../../user/channels/podcast/upload.md:129 #: ../../user/channels/podcast/upload.md:147 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous Ć  votre pod." #: ../../user/channels/podcast/upload.md:22 #: ../../user/channels/podcast/upload.md:71 From 3ee6ba66581a4c7e1876799fa325edddca60cd48 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 4 Dec 2023 15:56:12 +0000 Subject: [PATCH 151/371] fix(deploy): Serve staticfiles in bare metal deployments Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2665> --- changes/changelog.d/2256.bugfix | 1 + deploy/nginx.template | 3 +++ templates/nginx.conf.j2 | 5 +++++ 3 files changed, 9 insertions(+) create mode 100644 changes/changelog.d/2256.bugfix diff --git a/changes/changelog.d/2256.bugfix b/changes/changelog.d/2256.bugfix new file mode 100644 index 000000000..9d9d2c5ea --- /dev/null +++ b/changes/changelog.d/2256.bugfix @@ -0,0 +1 @@ +Fix regression that prevent static files from being served in non-docker-deployments (#2256) diff --git a/deploy/nginx.template b/deploy/nginx.template index c77cb9335..d306f8af4 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -192,4 +192,7 @@ server { return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + location /staticfiles/ { + alias ${STATIC_ROOT}/; + } } diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 index ab8ea05d9..6dca6c1f4 100644 --- a/templates/nginx.conf.j2 +++ b/templates/nginx.conf.j2 @@ -261,5 +261,10 @@ server { alias /usr/share/nginx/html/staticfiles/; } {% endif %} +{% if not config.reverse_proxy and not config.inside_docker %} + location /staticfiles/ { + alias ${STATIC_ROOT}/; + } +{% endif %} {% endif %} } From 4cbce95bcb5e869c11a2f2720d11f1823f6a6312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Tue, 5 Dec 2023 18:23:46 +0100 Subject: [PATCH 152/371] fix(docs): Fix postgres upgrade instructions Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2669> --- docs/administrator/migration.md | 4 ++-- docs/administrator/upgrade/docker.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/administrator/migration.md b/docs/administrator/migration.md index bed397286..b15d11b9a 100644 --- a/docs/administrator/migration.md +++ b/docs/administrator/migration.md @@ -126,6 +126,6 @@ Check the file and remove any duplicated settings after copying. Once you have imported your database and run migrations, you can start all containers. -```{code-block} sh -sudo docker compose up -d +```console +# docker compose up -d ``` diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md index 8bbfe5adf..d9ed5698d 100644 --- a/docs/administrator/upgrade/docker.md +++ b/docs/administrator/upgrade/docker.md @@ -136,8 +136,8 @@ To update your Postgres container, follow these steps: Once you've updated your Postgres containers, you need to migrate your database. To do this: :::{include} /administrator/migration.md -:start-line: 112 -:end-line: 129 +:start-line: 105 +:end-line: 132 ::: :::{seealso} From 08bfc93243a94258f6616fb3c552935bfe7c3584 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Wed, 6 Dec 2023 09:35:39 +0000 Subject: [PATCH 153/371] chore(api): update dependency pylint-django to v2.5.5 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2671> --- api/poetry.lock | 17 ++++++++--------- api/pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 6f26e3e01..49a8fa11c 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2841,22 +2841,21 @@ testutils = ["gitpython (>3)"] [[package]] name = "pylint-django" -version = "2.5.3" +version = "2.5.5" description = "A Pylint plugin to help Pylint understand the Django web framework" optional = false -python-versions = "*" +python-versions = ">=3.7,<4.0" files = [ - {file = "pylint-django-2.5.3.tar.gz", hash = "sha256:0ac090d106c62fe33782a1d01bda1610b761bb1c9bf5035ced9d5f23a13d8591"}, - {file = "pylint_django-2.5.3-py3-none-any.whl", hash = "sha256:56b12b6adf56d548412445bd35483034394a1a94901c3f8571980a13882299d5"}, + {file = "pylint_django-2.5.5-py3-none-any.whl", hash = "sha256:5abd5c2228e0e5e2a4cb6d0b4fc1d1cef1e773d0be911412f4dd4fc1a1a440b7"}, + {file = "pylint_django-2.5.5.tar.gz", hash = "sha256:2f339e4bf55776958283395c5139c37700c91bd5ef1d8251ef6ac88b5abbba9b"}, ] [package.dependencies] -pylint = ">=2.0,<3" -pylint-plugin-utils = ">=0.7" +pylint = ">=2.0,<4" +pylint-plugin-utils = ">=0.8" [package.extras] -for-tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] -with-django = ["Django"] +with-django = ["Django (>=2.2)"] [[package]] name = "pylint-plugin-utils" @@ -4561,4 +4560,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "b251e922767001921d8d302b47cc6f66f099daaf3a325e7ef98ab6cb3ccd5b36" +content-hash = "91948dbd01795023e068115ed7f26ce5f1810565f26ca227740568607143480b" diff --git a/api/pyproject.toml b/api/pyproject.toml index 5740d5c3f..3f6d6c032 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -121,7 +121,7 @@ pytest-randomly = "==3.12.0" pytest-sugar = "==0.9.7" requests-mock = "==1.10.0" pylint = "==2.17.7" -pylint-django = "==2.5.3" +pylint-django = "==2.5.5" django-extensions = "==3.2.3" [tool.poetry.extras] From b21e241f37c8d5fb9535025fd61c3bec900ce4f1 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 5 Dec 2023 08:31:32 +0000 Subject: [PATCH 154/371] fix(gitpod): Properly serve media files, statics and fix proxy to API Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2667> --- .gitpod/docker-compose.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitpod/docker-compose.yml b/.gitpod/docker-compose.yml index fed79498d..62b5f5930 100644 --- a/.gitpod/docker-compose.yml +++ b/.gitpod/docker-compose.yml @@ -28,15 +28,16 @@ services: environment: - "NGINX_MAX_BODY_SIZE=100M" - "FUNKWHALE_API_IP=host.docker.internal" + - "FUNKWHALE_API_HOST=host.docker.internal" - "FUNKWHALE_API_PORT=5000" - "FUNKWHALE_FRONT_IP=host.docker.internal" - "FUNKWHALE_FRONT_PORT=8080" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}" - "FUNKWHALE_PROTOCOL=https" volumes: - - ../data/media:/protected/media:ro + - ../data/media:/workspace/funkwhale/data/media:ro - ../data/music:/music:ro - - ../data/staticfiles:/staticfiles:ro + - ../data/staticfiles:/usr/share/nginx/html/staticfiles/:ro - ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - ../docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - ../front:/frontend:ro From 86ce4cfd7c2ecf5a11bd2ab51cae1a8405ff0b8b Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 5 Dec 2023 08:31:55 +0000 Subject: [PATCH 155/371] fix(gitpod): Make sure jinja2 and towncrier are available Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2667> --- .gitpod/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 2761f490c..d996a8a13 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -6,6 +6,6 @@ RUN sudo apt update -y \ RUN pyenv install 3.11 && pyenv global 3.11 -RUN pip install poetry pre-commit \ +RUN pip install poetry pre-commit jinja2 towncrier \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true From 17e08fd332164aaded21d5501a989939aa4836b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Tue, 5 Dec 2023 12:29:33 +0000 Subject: [PATCH 156/371] fix(docs): Update env file for Unix socket Added note to the CACHE_URL variable to clarify Unix socket usage Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2668> --- api/config/settings/common.py | 4 ++-- deploy/env.prod.sample | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index 2ea42cd5c..b7040a707 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -830,7 +830,7 @@ If you're using password auth (the extra slash is important) .. note:: If you want to use Redis over unix sockets, you also need to update - :attr:`CELERY_BROKER_URL`, because the scheme differ from the one used by + :attr:`CELERY_BROKER_URL`, because the scheme differs from the one used by :attr:`CACHE_URL`. """ @@ -881,7 +881,7 @@ to use a different server or use Redis sockets to connect. Example: -- ``redis://127.0.0.1:6379/0`` +- ``unix://127.0.0.1:6379/0`` - ``redis+socket:///run/redis/redis.sock?virtual_host=0`` """ diff --git a/deploy/env.prod.sample b/deploy/env.prod.sample index 0ff7a5be1..1ea36c651 100644 --- a/deploy/env.prod.sample +++ b/deploy/env.prod.sample @@ -99,7 +99,7 @@ REVERSE_PROXY_TYPE=nginx # # If you want to use Redis over unix sockets, you'll actually need two variables: # For the cache part: -# CACHE_URL=redis:///run/redis/redis.sock?db=0 +# CACHE_URL=unix:///run/redis/redis.sock?db=0 # For the Celery/asynchronous tasks part: # CELERY_BROKER_URL=redis+socket:///run/redis/redis.sock?virtual_host=0 From b46aa638bcb01bd1dc62ca090eea5ed775861ed6 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 8 Dec 2023 15:17:02 +0000 Subject: [PATCH 157/371] chore(api): update dependency unidecode to v1.3.7 --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 49a8fa11c..24e99d160 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3958,13 +3958,13 @@ unidecode = "*" [[package]] name = "unidecode" -version = "1.3.6" +version = "1.3.7" description = "ASCII transliterations of Unicode text" optional = false python-versions = ">=3.5" files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, + {file = "Unidecode-1.3.7-py3-none-any.whl", hash = "sha256:663a537f506834ed836af26a81b210d90cbde044c47bfbdc0fbbc9f94c86a6e4"}, + {file = "Unidecode-1.3.7.tar.gz", hash = "sha256:3c90b4662aa0de0cb591884b934ead8d2225f1800d8da675a7750cbc3bd94610"}, ] [[package]] @@ -4560,4 +4560,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "91948dbd01795023e068115ed7f26ce5f1810565f26ca227740568607143480b" +content-hash = "8cf23fde49eb9cb312f44caa17126dfc5e5a90ed39eeb75d36497ace783a2530" diff --git a/api/pyproject.toml b/api/pyproject.toml index 3f6d6c032..3020319d2 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -86,7 +86,7 @@ sentry-sdk = "==1.19.1" watchdog = "==2.2.1" troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", tag = "v-2023-10-30.0"} lb-matching-tools = { git = "https://github.com/metabrainz/listenbrainz-matching-tools.git", branch = "main"} -unidecode = "==1.3.6" +unidecode = "==1.3.7" pycountry = "22.3.5" # Typesense From e11a6cea028e52b2bace4674181eed07b143e6b0 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 11:17:48 +0000 Subject: [PATCH 158/371] chore(api): update dependency python-ldap to v3.4.4 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2674> --- api/poetry.lock | 6 +++--- api/pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 24e99d160..c4f7b3498 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3096,12 +3096,12 @@ cli = ["click (>=5.0)"] [[package]] name = "python-ldap" -version = "3.4.3" +version = "3.4.4" description = "Python modules for implementing LDAP clients" optional = false python-versions = ">=3.6" files = [ - {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, + {file = "python-ldap-3.4.4.tar.gz", hash = "sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828"}, ] [package.dependencies] @@ -4560,4 +4560,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "8cf23fde49eb9cb312f44caa17126dfc5e5a90ed39eeb75d36497ace783a2530" +content-hash = "fb841fc0c0b0259bb81716fb1fde9c2c8a3822e2a13b8d7e8c1bae65e47b7ace" diff --git a/api/pyproject.toml b/api/pyproject.toml index 3020319d2..334579703 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -51,7 +51,7 @@ redis = "==4.5.5" # Django LDAP django-auth-ldap = "==4.1.0" -python-ldap = "==3.4.3" +python-ldap = "==3.4.4" # Channels channels = { extras = ["daphne"], version = "==4.0.0" } From 80b49064384e6452eed3a4f91e584d51b06d2e27 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sat, 9 Dec 2023 13:55:51 +0000 Subject: [PATCH 159/371] chore(renovate): Disable automerge since it is prevented by our Gitlab settings --- .gitlab/renovate.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitlab/renovate.json b/.gitlab/renovate.json index d4bdfb247..9b453909a 100644 --- a/.gitlab/renovate.json +++ b/.gitlab/renovate.json @@ -35,12 +35,6 @@ "matchBaseBranches": ["stable"], "enabled": false }, - { - "matchUpdateTypes": ["patch", "pin", "digest"], - "matchBaseBranches": ["develop"], - "automerge": true, - "automergeType": "branch" - }, { "matchManagers": ["npm"], "addLabels": ["Area::Frontend"] From 793fc31e134d649ec3e5829fcc6eab510ecd2619 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 14:09:43 +0000 Subject: [PATCH 160/371] chore(docs): update dependency django to v3.2.23 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2676> --- docs/poetry.lock | 32 ++++++++++++++++---------------- docs/pyproject.toml | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index b20c7bbe5..3e1392bfe 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -71,8 +71,8 @@ optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] -name = "Django" -version = "3.2.20" +name = "django" +version = "3.2.23" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false @@ -179,7 +179,7 @@ mdurl = ">=0.1,<1.0" [package.extras] benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code_style = ["pre-commit (>=3.0,<4.0)"] +code-style = ["pre-commit (>=3.0,<4.0)"] compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] @@ -207,7 +207,7 @@ python-versions = ">=3.7" markdown-it-py = ">=1.0.0,<3.0.0" [package.extras] -code_style = ["pre-commit"] +code-style = ["pre-commit"] rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] @@ -236,7 +236,7 @@ pyyaml = "*" sphinx = ">=5,<7" [package.extras] -code_style = ["pre-commit (>=3.0,<4.0)"] +code-style = ["pre-commit (>=3.0,<4.0)"] linkify = ["linkify-it-py (>=1.0,<2.0)"] rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] @@ -293,7 +293,7 @@ urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" @@ -384,7 +384,7 @@ python-versions = ">=3.7" sphinx = ">=1.8" [package.extras] -code_style = ["pre-commit (==2.12.1)"] +code-style = ["pre-commit (==2.12.1)"] rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] [[package]] @@ -399,13 +399,13 @@ python-versions = ">=3.7" sphinx = ">=4,<6" [package.extras] -code_style = ["pre-commit (>=2.12,<3.0)"] +code-style = ["pre-commit (>=2.12,<3.0)"] rtd = ["myst-parser (>=0.18.0,<0.19.0)"] testing = ["myst-parser (>=0.18.0,<0.19.0)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] -theme_furo = ["furo (>=2022.06.04,<2022.07)"] -theme_pydata = ["pydata-sphinx-theme (>=0.9.0,<0.10.0)"] -theme_rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] -theme_sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] +theme-furo = ["furo (>=2022.06.04,<2022.07)"] +theme-pydata = ["pydata-sphinx-theme (>=0.9.0,<0.10.0)"] +theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] +theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] [[package]] name = "sphinx-intl" @@ -576,7 +576,7 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "dbd54a5a67c078888da718f27a2d25cc3b012cb42f9f20ff42b0d094aa86e499" +content-hash = "ece2cc9c958fc0ba6daf1213b80e849dc9357d5fd8bdd09d436dfbf605dccd7c" [metadata.files] alabaster = [ @@ -695,9 +695,9 @@ colorama = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -Django = [ - {file = "Django-3.2.20-py3-none-any.whl", hash = "sha256:a477ab326ae7d8807dc25c186b951ab8c7648a3a23f9497763c37307a2b5ef87"}, - {file = "Django-3.2.20.tar.gz", hash = "sha256:dec2a116787b8e14962014bf78e120bba454135108e1af9e9b91ade7b2964c40"}, +django = [ + {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, + {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, ] django-environ = [ {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, diff --git a/docs/pyproject.toml b/docs/pyproject.toml index e4924b661..c576081a4 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -16,7 +16,7 @@ sphinx-rtd-theme = "==1.1.1" sphinxcontrib-mermaid = "0.7.1" myst-parser = "1.0.0" -django = "==3.2.20" +django = "==3.2.23" django-environ = "==0.10.0" [tool.poetry.group.dev.dependencies] From b6c906bf7ca19d2b406bf25961f12473454d863c Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 14:10:28 +0000 Subject: [PATCH 161/371] chore(front): update dependency @types/diff to v5.0.9 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2677> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 29ffdf3eb..32cbdbbbe 100644 --- a/front/package.json +++ b/front/package.json @@ -59,7 +59,7 @@ "devDependencies": { "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "0.8.2", - "@types/diff": "5.0.3", + "@types/diff": "5.0.9", "@types/dompurify": "2.4.0", "@types/jquery": "3.5.16", "@types/lodash-es": "4.17.7", diff --git a/front/yarn.lock b/front/yarn.lock index 0fbca9276..9cb561ffc 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1685,10 +1685,10 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== -"@types/diff@5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.3.tgz#1f89e49ff83b5d200d78964fb896c68498ce1828" - integrity sha512-amrLbRqTU9bXMCc6uX0sWpxsQzRIo9z6MJPkH1pkez/qOxuqSZVuryJAWoBRq94CeG8JxY+VK4Le9HtjQR5T9A== +"@types/diff@5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" + integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ== "@types/dompurify@2.4.0": version "2.4.0" From 1c93460ffb3121be091210ad625c87db153fa3c0 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 15:07:55 +0000 Subject: [PATCH 162/371] chore(front): update dependency @types/jquery to v3.5.29 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2678> --- front/package.json | 2 +- front/yarn.lock | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/front/package.json b/front/package.json index 32cbdbbbe..271188d1a 100644 --- a/front/package.json +++ b/front/package.json @@ -61,7 +61,7 @@ "@intlify/unplugin-vue-i18n": "0.8.2", "@types/diff": "5.0.9", "@types/dompurify": "2.4.0", - "@types/jquery": "3.5.16", + "@types/jquery": "3.5.29", "@types/lodash-es": "4.17.7", "@types/moxios": "0.4.15", "@types/qs": "6.9.7", diff --git a/front/yarn.lock b/front/yarn.lock index 9cb561ffc..6e9407b46 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1720,20 +1720,13 @@ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== -"@types/jquery@*": +"@types/jquery@*", "@types/jquery@3.5.29": version "3.5.29" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== dependencies: "@types/sizzle" "*" -"@types/jquery@3.5.16": - version "3.5.16" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.16.tgz#632131baf30951915b0317d48c98e9890bdf051d" - integrity sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw== - dependencies: - "@types/sizzle" "*" - "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" From 6234dfd2a7eca6dce38999236bbbc5a7b9340f0e Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 15:36:10 +0000 Subject: [PATCH 163/371] chore(front): update dependency @types/lodash-es to v4.17.12 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2679> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 271188d1a..7e49fa617 100644 --- a/front/package.json +++ b/front/package.json @@ -62,7 +62,7 @@ "@types/diff": "5.0.9", "@types/dompurify": "2.4.0", "@types/jquery": "3.5.29", - "@types/lodash-es": "4.17.7", + "@types/lodash-es": "4.17.12", "@types/moxios": "0.4.15", "@types/qs": "6.9.7", "@types/semantic-ui": "2.2.7", diff --git a/front/yarn.lock b/front/yarn.lock index 6e9407b46..420c58554 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1737,10 +1737,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash-es@4.17.7": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.7.tgz#22edcae9f44aff08546e71db8925f05b33c7cc40" - integrity sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ== +"@types/lodash-es@4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== dependencies: "@types/lodash" "*" From 46531884b36cd83ad2296074ffa6f9f3656fb6bc Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 16:08:41 +0000 Subject: [PATCH 164/371] chore(front): update dependency @types/moxios to v0.4.17 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2680> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 7e49fa617..1b2bcc5da 100644 --- a/front/package.json +++ b/front/package.json @@ -63,7 +63,7 @@ "@types/dompurify": "2.4.0", "@types/jquery": "3.5.29", "@types/lodash-es": "4.17.12", - "@types/moxios": "0.4.15", + "@types/moxios": "0.4.17", "@types/qs": "6.9.7", "@types/semantic-ui": "2.2.7", "@types/showdown": "2.0.0", diff --git a/front/yarn.lock b/front/yarn.lock index 420c58554..de41c7d33 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1754,10 +1754,10 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -"@types/moxios@0.4.15": - version "0.4.15" - resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.15.tgz#d8b774f360ba652801b5807e0833f6ff30a17770" - integrity sha512-eHD7i0/Uu7pFGzS4uIed2InJLj5H6xOOsqPjGtRyvyC/jnzRt6q6Xtnm2PQlkcqKHjRybEqjw71dcPnzfDouhw== +"@types/moxios@0.4.17": + version "0.4.17" + resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.17.tgz#3a2084b9b11713dde0da8c681db642936d3edf40" + integrity sha512-Ef7VE+vfISBbxWMOl40doJpHGpy5lTYJQwWHAy9ah1lrRnsVd+eNt6NjJ2QTAotHpQ7krVrZ3lp8hnxUxvdGuw== dependencies: axios ">=0.13.0" From 2aa301387c0a0d24ada613849a9848382d3e8f78 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 16:37:05 +0000 Subject: [PATCH 165/371] chore(front): update dependency @types/qs to v6.9.10 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2681> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 1b2bcc5da..60613e282 100644 --- a/front/package.json +++ b/front/package.json @@ -64,7 +64,7 @@ "@types/jquery": "3.5.29", "@types/lodash-es": "4.17.12", "@types/moxios": "0.4.17", - "@types/qs": "6.9.7", + "@types/qs": "6.9.10", "@types/semantic-ui": "2.2.7", "@types/showdown": "2.0.0", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", diff --git a/front/yarn.lock b/front/yarn.lock index de41c7d33..3acf8ef30 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1783,10 +1783,10 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== -"@types/qs@6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/qs@6.9.10": + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== "@types/resolve@1.17.1": version "1.17.1" From 0b03bd6c8988df35a3c205d21159cd4346059146 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 17:09:31 +0000 Subject: [PATCH 166/371] chore(front): update dependency @types/semantic-ui to v2.2.9 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2682> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 60613e282..7f43b8f53 100644 --- a/front/package.json +++ b/front/package.json @@ -65,7 +65,7 @@ "@types/lodash-es": "4.17.12", "@types/moxios": "0.4.17", "@types/qs": "6.9.10", - "@types/semantic-ui": "2.2.7", + "@types/semantic-ui": "2.2.9", "@types/showdown": "2.0.0", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", "@typescript-eslint/eslint-plugin": "5.48.2", diff --git a/front/yarn.lock b/front/yarn.lock index 3acf8ef30..c714cdb45 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1939,10 +1939,10 @@ dependencies: "@types/jquery" "*" -"@types/semantic-ui@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.7.tgz#4ae4242004aac11a21133d4f338e868b92605270" - integrity sha512-Uj6rby2GnuVyO7pj8vgUFsv5eaxb0ktpfasYcB/vXnSAeJ4cRjIOvxka+EoPjw3tPCY4/WlxRss8hsh7kRWzQg== +"@types/semantic-ui@2.2.9": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.9.tgz#9616e7a4e05c1eac421d7bbe464467b2611047b9" + integrity sha512-VS7BTgdQEzv1D+E/b9Y795b/i0AZ4bSgzZhSASVtvzudxU8sufXdFHazPGtBgVH8IoLkPoYNoNkgQ1Q3aFEi6g== dependencies: "@types/jquery" "*" "@types/semantic-ui-accordion" "*" From 07f665cb8ba0b884ac54b454212a1dc48ca946f2 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 17:35:36 +0000 Subject: [PATCH 167/371] chore(front): update dependency @types/showdown to v2.0.6 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2683> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 7f43b8f53..904b9aaec 100644 --- a/front/package.json +++ b/front/package.json @@ -66,7 +66,7 @@ "@types/moxios": "0.4.17", "@types/qs": "6.9.10", "@types/semantic-ui": "2.2.9", - "@types/showdown": "2.0.0", + "@types/showdown": "2.0.6", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", "@typescript-eslint/eslint-plugin": "5.48.2", "@vitejs/plugin-vue": "4.2.3", diff --git a/front/yarn.lock b/front/yarn.lock index c714cdb45..ccba24294 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1971,10 +1971,10 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== -"@types/showdown@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.0.tgz#3e800eca8573848cac4e5555f4377ba3a0e7b1f2" - integrity sha512-70xBJoLv+oXjB5PhtA8vo7erjLDp9/qqI63SRHm4REKrwuPOLs8HhXwlZJBJaB4kC18cCZ1UUZ6Fb/PLFW4TCA== +"@types/showdown@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.6.tgz#3d7affd5f971b4a17783ec2b23b4ad3b97477b7e" + integrity sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ== "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" From 02fd31d3214a10c523204bb4f2da6dc735afbaad Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 18:08:10 +0000 Subject: [PATCH 168/371] chore(front): update dependency @vue/eslint-config-typescript to v11.0.3 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2684> --- front/package.json | 2 +- front/yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/front/package.json b/front/package.json index 904b9aaec..0d3db2862 100644 --- a/front/package.json +++ b/front/package.json @@ -74,7 +74,7 @@ "@vue-macros/volar": "0.13.3", "@vue/compiler-sfc": "3.3.2", "@vue/eslint-config-standard": "8.0.1", - "@vue/eslint-config-typescript": "11.0.2", + "@vue/eslint-config-typescript": "11.0.3", "@vue/test-utils": "2.2.7", "@vue/tsconfig": "0.1.3", "axios-mock-adapter": "1.21.4", diff --git a/front/yarn.lock b/front/yarn.lock index ccba24294..dcd19467d 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -2023,7 +2023,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^5.0.0": +"@typescript-eslint/eslint-plugin@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== @@ -2039,7 +2039,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.0.0": +"@typescript-eslint/parser@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -2598,14 +2598,14 @@ eslint-plugin-n "^15.2.4" eslint-plugin-promise "^6.0.0" -"@vue/eslint-config-typescript@11.0.2": - version "11.0.2" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz#03353f404d4472900794e653450bb6623de3c642" - integrity sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw== +"@vue/eslint-config-typescript@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz#c720efa657d102cd2945bc54b4a79f35d57f6307" + integrity sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw== dependencies: - "@typescript-eslint/eslint-plugin" "^5.0.0" - "@typescript-eslint/parser" "^5.0.0" - vue-eslint-parser "^9.0.0" + "@typescript-eslint/eslint-plugin" "^5.59.1" + "@typescript-eslint/parser" "^5.59.1" + vue-eslint-parser "^9.1.1" "@vue/language-core@1.8.8": version "1.8.8" @@ -7072,7 +7072,7 @@ vue-demi@^0.12.5: resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== -vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1: version "9.3.2" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== From c6aec56e71ee1439e94195a53e9564291a970627 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 20:07:17 +0000 Subject: [PATCH 169/371] chore(front): update dependency standardized-audio-context to v25.3.60 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2685> --- front/package.json | 2 +- front/yarn.lock | 31 +++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/front/package.json b/front/package.json index 0d3db2862..0669552fa 100644 --- a/front/package.json +++ b/front/package.json @@ -39,7 +39,7 @@ "moment": "2.29.4", "showdown": "2.1.0", "stacktrace-js": "2.0.2", - "standardized-audio-context": "25.3.58", + "standardized-audio-context": "25.3.60", "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", diff --git a/front/yarn.lock b/front/yarn.lock index dcd19467d..2b2726f92 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -925,13 +925,20 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.4", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.4", "@babel/runtime@^7.8.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" + integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -3036,7 +3043,7 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -automation-events@^6.0.1, automation-events@^6.0.11, automation-events@^6.0.12: +automation-events@^6.0.1, automation-events@^6.0.12: version "6.0.12" resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.12.tgz#1f369af5f5c1c4b0cae24abdf1535cbc56a37ad4" integrity sha512-XSuK8udXMrHn24PvCuBNGWP6vXgSkCscCl9RokPmKhN/VQUdzuG2inZ03+UU86R1r6p6OCO30yWSPioBPxCXiQ== @@ -3044,6 +3051,14 @@ automation-events@^6.0.1, automation-events@^6.0.11, automation-events@^6.0.12: "@babel/runtime" "^7.23.4" tslib "^2.6.2" +automation-events@^6.0.13: + version "6.0.13" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.13.tgz#dcaba831b959a45f05401dec374dba71618564d5" + integrity sha512-V1D19taPDEB7LUph6FpJv9m2i+UpLR096sAbPKt92sRChCOA6Jt2bcofU/YAwG8F8/qZp3GrrscJ1FzaEHd68w== + dependencies: + "@babel/runtime" "^7.23.5" + tslib "^2.6.2" + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" @@ -6420,13 +6435,13 @@ standardized-audio-context-mock@9.6.18: tslib "^2.5.0" vehicles "^9.0.1" -standardized-audio-context@25.3.58: - version "25.3.58" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.58.tgz#6c5c61cfe25eb4b9f3a9f8cf43dc4991e7eb362d" - integrity sha512-1p5wVGiy4MfmhEt9MRY8yjZdkX+fi5jMxG1lqnAS1YmLUpE9VrOowxSINQ9Gjs89dFZMaENVwcMSPeQCjlz90Q== +standardized-audio-context@25.3.60: + version "25.3.60" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.60.tgz#f37a0e35bac7ca230dd44fc66efb28949f6bb864" + integrity sha512-h4ntLsHqnRESxyuU4C5/gvZTBqjBw1SoAR5lsQbqXPI4R3KKZTJWnMMpnRdiySr7cXokbEcepaPGGQ1V+UwlLw== dependencies: - "@babel/runtime" "^7.23.2" - automation-events "^6.0.11" + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" tslib "^2.6.2" standardized-audio-context@^25.3.46: From ba3300a68245b7ceac87e8af832217c487528651 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sat, 9 Dec 2023 21:05:29 +0000 Subject: [PATCH 170/371] chore(front): update dependency standardized-audio-context-mock to v9.6.32 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2686> --- front/package.json | 2 +- front/yarn.lock | 61 +++++++++++++++++----------------------------- 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/front/package.json b/front/package.json index 0669552fa..e56ed387f 100644 --- a/front/package.json +++ b/front/package.json @@ -92,7 +92,7 @@ "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", "sinon": "15.0.2", - "standardized-audio-context-mock": "9.6.18", + "standardized-audio-context-mock": "9.6.32", "typescript": "4.9.5", "unplugin-vue-macros": "2.4.6", "utility-types": "3.10.0", diff --git a/front/yarn.lock b/front/yarn.lock index 2b2726f92..754495bee 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -925,7 +925,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.4", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== @@ -3043,14 +3043,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -automation-events@^6.0.1, automation-events@^6.0.12: - version "6.0.12" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.12.tgz#1f369af5f5c1c4b0cae24abdf1535cbc56a37ad4" - integrity sha512-XSuK8udXMrHn24PvCuBNGWP6vXgSkCscCl9RokPmKhN/VQUdzuG2inZ03+UU86R1r6p6OCO30yWSPioBPxCXiQ== - dependencies: - "@babel/runtime" "^7.23.4" - tslib "^2.6.2" - automation-events@^6.0.13: version "6.0.13" resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.13.tgz#dcaba831b959a45f05401dec374dba71618564d5" @@ -6290,10 +6282,10 @@ sinon@15.0.2: nise "^5.1.4" supports-color "^7.2.0" -sinon@^15.0.4: - version "15.2.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.2.0.tgz#5e44d4bc5a9b5d993871137fd3560bebfac27565" - integrity sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw== +sinon@^16.0.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.1.3.tgz#b760ddafe785356e2847502657b4a0da5501fba8" + integrity sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA== dependencies: "@sinonjs/commons" "^3.0.0" "@sinonjs/fake-timers" "^10.3.0" @@ -6423,19 +6415,19 @@ stacktrace-js@2.0.2: stack-generator "^2.0.5" stacktrace-gps "^3.0.4" -standardized-audio-context-mock@9.6.18: - version "9.6.18" - resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.18.tgz#0b2dc9039a0f923a64012cf53407072a7e05c62e" - integrity sha512-yUaPX9qdRRKTxkS9h3QvKd+OQ7nRoIKj0cVg/9D6ugQynvRczJIS6KMTZcigi2OfwOKI3X0Gy1aKZC5YUl79Tw== +standardized-audio-context-mock@9.6.32: + version "9.6.32" + resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.32.tgz#ede90e8f0620c86d7b7d042e16f2a44b1ec864aa" + integrity sha512-x9/SWuzcTZ4WT9gk4bdww+/9FmK/jbRgoKcPHg2VieKx/wZVaPUcgwDWm7rISDJCuVaNUGcNcMf3lzvLid8kMA== dependencies: - "@babel/runtime" "^7.21.5" - automation-events "^6.0.1" - sinon "^15.0.4" - standardized-audio-context "^25.3.46" - tslib "^2.5.0" - vehicles "^9.0.1" + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" + sinon "^16.0.0" + standardized-audio-context "^25.3.60" + tslib "^2.6.2" + vehicles "^9.0.14" -standardized-audio-context@25.3.60: +standardized-audio-context@25.3.60, standardized-audio-context@^25.3.60: version "25.3.60" resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.60.tgz#f37a0e35bac7ca230dd44fc66efb28949f6bb864" integrity sha512-h4ntLsHqnRESxyuU4C5/gvZTBqjBw1SoAR5lsQbqXPI4R3KKZTJWnMMpnRdiySr7cXokbEcepaPGGQ1V+UwlLw== @@ -6444,15 +6436,6 @@ standardized-audio-context@25.3.60: automation-events "^6.0.13" tslib "^2.6.2" -standardized-audio-context@^25.3.46: - version "25.3.59" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.59.tgz#61ad6000277f08eb50f4a49c053d498eff6c7a7c" - integrity sha512-iyzP4sgW2oBSHE7QSMG+I5txft0s9Icw9ClNo2LkNzWbtUYgsEPNJsQ2XZffm3tP3chUpHXJ2br1gY8u7rPkeg== - dependencies: - "@babel/runtime" "^7.23.4" - automation-events "^6.0.12" - tslib "^2.6.2" - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -6722,7 +6705,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: +tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -7004,12 +6987,12 @@ v8-to-istanbul@^9.0.0: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" -vehicles@^9.0.1: - version "9.0.13" - resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.13.tgz#cd789d161be15d96f77953d942d5639776eeb733" - integrity sha512-zUnhrF5//DVAcybP5oj1xEyQi09VC3LHs2H12kUcokI7pKYc8ZVl818Ig2JYFowpQUY/NClY/5tdooqMPbQUGw== +vehicles@^9.0.14: + version "9.0.14" + resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.14.tgz#a3a4488a9fd8c852993ac49f61b76052db662958" + integrity sha512-XIt5kTDoqtjxelMaO2SRQLg7tYW7bnuYBEIpW0DioMjDKrVHTDOcfJftEHq1hD4oGZYAjXCNU9h65ce04wEPhQ== dependencies: - "@babel/runtime" "^7.23.4" + "@babel/runtime" "^7.23.5" decimal.js "^10.4.3" tslib "^2.6.2" From e3206e2122799113dfbfa9e493f3fafd8f44311f Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 10 Dec 2023 08:05:39 +0000 Subject: [PATCH 171/371] chore(front): update dependency vue-router to v4.2.5 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2687> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index e56ed387f..90d0f867e 100644 --- a/front/package.json +++ b/front/package.json @@ -46,7 +46,7 @@ "vue": "3.3.2", "vue-gettext": "2.1.12", "vue-i18n": "9.3.0-beta.19", - "vue-router": "4.2.2", + "vue-router": "4.2.5", "vue-upload-component": "3.1.8", "vue-virtual-scroller": "2.0.0-beta.8", "vue3-gettext": "2.3.4", diff --git a/front/yarn.lock b/front/yarn.lock index 754495bee..08f3f4f0a 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -7108,10 +7108,10 @@ vue-resize@^2.0.0-alpha.1: resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz#43eeb79e74febe932b9b20c5c57e0ebc14e2df3a" integrity sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg== -vue-router@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.2.tgz#b0097b66d89ca81c0986be03da244c7b32a4fd81" - integrity sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ== +vue-router@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== dependencies: "@vue/devtools-api" "^6.5.0" From a19b4595330aa27835a4b47264194b1609b69ddc Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 10 Dec 2023 08:34:18 +0000 Subject: [PATCH 172/371] chore(front): update vue monorepo to v3.3.11 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2688> --- front/package.json | 6 +- front/yarn.lock | 174 ++++++++++++++++++++++++--------------------- 2 files changed, 97 insertions(+), 83 deletions(-) diff --git a/front/package.json b/front/package.json index 90d0f867e..12733c90c 100644 --- a/front/package.json +++ b/front/package.json @@ -20,7 +20,7 @@ "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", - "@vue/runtime-core": "3.3.2", + "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", "@vueuse/math": "10.3.0", @@ -43,7 +43,7 @@ "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", - "vue": "3.3.2", + "vue": "3.3.11", "vue-gettext": "2.1.12", "vue-i18n": "9.3.0-beta.19", "vue-router": "4.2.5", @@ -72,7 +72,7 @@ "@vitejs/plugin-vue": "4.2.3", "@vitest/coverage-c8": "0.25.8", "@vue-macros/volar": "0.13.3", - "@vue/compiler-sfc": "3.3.2", + "@vue/compiler-sfc": "3.3.11", "@vue/eslint-config-standard": "8.0.1", "@vue/eslint-config-typescript": "11.0.3", "@vue/test-utils": "2.2.7", diff --git a/front/yarn.lock b/front/yarn.lock index 08f3f4f0a..335c119dc 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -276,11 +276,16 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": +"@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== +"@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" @@ -2504,13 +2509,13 @@ "@vue-macros/short-vmodel" "1.2.15" "@vue/language-core" "1.8.8" -"@vue/compiler-core@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.2.tgz#39567bd15c7f97add97bfc4d44e814df36eb797b" - integrity sha512-CKZWo1dzsQYTNTft7whzjL0HsrEpMfiK7pjZ2WFE3bC1NA7caUjWioHSK+49y/LK7Bsm4poJZzAMnvZMQ7OTeg== +"@vue/compiler-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz#9fa26f8c81b9b34365f94ce1ed4d0e6e6f94a2ac" + integrity sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w== dependencies: - "@babel/parser" "^7.21.3" - "@vue/shared" "3.3.2" + "@babel/parser" "^7.23.5" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" source-map-js "^1.0.2" @@ -2524,13 +2529,13 @@ estree-walker "^2.0.2" source-map-js "^1.0.2" -"@vue/compiler-dom@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz#2012ef4879375a4ca4ee68012a9256398b848af2" - integrity sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw== +"@vue/compiler-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz#36a76ea3a296d41bad133a6912cb0a847d969e4f" + integrity sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw== dependencies: - "@vue/compiler-core" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" "@vue/compiler-dom@3.3.8", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": version "3.3.8" @@ -2540,20 +2545,20 @@ "@vue/compiler-core" "3.3.8" "@vue/shared" "3.3.8" -"@vue/compiler-sfc@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz#d6467acba8446655bcee7e751441232e5ddebcbf" - integrity sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ== +"@vue/compiler-sfc@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz#acfae240c875d067e0e2c9a4e2d910074408c73b" + integrity sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA== dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.2" - "@vue/compiler-dom" "3.3.2" - "@vue/compiler-ssr" "3.3.2" - "@vue/reactivity-transform" "3.3.2" - "@vue/shared" "3.3.2" + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-ssr" "3.3.11" + "@vue/reactivity-transform" "3.3.11" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - magic-string "^0.30.0" - postcss "^8.1.10" + magic-string "^0.30.5" + postcss "^8.4.32" source-map-js "^1.0.2" "@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": @@ -2572,13 +2577,13 @@ postcss "^8.4.31" source-map-js "^1.0.2" -"@vue/compiler-ssr@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.2.tgz#75ac4ccafa2d78c91d2e257ad243c86409493cc4" - integrity sha512-K8OfY5FQtZaSOJHHe8xhEfIfLrefL/Y9frv4k4NsyQL3+0lRKxr9QuJhfdBDjkl7Fhz8CzKh63mULvmOfx3l2w== +"@vue/compiler-ssr@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz#598942a73b64f2bd3f95908b104a7fbb55fc41a2" + integrity sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg== dependencies: - "@vue/compiler-dom" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-dom" "3.3.11" + "@vue/shared" "3.3.11" "@vue/compiler-ssr@3.3.8": version "3.3.8" @@ -2628,16 +2633,16 @@ muggle-string "^0.3.1" vue-template-compiler "^2.7.14" -"@vue/reactivity-transform@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.2.tgz#e1991d52d7ecefb65b214d8a3385a9dbe2cca74c" - integrity sha512-iu2WaQvlJHdnONrsyv4ibIEnSsuKF+aHFngGj/y1lwpHQtalpVhKg9wsKMoiKXS9zPNjG9mNKzJS9vudvjzvyg== +"@vue/reactivity-transform@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz#2bd486f4eff60c8724309925618891e722fcfadc" + integrity sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg== dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.2" - "@vue/shared" "3.3.2" + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - magic-string "^0.30.0" + magic-string "^0.30.5" "@vue/reactivity-transform@3.3.8": version "3.3.8" @@ -2650,12 +2655,12 @@ estree-walker "^2.0.2" magic-string "^0.30.5" -"@vue/reactivity@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.2.tgz#c4ddc5087039070c0c11810f6bc1aa59c99f0cb5" - integrity sha512-yX8C4uTgg2Tdj+512EEMnMKbLveoITl7YdQX35AYgx8vBvQGszKiiCN46g4RY6/deeo/5DLbeUUGxCq1qWMf5g== +"@vue/reactivity@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.11.tgz#91f8e6c9ac60a595a5278c836b197628fd947a0d" + integrity sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g== dependencies: - "@vue/shared" "3.3.2" + "@vue/shared" "3.3.11" "@vue/reactivity@3.3.8", "@vue/reactivity@^3.3.0": version "3.3.8" @@ -2664,13 +2669,13 @@ dependencies: "@vue/shared" "3.3.8" -"@vue/runtime-core@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.2.tgz#7c89b30c44ad42a3256806a1e37c3cd18500d6d5" - integrity sha512-qSl95qj0BvKfcsO+hICqFEoLhJn6++HtsPxmTkkadFbuhe3uQfJ8HmQwvEr7xbxBd2rcJB6XOJg7nWAn/ymC5A== +"@vue/runtime-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz#63defba57bc54c1dac68a95b56c2633b1419193d" + integrity sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw== dependencies: - "@vue/reactivity" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/reactivity" "3.3.11" + "@vue/shared" "3.3.11" "@vue/runtime-core@3.3.8": version "3.3.8" @@ -2680,14 +2685,14 @@ "@vue/reactivity" "3.3.8" "@vue/shared" "3.3.8" -"@vue/runtime-dom@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.2.tgz#b0bf7ce3fa9c181049ce783a0e13480a4f350c4b" - integrity sha512-+drStsJT+0mtgHdarT7cXZReCcTFfm6ptxMrz0kAW5hms6UNBd8Q1pi4JKlncAhu+Ld/TevsSp7pqAZxBBoGng== +"@vue/runtime-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz#1146d8d280b0fec4d2e18c4a4c8f8121d0cecc09" + integrity sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ== dependencies: - "@vue/runtime-core" "3.3.2" - "@vue/shared" "3.3.2" - csstype "^3.1.1" + "@vue/runtime-core" "3.3.11" + "@vue/shared" "3.3.11" + csstype "^3.1.2" "@vue/runtime-dom@3.3.8": version "3.3.8" @@ -2698,13 +2703,13 @@ "@vue/shared" "3.3.8" csstype "^3.1.2" -"@vue/server-renderer@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.2.tgz#31dce9f76380762fc42df77f6f974c4098f179e6" - integrity sha512-QCwh6OGwJg6GDLE0fbQhRTR6tnU+XDJ1iCsTYHXBiezCXAhqMygFRij7BiLF4ytvvHcg5kX9joX5R5vP85++wg== +"@vue/server-renderer@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz#409aed8031a125791e2143552975ecd1958ad601" + integrity sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A== dependencies: - "@vue/compiler-ssr" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-ssr" "3.3.11" + "@vue/shared" "3.3.11" "@vue/server-renderer@3.3.8": version "3.3.8" @@ -2714,10 +2719,10 @@ "@vue/compiler-ssr" "3.3.8" "@vue/shared" "3.3.8" -"@vue/shared@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.2.tgz#774cd9b4635ce801b70a3fc3713779a5ef5d77c3" - integrity sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ== +"@vue/shared@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.11.tgz#f6a038e15237edefcc90dbfe7edb806dd355c7bd" + integrity sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw== "@vue/shared@3.3.8", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": version "3.3.8" @@ -3538,7 +3543,7 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.1.1, csstype@^3.1.2: +csstype@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== @@ -5495,7 +5500,7 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5: +magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5: version "0.30.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== @@ -5610,7 +5615,7 @@ muggle-string@^0.3.1: resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== -nanoid@^3.3.6: +nanoid@^3.3.6, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -5895,7 +5900,7 @@ postcss-selector-parser@^6.0.9: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.1.10, postcss@^8.4.23, postcss@^8.4.27, postcss@^8.4.31: +postcss@^8.4.23, postcss@^8.4.27, postcss@^8.4.31: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -5904,6 +5909,15 @@ postcss@^8.1.10, postcss@^8.4.23, postcss@^8.4.27, postcss@^8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.32: + version "8.4.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" + integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7168,16 +7182,16 @@ vue3-lazyload@0.3.8: dependencies: vue-demi "^0.12.5" -vue@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.2.tgz#407f0057a7a154d836b66f94ce81779d0c2cafbc" - integrity sha512-98hJcAhyDwZoOo2flAQBSPVYG/o0HA9ivIy2ktHshjE+6/q8IMQ+kvDKQzOZTFPxvnNMcGM+zS2A00xeZMA7tA== +vue@3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.11.tgz#898d97025f73cdb5fc4e3ae3fd07a54615232140" + integrity sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w== dependencies: - "@vue/compiler-dom" "3.3.2" - "@vue/compiler-sfc" "3.3.2" - "@vue/runtime-dom" "3.3.2" - "@vue/server-renderer" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-sfc" "3.3.11" + "@vue/runtime-dom" "3.3.11" + "@vue/server-renderer" "3.3.11" + "@vue/shared" "3.3.11" vue@^3.3.7: version "3.3.8" From 4cf2d68a4f8dc33220b25a793244cf945e31e65c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Azn=C3=B6rth=20Niryn?= <nathanael.barentin@disroot.org> Date: Thu, 1 Jun 2023 20:27:01 +0000 Subject: [PATCH 173/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 18f0fce39..bb05f092d 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -183,9 +183,11 @@ }, "message": { "automaticPlay": "La piste suivante va se jouer automatiquement dans quelques secondesā€¦", - "radio": "Les nouvelles pistes seront ajoutĆ©es ici automatiquement." + "radio": "Les nouvelles pistes seront ajoutĆ©es ici automatiquement.", + "webglUnsupported": "Votre navigateur semble ne pas supporter WebGL2." }, "meta": { + "end": "Fin", "queuePosition": "Piste { index } sur { length }", "startTime": "00:00", "unknownAlbum": "Album Inconnu", @@ -1956,7 +1958,7 @@ "suggest": "Nous ne pouvons pas charger cette piste" }, "message": { - "remote": "Cet objet est gĆ©rĆ© par un autre serveur, vous ne pouvez pas le modifier." + "remote": " Cet objet est gĆ©rĆ© par un autre serveur, vous ne pouvez pas le modifier." } }, "radios": { From 9eda066a390a68ab3c33d697b32f7b897e0497ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= <correoxm@disroot.org> Date: Fri, 2 Jun 2023 13:17:02 +0000 Subject: [PATCH 174/371] Translated using Weblate (Galician) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/gl/ --- front/src/locales/gl.json | 8378 +++++++++++++++++++------------------ 1 file changed, 4244 insertions(+), 4134 deletions(-) diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index e76a6d126..e63b5a558 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -1,1435 +1,66 @@ { + "App": { + "loading": "Cargando..." + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } quere acceder a tĆŗa conta Funkwhale", - "authorize": "Autorizar app de terceiros", - "authorizeFailure": "Erro Ć³ autorizar a aplicaciĆ³n", - "fetchFailure": "Erro Ć³ obter datos da aplicaciĆ³n", - "allScopes": "Acceso completo", - "readOnly": "SĆ³-lectura", - "writeOnly": "SĆ³-escritura" - }, - "title": "Permitir aplicaciĆ³n", - "button": { - "authorize": "Autorizar { app }" - }, - "help": { - "pasteCode": "Copiar-pegar o seguinte cĆ³digo na aplicaciĆ³n:", - "redirect": "Vas ser redirixida a { 0 }", - "copyCode": "Vaiseche mostrar un cĆ³digo para copiar-pegar na aplicaciĆ³n." - }, - "message": { - "unknownPermissions": "Esta aplicaciĆ³n tamĆ©n estĆ” solicitando os seguintes permisos descoƱecidos:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Acceso desactivado", - "passwordUpdated": "Contrasinal actualizado", - "unavailable": "O API Subsonic non estĆ” dispoƱible en esta instancia Funkwhale." - }, - "button": { - "confirmDisable": "Desactivar o acceso", - "disable": "Desactivar o acceso Subsonic", - "newPassword": "Solicitar un novo contrasinal", - "confirmNewPassword": "Solicitar un contrasinal" - }, - "modal": { - "disableSubsonic": { - "header": "Desactivar o acceso a API Subsonic?", - "content": { - "warning": "DesactivarĆ” o acceso a API Subsonic desde a conta." - } - }, - "newPassword": { - "header": "Solicitar un nonvo contrasinal para o API Subsonic?", - "content": { - "warning": "Esto pecharĆ” sesiĆ³n nos dispositivos existentes que utilicen o contrasinal actual." - } - } - }, - "link": { - "apps": "Aprende como utilizar Funkwhale desde outras apps" - }, - "header": { - "error": "Fallo", - "subsonic": "Contrasinal API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale Ć© compatible con outros reprodutores de mĆŗsica compatibles coa API Subsonic.", - "paragraph3": "PorĆ©n, o acceso a Funkwhale desde estos outros clientes precisa dun contrasinal diferente que podes establecer aquĆ­ embaixo.", - "paragraph2": "Pode utilizalos para desfrutar da sĆŗa lista de reproduciĆ³n e mĆŗsica en modo fora de liƱa, no seu dispositivo mĆ³bil ou tableta, por exemplo." - } - }, - "label": { - "subsonicField": "O teu contrasinal API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token de acceso", - "appId": "ID da aplicaciĆ³n", - "appSecret": "Chave segreda da aplicaciĆ³n" - }, - "header": { - "appDetails": "Detalles da aplicaciĆ³n", - "editApp": "Editar aplicaciĆ³n" - }, - "help": { - "appDetails": "O ID da aplicaciĆ³n e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguĆ©n." - }, - "link": { - "settings": "Volver Ć³s axustes" - }, - "title": "Editar aplicaciĆ³n", - "button": { - "regenerateToken": "Recrear token" - } - }, - "Settings": { - "title": "Axustes da conta", - "header": { - "accountSettings": "Axustes da conta", - "authorizedApps": "Apps autorizadas", - "avatar": "Avatar", - "changeEmail": "Cambiar o meu enderezo de email", - "changePassword": "Cambiar o contrasinal", - "contentFilters": "Filtros de contido", - "deleteAccount": "Eliminar a miƱa conta", - "hiddenArtists": "Artistas ocultos", - "plugins": "Plugins", - "settingsUpdated": "Axustes actualizados", - "emailFailure": "Non podemos cambiar o teu enderezo de email", - "accountFailure": "Non podemos eliminar a tĆŗa conta", - "noApps": "Non ten ningunha regra activada para esta conta.", - "noPersonalApps": "Non tes ningunha aplicaciĆ³n rexistrada.", - "yourApps": "As sĆŗas notificaciĆ³ns", - "avatarFailure": "Non se gardou o avatar", - "passwordFailure": "Non se pode cambiar o contrasinal", - "updateFailure": "Non se actualizaron os axustes" - }, - "table": { - "authorizedApps": { - "header": { - "application": "AplicaciĆ³n", - "permissions": "Permisos" - } - }, - "yourApps": { - "header": { - "application": "AplicaciĆ³n", - "creationDate": "Data de creaciĆ³n", - "scopes": "Ɓmbitos" - } - }, - "artists": { - "header": { - "creationDate": "Data de creaciĆ³n", - "name": "Nome" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Contrasinal actual", - "newEmail": "Novo enderezo de email", - "newPassword": "Novo contrasinal", - "password": "Contrasinal" - }, - "button": { - "password": "Cambiar contrasinal", - "delete": "Borrar", - "deleteAccountConfirm": "Eliminar a miƱa conta", - "deleteAccount": "Eliminar a miƱa contaā€¦", - "disableSubsonic": "Desactivar o acceso", - "edit": "Editar", - "refresh": "Actualizar", - "remove": "Eliminar", - "removeApp": "Eliminar aplicaciĆ³n", - "revoke": "Repudiar", - "revokeAccess": "Retirar acceso", - "update": "Actualizar", - "updateSettings": "Actualizar axustes" - }, - "description": { - "changeEmail": "Cambiar o enderezo de email asociado Ć” tĆŗa conta. EnviarĆ©mosche un email para confirmar o novo enderezo.", - "changePassword": { - "paragraph1": "Ao cambiar o contrasinal tamĆ©n cambias o contrasinal no API Subsonic si Ć© que solicitaches un.", - "paragraph2": "DeberĆ” actualizar o contrasinal nos seus clientes que utilicen este contrasinal." - }, - "contentFilters": "Os filtros de contido axĆŗdanche a ocultar contido que non queres ver neste servizo.", - "authorizedApps": "Esta Ć© unha lista das aplicaciĆ³ns que teƱen acceso aos datos da tĆŗa conta.", - "yourApps": "Esta Ć© a lista das aplicaciĆ³ns que ti creaches.", - "plugins": "Usa engadidos para extender Funkwhale e ter caracterĆ­sticas adicionais.", - "deleteAccount": "Podes eliminar de xeito irreversible epermanente a tĆŗa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmaciĆ³n." - }, - "modal": { - "changePassword": { - "header": "Cambiar o contrasinal?", - "content": { - "warning": "Cambiar o contrasinal terĆ” as seguintes consecuencias:", - "logout": "Pecharemos esta sesiĆ³n e deberĆ”s acceder co novo", - "subsonic": "O teu contrasinal Subsonic serĆ” cambiado por un novo, aleatorio, desconectando todos os dispositivos que utilicen o contrasinal antigo" - } - }, - "deleteAccount": { - "header": "Desexas eliminar a tĆŗa conta?", - "content": { - "warning": "Esto non ten volta e eliminarĆ” permanentemente os teus datos dos nosos servidores. PecharĆ”s sesiĆ³n inmediatamente." - } - }, - "deleteApp": { - "header": "Eliminar a aplicaciĆ³n \"{ application }\"?", - "content": { - "warning": "Esto eliminarĆ” completamente a aplicaciĆ³n e tĆ³dolos tokens asociados." - } - }, - "revokeApp": { - "header": "Retirar acceso para a aplicaciĆ³n \"{ application }\"?", - "content": { - "warning": "Esto evitarĆ” que a aplicaciĆ³n acceda ao servizo no seu nome." - } - } - }, - "help": { - "noApps": "Se autorizas o acceso aos teus datos por aplicaciĆ³ns de terceiros, estas aplicaciĆ³ns aparecerĆ”n aquĆ­.", - "changePassword": "Comproba que o contrasinal Ć© correcto", - "noPersonalApps": "Engade unha para integrar Funkwhale con aplicaciĆ³ns de terceiros." - }, - "link": { - "managePlugins": "Xestionar plugins", - "newApp": "Rexistrar unha nova aplicaciĆ³n" - }, - "warning": { - "deleteAccount": "Vaise eliminar a tĆŗa conta dos nosos servidores dentro duns minutos. Contactaremos con outros servidores que puidesen ter unha copia dos teus datos para que os borren. Por favor, ten en conta que algĆŗn de estos servidores poderĆ­a estar desconectado ou non poder levar a fin a operaciĆ³n." - }, - "message": { - "currentEmail": "O teu email actual Ć© { email }.", - "confirmDelete": "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve" - } - }, - "Logout": { - "header": { - "confirm": "Tes certeza de querer pechar sesiĆ³n?", - "unauthenticated": "Non iniciaches sesiĆ³n" - }, - "link": { - "login": "Accede!" - }, - "title": "Pechar sesiĆ³n", - "button": { - "logout": "Si, pechade a sesiĆ³n!" - }, - "message": { - "loggedIn": "Accedeches como { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Volver Ć³s axustes" - }, - "title": "Crear unha nova aplicaciĆ³n" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Marcando \"Lectura\" e \"Escritura\" para o Ć”mbito superior implica dar acceso aos Ć”mbitos inferiores.", - "read": { - "label": "Ler", - "description": "Acceso de sĆ³-lectura ao datos de usuario" - }, - "write": { - "label": "Escribir", - "description": "Acceso de sĆ³-escritura aos datos de usuario" - } - }, - "name": "Nome", - "redirectUri": "URI de redirecciĆ³n" - }, - "button": { - "create": "Crear aplicaciĆ³n", - "update": "Actualizar lista de reproduciĆ³n" - }, - "help": { - "redirectUri": "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirecciĆ³n se as aplicaciĆ³ns non son mostradas na web." - }, - "header": { - "failure": "Non podemos crear a sĆŗa conta" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crear unha conta", - "resetPassword": "Restablece o contrasinal" - }, - "placeholder": { - "username": "Escribe o teu nome de usuaria ou email" - }, - "help": { - "approvalRequired": "Se te rexistraches recentemente, poderĆ­as ter que agardar un pouco para que se revise a conta ou verifique o teu email.", - "invalidCredentials": "Comproba que as credenciais son correctas e asegĆŗrate de ter verificado o email." - }, - "button": { - "login": "Acceder" - }, - "label": { - "password": "Contrasinal", - "username": "Nome de usuaria ou email" - }, - "header": { - "loginFailure": "Non podemos darche acceso" - } - }, - "SignupForm": { - "button": { - "create": "Crear a miƱa conta" - }, - "label": { - "email": "Enderezo de email", - "password": "Contrasinal", - "username": "Nome de usuaria" - }, - "placeholder": { - "email": "Escribe o teu email", - "invitation": "Escribe o cĆ³digo de convite (dif. maiĆŗsculas)", - "username": "Escribe o teu nome de usuaria" - }, - "header": { - "login": "Accede coa tĆŗa conta Funkwhale", - "signupFailure": "Non se pode crear a conta." - }, - "message": { - "registrationClosed": "O rexistro pĆŗblico non Ć© posible en esta instancia. Precisas un cĆ³digo de convite para rexistrarte.", - "requiresReview": "O rexistro nesta instancia estĆ” aberto, pero revisado pola administraciĆ³n para ser aprobado.", - "awaitingReview": "A solicitude da conta enviouse correctamente. SerĆ”s notificada por email cando o equipo de administraciĆ³n revise a solicitude.", - "accountCreated": "Creouse correctamente a conta. Verifica o teu email antes de intentar acceder." - } - }, - "Plugin": { - "link": { - "documentation": "DocumentaciĆ³n" - }, - "label": { - "pluginEnabled": "Activado", - "library": "Biblioteca" - }, - "header": { - "failure": "Fallo ao gardar o plugin" - }, - "description": { - "library": "A biblioteca onde importar os ficheiros." - }, - "button": { - "save": "Gardar", - "scan": "Escanear" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } usuaria activa | { n } usuarias activas", - "hoursOfMusic": "hora de mĆŗsica | horas de mĆŗsica" + "description": { + "findApp": "Usa Funkwhale noutros dispositivos coas nosas apps.", + "funkwhale": "Funkwhale Ć© un proxecto xestionado pola comunidade que che permite escoitar e compartir mĆŗsica e audio nunha rede descentralizada e aberta.", + "publicContent": "Escoitar Ć”lbums pĆŗblicos e listas compartidas neste servidor.", + "quota": "As usuarias deste servidor teƱen { quota } de almacenaxe gratuĆ­ta para o seu contido!", + "signup": "RexĆ­strate para poder gardar os teus favoritos, crear listas, descubrir novo contido e moito mĆ”is!" }, "header": { - "funkwhale": "Plataforma social para desfrutar e compartir mĆŗsica", "aboutPod": "Acerca desta instancia", - "publicContent": "Explorar contido pĆŗblico", "findApp": "Usa unha app", + "funkwhale": "Plataforma social para desfrutar e compartir mĆŗsica", + "publicContent": "Explorar contido pĆŗblico", "signup": "Rexistro" }, - "title": "Acerca de", + "help": { + "closedRegistrations": "O rexistro estĆ” pechado nesta instancia. Podes crear unha conta noutra instancia usando a ligazĆ³n inferior." + }, "link": { "findOtherPod": "Atopa outra instancia", "learnMore": "Saber mĆ”is" }, - "description": { - "funkwhale": "Funkwhale Ć© un proxecto xestionado pola comunidade que che permite escoitar e compartir mĆŗsica e audio nunha rede descentralizada e aberta.", - "publicContent": "Escoitar Ć”lbums pĆŗblicos e listas compartidas neste servidor.", - "signup": "RexĆ­strate para poder gardar os teus favoritos, crear listas, descubrir novo contido e moito mĆ”is!", - "findApp": "Usa Funkwhale noutros dispositivos coas nosas apps.", - "quota": "As usuarias deste servidor teƱen { quota } de almacenaxe gratuĆ­ta para o seu contido!" + "message": { + "greeting": "Ola {username}", + "loggedIn": "Xa iniciaches sesiĆ³n!" }, "placeholder": { - "noDescription": "Non hai descriciĆ³n." + "noDescription": "Non hai descriciĆ³n" }, - "message": { - "loggedIn": "Xa iniciaches sesiĆ³n!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } usuaria activa | { n } usuarias activas", - "hoursOfMusic": "{ n } hora de mĆŗsica | { n } horas de mĆŗsica" + "hoursOfMusic": "hora de mĆŗsica | horas de mĆŗsica" }, - "header": { - "aboutFunkwhale": "Acerca de Funkwhale", - "about": "Acerca de esta instancia Funkwhale", - "contact": "Contactar", - "login": "Acceder", - "newChannels": "Novas canles", - "newAlbums": "Ɓlbums recĆ©n engadidos", - "signup": "Rexistro", - "statistics": "EstatĆ­sticas", - "links": "LigazĆ³ns Ćŗtiles", - "welcome": "Benvida a { podName }!" - }, - "link": { - "publicContent": { - "label": "Explorar contido pĆŗblico", - "description": "Escoitar Ć”lbums pĆŗblicos e listas compartidas neste servidor" - }, - "userGuides": { - "description": "Descubre todo o que precisas saber sobre Funkwhale e as sĆŗas caracterĆ­sticas", - "label": "GuĆ­as para a usuaria" - }, - "findOtherPod": "Atopar outra instancia", - "learnMore": "Saber mĆ”is", - "mobileApps": { - "label": "Apps mĆ³biles", - "description": "Usa Funkwhale noutros dispositivos coas nosas apps" - }, - "rules": "Regras do servidor", - "viewMore": "Ver mĆ”isā€¦", - "funkwhale": "Visita funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale Ć© libre e desenvolto por unha amigable comunidade de voluntarias.", - "paragraph1": "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir mĆŗsica e audios nunha rede descentralizada e aberta." - }, - "signup": "RexĆ­strate agora para gardar os teus favoritos, crear listas, descubrir novo contido e moito mĆ”is!", - "quota": "As usuarias deste servidor tamĆ©n teƱen { quota } de almacenaxe gratuĆ­ta para o seu contido!" - }, - "title": "Inicio", - "placeholder": { - "noDescription": "Non hai descriciĆ³n." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - } - }, - "Widget": { - "button": { - "more": "Mostrar mĆ”is" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - }, - "title": "Actualizada o { date }" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodios" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - } - }, - "Widget": { - "button": { - "more": "Mostrar mĆ”is" - } - } - }, - "Player": { - "meta": { - "position": "{ index } de { length }" - }, - "header": { - "player": "Reprodutor e controis" - }, - "label": { - "clearQueue": "Baleirar a cola", - "expandQueue": "Despregar cola", - "addArtistContentFilter": "Ocultar contido deste artistaā€¦", - "loopingDisabled": "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canciĆ³n.", - "loopingSingle": "Bucle de unha canciĆ³n. Pulse para cambiar a bucle de toda a cola.", - "loopingWholeQueue": "Bucle de toda a cola. Pulse para desactivar o bucle.", - "audioPlayer": "Reprodutor", - "mute": "Acalar", - "nextTrack": "Seguinte canciĆ³n", - "pause": "Pausar", - "play": "Reproducir", - "previousTrack": "CanciĆ³n anterior", - "shuffleQueue": "Barallar a cola", - "unmute": "Dar voz" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Engadir a cola actual", - "addToPlaylist": "Engadir a lista de reproduciĆ³nā€¦", - "episodeDetails": "Detalles do episodio", - "hideArtist": "Ocultar contido deste artista", - "discretePlay": "Reproducir", - "playAlbum": "Reproducir Ć”lbum", - "playArtist": "Reproducir artista", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "playPlaylist": "Reproducir lista", - "startRadio": "Reproducir canciĆ³ns similares", - "playTrack": "Reproducir canciĆ³n", - "playTracks": "Reproducir canciĆ³ns", - "report": "Denunciarā€¦", - "trackDetails": "Detalles da pista" - }, - "title": { - "more": "MĆ”isā€¦", - "unavailable": "Esta canciĆ³n non estĆ” dispoƱible en ningunha biblioteca a que teƱa acceso" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Engadir a favoritas", - "addToPlaylist": "Engadir a lista de reproduciĆ³nā€¦", - "addToQueue": "Engadir Ć” cola", - "episodeDetails": "Detalles do episodio", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "startRadio": "Reproducir radio", - "removeFromFavorites": "Eliminar das favoritas", - "trackDetails": "Detalles da pista", - "albumDetails": "Ver Ć”lbum", - "artistDetails": "Ver artista", - "channelDetails": "Ver canle", - "seriesDetails": "Ver serie" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar acciĆ³ns da pista" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Engadir a favoritas", - "addToPlaylist": "Engadir a lista de reproduciĆ³nā€¦", - "addToQueue": "Engadir Ć” cola", - "episodeDetails": "Detalles do episodio", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "startRadio": "Reproducir radio", - "removeFromFavorites": "Eliminar das favoritas", - "trackDetails": "Detalles da pista", - "albumDetails": "Ver Ć”lbum", - "artistDetails": "Ver artista", - "channelDetails": "Ver canle", - "seriesDetails": "Ver serie" - } - }, - "Table": { - "table": { - "header": { - "album": "Ɓlbum", - "artist": "Artista", - "title": "TĆ­tulo" - } - } - }, - "Widget": { - "empty": { - "noResults": "Non se atopou nada" - }, - "button": { - "more": "Mostrar mĆ”is" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar acciĆ³ns da pista" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Axustar volume" - }, - "button": { - "mute": "Acalar", - "unmute": "Dar voz" - } - }, - "SearchBar": { - "label": { - "album": "Ɓlbum", - "artist": "Artista", - "category": { - "federation": "FederaciĆ³n", - "podcasts": "Podcasts" - }, - "search": "Buscar contido", - "tag": "Etiqueta", - "track": "CanciĆ³n" - }, - "link": { - "more": "MĆ”is resultados šŸ”’", - "fediverse": "Buscar no fediverso", - "rss": "Subscribirse ao podcast vĆ­a RSS" - }, - "header": { - "noResults": "Non hai coincidencias" - }, - "placeholder": { - "search": "Buscar por artistas, Ć”lbums, pistasā€¦" - }, - "empty": { - "noResults": "LamentĆ”molo, no hai resultados para a busca" - } - }, - "Search": { - "header": { - "albums": "Ɓlbums", - "artists": "Artistas", - "search": "Buscar por algo de mĆŗsica" - }, - "placeholder": { - "search": "Artista, Ć”lbum, pistaā€¦" - }, - "empty": { - "noAlbums": "NingĆŗn Ć”lbum coincide coa busca", - "noArtists": "NingĆŗn artista coincide coa busca" - } - }, - "ChannelForm": { - "label": { - "discography": "DiscografĆ­a da artista", - "category": "CategorĆ­a", - "image": "Imaxe da canle", - "description": "DescriciĆ³n", - "username": "Identificador no Fediverso", - "language": "Idioma", - "name": "Nome", - "email": "Enderezo de email da dona", - "owner": "Nome da dona", - "podcast": "Podcasts", - "subcategory": "SubcategorĆ­a", - "tags": "Etiquetas" - }, - "placeholder": { - "name": "Un nome molĆ³n para a canle", - "username": "tremendonomedacanle" - }, - "header": { - "error": "Fallo ao gardar a canle" - }, - "help": { - "podcast": "Hospeda os teus episodios e ten a comunidade ao dĆ­a.", - "discography": "Publica a tĆŗa mĆŗsica para crear a tĆŗa discografĆ­a con Ć”lbums e sinxelos.", - "podcastFields": "Utilizado para os campos itunes:email e itunes:name requeridos por certas plataformas como Spotify ou iTunes.", - "username": "Utilizado en URLs e para seguir esta canle no Fediverso. Non poderĆ”s cambialo posteriormente." - }, - "loader": { - "loading": "Cargando" - }, - "legend": { - "purpose": "Para que se vai usar esta canle?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Cancelar solicitude de seguimento", - "follow": "Seguir", - "unfollow": "Deixar de seguir" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copiar" - }, - "help": { - "embed": "Copiar/pegar este cĆ³digo no HTML da tĆŗa web", - "width": "Deixar baleiro para un widget interactivo", - "anonymous": "Por favor, contacta coa administraciĆ³n e pĆ­delle que actualicen o axuste correspondente." - }, - "label": { - "embed": "CĆ³digo incrustado", - "height": "Alto do trebello", - "width": "Ancho do trebello" - }, - "header": { - "preview": "Vista previa" - }, - "warning": { - "anonymous": "A comparticiĆ³n non funcionarĆ”, porque este servidor non permite a usuarias anĆ³nimas acceder ao contido." - }, - "message": { - "copy": "Texto copiado ao portapapeis!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Mostrar mĆ”is" - }, - "help": { - "subscribe": "PoderĆ­as ter que subscribirte Ć” canle para ver o seu contido." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Mostrar mĆ”is" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "PoderĆ­as ter que subscribirte Ć” canle para ver o seu contido." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - }, - "link": { - "addDescription": "Engade unha descriciĆ³nā€¦" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } pista en | { n } pista en", - "albums": "{ n } Ć”lbum | { n } Ć”lbums" - }, - "title": "Artista", - "button": { - "cancel": "Cancelar", - "edit": "Editar", - "embed": "Incrustar", - "more": "MĆ”isā€¦", - "play": "Reproducir tĆ³dolos Ć”lbums" - }, - "modal": { - "embed": { - "header": "InclĆŗe esta canciĆ³n no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderaciĆ³n", - "discogs": "Buscar en Discogs", - "wikipedia": "Buscar en Wikipedia", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }", - "musicbrainz": "Ver en MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } canciĆ³n coicidente cos filtros combinados | { n } canciĆ³ns coincidentes cos filtros combinados", - "builder": "Construtor", - "created": "Radio creada", - "updated": "Radio actualizada" - }, - "table": { - "filter": { - "header": { - "actions": "AcciĆ³ns", - "candidates": "Candidatas", - "config": "Configurar", - "exclude": "ExcluĆ­r", - "name": "Nome do filtro" - } - } - }, - "button": { - "filter": "Engadir filtro", - "save": "Gardar" - }, - "label": { - "filter": "Engade filtros para personalizar a tĆŗa radio", - "description": "DescriciĆ³n", - "public": "Mostrar pĆŗblicamente", - "name": "Nome da Radio" - }, - "placeholder": { - "description": "A miƱa abraiante descriciĆ³n", - "name": "A miƱa increĆ­ble radio" - }, - "title": "Constructor de Radio", - "option": { - "filter": "Escolla un filtro" - }, - "description": { - "builder": "Pode utilizar esta interface para construĆ­r a sĆŗa propia radio, que reproducirĆ” canciĆ³ns segundo o seu criterio." - } - }, - "Filter": { - "cancelButton": "Cancelar", - "excludeLabel": "ExcluĆ­r", - "removeButton": "Eliminar", - "matchingTracksModalHeader": "Filtro coincidente da canciĆ³n" - } - }, - "FileUpload": { - "tooltip": { - "network": "Fallou a rede mentras se subĆ­a o ficheiro", - "size": "Fallou a subida, mira que non sexa demasiado grande", - "extension": "Tipo de ficheiro non vĆ”lido, asegĆŗrate de que subes un ficheiro de audio. ExtensiĆ³ns de ficheiros soportadas { extensions }", - "retry": "Reintentar", - "denied": "Subida denegada, asegĆŗrese de que o ficheiro non Ć© demasiado grande e que non acadou o lĆ­mite de cuota", - "timeout": "Caducou a subida, intĆ©nteo de novo" - }, - "table": { - "upload": { - "header": { - "actions": "AcciĆ³ns", - "filename": "Nome do ficheiro", - "size": "TamaƱo", - "status": "Estado" - }, - "status": { - "pending": "Pendente", - "uploaded": "Subida", - "uploading": "Subindoā€¦" - } - } - }, - "button": { - "cancel": "Cancelar", - "retry": "Voltar a intentar as subidas" - }, - "label": { - "uploadWidget": "Preme para escoller os ficheiros a subir ou arrastra e solta ficheiros ou directorios", - "remainingSpace": "Almacenaxe restante", - "extensions": "ExtensiĆ³ns soportadas: { extensions }" - }, - "header": { - "failure": "Fallo Ć³ iniciar a importaciĆ³n", - "server": "Estado da importaciĆ³n", - "status": "Estado da importaciĆ³n", - "local": "Importa mĆŗsica desde a almacenaxe local" - }, - "link": { - "processing": "Procesando", - "uploading": "Subindo", - "picard": "RecomendĆ”moslle utilizar Picard para ese propĆ³sito." - }, - "description": { - "import": "Resultados da importaciĆ³n:", - "previousImport": "Resultados da importaciĆ³n anterior:" - }, - "message": { - "local": { - "format": "Os ficheiros de mĆŗsica que estĆ”s a subir estĆ”n en formato OGG, Flac, MP3 ou AIFF", - "tag": "Os ficheiros de mĆŗsica que estĆ” a subir estĆ”n correctamente etiquetados.", - "message": "Vai subir mĆŗsica a sĆŗa biblioteca. Antes de seguir, asegĆŗrese de que:", - "copyright": "Non estĆ”s a subir contido con copyright a unha biblioteca pĆŗblica, de outro xeito poderĆ­as faltarlle a lei" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Un breve resumen describindo os cambios." - }, - "button": { - "cancel": "Cancelar", - "clear": "Baleirar", - "reset": "Restablecer ao valor inicial", - "showUnreviewed": "Restrinxir a ediciĆ³ns non revisadas", - "showAll": "Mostrar todas as ediciĆ³ns", - "submit": "Enviar e aplicar a ediciĆ³n", - "new": "Enviar outra ediciĆ³n", - "suggest": "Enviar suxestiĆ³n" - }, - "header": { - "failure": "Erro Ć³ gardar o axuste", - "recentEdits": "Recentemente engadida", - "unreviewed": "EdiciĆ³ns recentes agardando revisiĆ³n", - "success": "Enviouse correctamente a ediciĆ³n." - }, - "notApplicable": "N/A", - "empty": { - "suggestEdit": "Suxerir un cambio utilizando o formulario inferior." - }, - "label": { - "summary": "Resumen (optativo)" - }, - "message": { - "noPermission": "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serĆ”n revisados antes da sĆŗa aprobaciĆ³n." - } - }, - "Albums": { - "link": { - "addMusic": "Engade algo de mĆŗsica" - }, - "title": "Ɓlbums", - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Ollando Ć”lbums" - }, - "placeholder": { - "search": "Escribir tĆ­tulo do Ć”lbumā€¦" - }, - "empty": { - "noResults": "Sen resultados para a tĆŗa consulta" - }, - "pagination": { - "results": "Resultados por pĆ”xina" - }, - "label": { - "search": "Buscar", - "tags": "Etiquetas" - }, - "button": { - "search": "Buscar" - } - }, - "Artists": { - "button": { - "upload": "Engade algo de mĆŗsica", - "search": "Buscar" - }, - "label": { - "search": "Nome do artista", - "excludeCompilation": "ExcluĆ­r Artistas da CompilaciĆ³n", - "tags": "Etiquetas" - }, - "title": "Artistas", - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando artistas" - }, - "empty": { - "noResults": "Sen resultados para a tĆŗa consulta" - }, - "pagination": { - "results": "Resultados por pĆ”xina" - }, - "placeholder": { - "search": "Buscarā€¦" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Ɓlbum", - "artist": "Artista", - "copyright": "Copyright", - "license": "Licenza", - "series": "Serie", - "url": "URL", - "year": "Ano" - }, - "track": { - "bitrate": { - "label": "Taxa de bits" - }, - "codec": "CĆ³dec", - "downloads": "Descargas", - "duration": "DuraciĆ³n", - "size": "TamaƱo" - } - }, - "header": { - "episode": "Detalles do episodio", - "library": "Bibliotecas relacionadas", - "playlists": "Listas relacionadas", - "release": "Detalles da publicaciĆ³n", - "track": "Detalles" - }, - "notApplicable": "N/A", - "description": { - "library": "Esta canciĆ³n estĆ” presente nas seguintes bibliotecas:" - }, - "link": { - "musicbrainz": "Ver en MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Ɓlbums", - "artists": "Artistas", - "moderation": "Actualizar regra de moderaciĆ³n" - }, - "header": { - "channels": "Canles", - "tracks": "CanciĆ³ns" - } - }, - "ArtistDetail": { - "header": { - "album": "Ɓlbums deste artista", - "track": "Novas pistas deste artista", - "library": "Bibliotecas da usuaria" - }, - "button": { - "more": "Cargando seguidorasā€¦", - "filter": "Eliminar avatar" - }, - "link": { - "filter": "Ver ficheiros" - }, - "description": { - "library": "Este artista estĆ” presente nas seguintes bibliotecas:" - }, - "message": { - "filter": "Actualmente estĆ”s a ocultar contido relacionado con este artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Algo fallou no proceso de subida. AquĆ­ embaixo atoparĆ”s mĆ”is informaciĆ³n.", - "unknownError": { - "message": "Aconteceu un fallo descoƱecido", - "label": "Fallo descoƱecido" - }, - "invalidMetadata": { - "label": "Metadatos non vĆ”lidos", - "message": "Os metadatos incluĆ­dos no ficheiro non son vĆ”lidos ou faltan algĆŗns campos requeridos." - } - }, - "button": { - "close": "Pechar" - }, - "table": { - "error": { - "debug": "InformaciĆ³n de depuraciĆ³n", - "errorDetail": "Detalles do fallo", - "errorType": "Tipo de fallo", - "help": "Obter axuda" - } - }, - "header": { - "importDetail": "Estado da importaciĆ³n" - }, - "link": { - "support": "Abrir un fĆ­o de axuda (incluĆ­r informaciĆ³n de depuraciĆ³n abaixo na tĆŗa mensaxe)", - "documentation": "Lea a documentaciĆ³n para este fallo" - }, - "message": { - "importDetail": "A subida estĆ” pendente e axiƱa serĆ” procesada polo servidor.", - "importSuccess": "A subida non se procesou correctamente polo servidor." - }, - "warning": { - "importSkipped": "A subida non se realizou porque xa ten unha semellante dispoƱible nunha das sĆŗas bibliotecas." - } - }, - "EditCard": { - "button": { - "approve": "Aprobar", - "delete": "Borrar", - "reject": "Rexeitar" - }, - "status": { - "approved": "Aprobada", - "applied": "Aprobada e aplicada", - "pending": "Ficheiros pendentes", - "rejected": "Rexeitado" - }, - "modal": { - "delete": { - "header": "Eliminar esta suxestiĆ³n?" - }, - "content": { - "warning": "Vaise eliminar completamente a suxestiĆ³n, a acciĆ³n Ć© irreversible." - } - }, - "table": { - "update": { - "header": { - "field": "Campo", - "newValue": "Novo valor", - "oldValue": "Valor anterior" - }, - "notApplicable": "N/A" - } - }, - "header": { - "modification": "Data de modificaciĆ³n" - }, - "link": { - "track": "CanciĆ³n #{ id } - % { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando Podcast" - }, - "button": { - "cancel": "Cancelar", - "channel": "Crear Canle", - "search": "Buscar", - "subscribe": "Subscribir", - "feed": "Subscribirse a fonte" - }, - "empty": { - "noResults": "Sen resultados para a tĆŗa consulta" - }, - "label": { - "search": "TĆ­tulo do podcast", - "tags": "Etiquetas" - }, - "title": "Podcasts", - "pagination": { - "results": "Resultados por pĆ”xina" - }, - "placeholder": { - "search": "Buscarā€¦" - }, - "modal": { - "subscription": { - "header": "SubscriciĆ³n" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando radios", - "instance": "Radios da instancia", - "user": "Radios da usuaria" - }, - "button": { - "add": "Crea unha radio", - "create": "Crea a tĆŗa propia radio" - }, - "placeholder": { - "search": "Escribe un nome de radioā€¦" - }, - "empty": { - "noResults": "Sen resultados para a tĆŗa busca" - }, - "title": "Radios", - "pagination": { - "results": "Resultados por pĆ”xina" - }, - "label": { - "search": "Buscar" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Cancelar", - "delete": "Eliminarā€¦", - "edit": "Editar", - "embed": "Incrustar", - "more": "MĆ”isā€¦" - }, - "modal": { - "delete": { - "header": "Eliminar este Ć”lbum?", - "content": { - "warning": "Vaise eliminar o Ć”lbum, asi como tĆ³dolos ficheiros asociados. Esta acciĆ³n non ten volta." - } - }, - "embed": { - "header": "InclĆŗe este Ć”lbum no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderaciĆ³n", - "discogs": "Buscar en Discogs", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }", - "musicbrainz": "Ver en MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Cancelar", - "delete": "Eliminarā€¦", - "download": "Descargar", - "edit": "Editar", - "embed": "Incrustar", - "more": "MĆ”isā€¦", - "play": "Reproducir" - }, - "modal": { - "delete": { - "header": "Eliminar esta canciĆ³n?", - "content": { - "warning": "Vaise eliminar a canciĆ³n xunto cos datos e ficheiros relacionados, esta acciĆ³n non ten volta." - } - }, - "embed": { - "header": "InclĆŗe esta canciĆ³n no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderaciĆ³n", - "discogs": "Buscar en Discogs", - "wikipedia": "Buscar en Wikipedia", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }" - }, - "title": "CanciĆ³n" - }, - "AlbumEdit": { - "header": { - "edit": "Editar este Ć”lbum", - "suggest": "Suxire unha ediciĆ³n para este Ć”lbum" - }, - "message": { - "remote": "Este obxeto estĆ” xestionado en outro servidor, non podes editalo." - } - }, - "ArtistEdit": { - "header": { - "edit": "Editar este artista", - "suggest": "Non podemos cargar a canciĆ³n" - }, - "message": { - "remote": "Este obxeto estĆ” xestionado en outro servidor, non podes editalo." - } - }, - "TrackEdit": { - "header": { - "edit": "Editar esta canciĆ³n", - "suggest": "Non podemos cargar a canciĆ³n" - }, - "message": { - "remote": "Este obxeto estĆ” xestionado en outro servidor, non podes editalo." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodios", - "tracks": "CanciĆ³ns", - "libraries": "Bibliotecas da usuaria" - }, - "description": { - "libraries": "Este Ć”lbum estĆ” presente nas seguintes bibliotecas:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importar" - } - }, - "FsLogs": { - "empty": { - "notStarted": "A importaciĆ³n non comezou" - } - }, - "Home": { - "title": "Biblioteca", - "header": { - "newChannels": "Novas canles", - "playlists": "Listas de reproduciĆ³n", - "recentlyAdded": "Recentemente engadida", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" - } - }, - "TagSelector": { - "placeholder": { - "search": "Buscarā€¦" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favorita | { n } favoritas" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "link": { - "library": "Buscar na biblioteca" - }, - "loader": { - "loading": "Cargando as favoritasā€¦" - }, - "empty": { - "noFavorites": "AĆ­nda non engadiches canciĆ³ns as favoritas" - }, - "pagination": { - "results": "Resultados por pĆ”xina" - }, - "title": "As sĆŗas Favoritas" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Engadir a favoritas", - "remove": "Eliminar das favoritas" - }, - "label": { - "inFavorites": "Nas favoritas" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } ficheiro | { n } ficheiros", - "quota": "Almacenaxe dispoƱible:" - }, - "button": { - "cancel": "Cancelar", - "close": "Pechar", - "finishLater": "Rematar mĆ”is tarde", - "next": "Seguinte paso", - "previous": "Paso anterior", - "publish": "Publicar", - "update": "Actualizar" - }, - "header": { - "uploadFiles": "Ficheiros a subir", - "processing": "Procesando subidas", - "publish": "Publicar audio", - "uploadDetails": "Detalles da subida" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - }, - "label": { - "album": "Ɓlbum", - "series": "Series" - }, - "option": { - "none": "Nada" - } - }, - "LicenseSelect": { - "link": { - "license": "Acerca desta licenza" - }, - "label": { - "license": "Licenza" - }, - "option": { - "none": "Nada" - } - }, - "UploadForm": { - "help": { - "license": "Engade unha licenza ao subido para darlle liberdade ao teu pĆŗblico." - }, - "label": { - "openBrowser": "Buscarā€¦", - "channel": "Canle" - }, - "message": { - "dragAndDrop": "Arrastra e solta aquĆ­ os ficheiros ou abre o navegador para subilos", - "pending": "Tes borradores pendentes de publicar." - }, - "button": { - "edit": "Editar", - "ignore": "Ignorar", - "remove": "Eliminar", - "resume": "Retomar", - "retry": "Volta a intentar" - }, - "header": { - "error": "Fallou a publicaciĆ³n" - }, - "status": { - "errored": "Con fallos", - "pending": "Pendente", - "uploading": "Subindo" - }, - "description": { - "extensions": "ExtensiĆ³ns soportadas: { extensions }" - }, - "warning": { - "quota": "Non tes espazo suficiente para subir mĆ”is ficheiros. Contacta coa administraciĆ³n." - } - }, - "AlbumModal": { - "button": { - "cancel": "Cancelar", - "create": "Crear" - }, - "header": { - "newAlbum": "Novo Ć”lbum", - "newSeries": "Nova serie" - } - }, - "UploadMetadataForm": { - "label": { - "description": "DescriciĆ³n", - "position": "PaxinaciĆ³n", - "tags": "Etiquetas", - "title": "TĆ­tulo", - "image": "Imaxe da canciĆ³n" - } - }, - "AlbumForm": { - "header": { - "error": "Fallou a creaciĆ³n" - }, - "label": { - "albumTitle": "TĆ­tulo" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Subscribir", - "unsubscribe": "Desubscribir" - }, - "help": { - "auth": "Tes que iniciar sesiĆ³n para subscribirte a esta canle" - } - } + "title": "Acerca de" }, "AboutPod": { - "stat": { - "hoursOfMusic": "hora de mĆŗsica | horas de mĆŗsica", - "activeUsers": "usuaria activa | usuarias activas", - "albumsCount": "Ć”lbum | Ć”lbums", - "artistsCount": "artista | artistas", - "listeningsCount": "escoita | escoitas", - "tracksCount": "pista | pistas" + "feature": { + "allowList": "Lista de permitidos", + "anonymousAccess": "Acceso anĆ³nimo", + "federation": "FederaciĆ³n", + "quota": "Cota de subida", + "registrations": "Rexistros", + "status": { + "closed": "Pechado", + "disabled": "Desactivado", + "enabled": "Activado", + "open": "Abrir" + }, + "version": "VersiĆ³n de Funkwhale" + }, + "header": { + "about": "Acerca desta instancia", + "contact": "Contactar", + "features": "CaracterĆ­sticas", + "rules": "Regras", + "statistics": "EstatĆ­sticas", + "terms": "Termos e polĆ­tica de privacidade" }, - "title": "Acerca de", "link": { "about": "Acerca desta instancia", "features": "CaracterĆ­sticas", @@ -1438,360 +69,242 @@ "statistics": "EstatĆ­sticas", "terms": "Termos e polĆ­tica de privacidade" }, - "header": { - "about": "Acerca desta instancia", - "contact": "Contactar", - "features": "CaracterĆ­sticas", - "rules": "Regras", - "statistics": "EstatĆ­sticas", - "terms": "Termos e polĆ­tica de privacidade" - }, - "feature": { - "allowList": "Lista de permitidos", - "anonymousAccess": "Acceso anĆ³nimo", - "status": { - "closed": "Pechado", - "disabled": "Desactivado", - "enabled": "Activado", - "open": "Abrir" - }, - "federation": "FederaciĆ³n", - "version": "VersiĆ³n de Funkwhale", - "registrations": "Rexistros", - "quota": "Cota de subida" + "message": { + "contact": "EnvĆ­anos un email: {'{{'} contactEmail {'}}'}" }, "notApplicable": "N/A", "placeholder": { - "noDescription": "Non hai descriciĆ³n.", - "noRules": "Sen regras dispoƱibles.", - "noTerms": "Non hai termos dispoƱibles." + "noDescription": "Non hai descriciĆ³n", + "noRules": "Sen regras dispoƱibles", + "noTerms": "Non hai termos dispoƱibles" + }, + "stat": { + "activeUsers": "usuaria activa | usuarias activas", + "albumsCount": "Ć”lbum | Ć”lbums", + "artistsCount": "artista | artistas", + "hoursOfMusic": "hora de mĆŗsica | horas de mĆŗsica", + "listeningsCount": "escoita | escoitas", + "tracksCount": "pista | pistas" + }, + "title": "Acerca de" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir mĆŗsica e audios nunha rede descentralizada e aberta.", + "paragraph2": "Funkwhale Ć© libre e desenvolto por unha amigable comunidade de voluntarias." + }, + "quota": "As usuarias deste servidor tamĆ©n teƱen { quota } de almacenaxe gratuĆ­ta para o seu contido!", + "signup": "RexĆ­strate agora para gardar os teus favoritos, crear listas, descubrir novo contido e moito mĆ”is!" + }, + "header": { + "about": "Acerca de esta instancia Funkwhale", + "aboutFunkwhale": "Acerca de Funkwhale", + "contact": "Contactar", + "links": "LigazĆ³ns Ćŗtiles", + "login": "Acceder", + "newAlbums": "Ɓlbums recĆ©n engadidos", + "newChannels": "Novas canles", + "signup": "Rexistro", + "statistics": "EstatĆ­sticas", + "welcome": "Benvida a { podName }!" + }, + "help": { + "registrationsClosed": "O rexistro estĆ” pechado nesta instancia. Podes crear unha conta noutra instancia usando a ligazĆ³n inferior." + }, + "link": { + "findOtherPod": "Atopar outra instancia", + "funkwhale": "Visita funkwhale.audio", + "learnMore": "Saber mĆ”is", + "mobileApps": { + "description": "Usa Funkwhale noutros dispositivos coas nosas apps", + "label": "Apps mĆ³biles" + }, + "publicContent": { + "description": "Escoitar Ć”lbums pĆŗblicos e listas compartidas neste servidor.", + "label": "Explorar contido pĆŗblico" + }, + "rules": "Regras do servidor", + "userGuides": { + "description": "Descubre todo o que precisas saber sobre Funkwhale e as sĆŗas caracterĆ­sticas", + "label": "GuĆ­as para a usuaria" + }, + "viewMore": "Ver mĆ”isā€¦" + }, + "placeholder": { + "noDescription": "Non hai descriciĆ³n" + }, + "stat": { + "activeUsers": "{ n } usuaria activa | { n } usuarias activas", + "hoursOfMusic": "{ n } hora de mĆŗsica | { n } horas de mĆŗsica" + }, + "title": "Inicio" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Non atopamos a pĆ”xina!" + }, + "link": { + "home": "Ir Ć³ inicio" }, "message": { - "contact": "EnvĆ­anos un email: {'{{'} contactEmail {'}}'}" + "pageNotFound": "LamentĆ”molo, a pĆ”xina que solicitou non existe:" + }, + "title": "PĆ”xina non atopada" + }, + "Queue": { + "button": { + "clear": "Baleirar", + "close": "Pechar", + "stopRadio": "Deter radio" + }, + "header": { + "failure": "Non se puido cargar a canciĆ³n", + "noSources": "A canciĆ³n non ten fontes dispoƱibles.", + "radio": "Tes a radio acendida" + }, + "label": { + "addArtistContentFilter": "Ocultar contido deste artistaā€¦", + "duration": "DuraciĆ³n", + "enterFullscreen": "Ir a modo pantalla completa", + "exitFullscreen": "SaĆ­r do modo pantalla completa", + "favorite": "Engadir a favoritas", + "next": "Seguinte canciĆ³n", + "pause": "Pausar", + "play": "Reproducir", + "populatingRadio": "Obtendo datos da radio...", + "previous": "CanciĆ³n anterior", + "queue": "Cola", + "remove": "Eliminar", + "restart": "Reiniciar canciĆ³n", + "selectTrack": "Elexir canciĆ³n", + "showCoverArt": "Mostrar Capa", + "showVisualizer": "Mostrar visor MoonDrop" + }, + "message": { + "automaticPlay": "A seguinte canciĆ³n reproducirase automĆ”ticamente en poucos segundosā€¦", + "radio": "As novas canciĆ³ns engadiranse aquĆ­ automĆ”ticamente.", + "webglUnsupported": "O teu navegador non semella ter soporte para WebGL2." + }, + "meta": { + "end": "Fin", + "queuePosition": "CanciĆ³n { index } de { length }", + "startTime": "00:00", + "unknownAlbum": "Ɓlbum descoƱecido", + "unknownArtist": "Artista descoƱecido" + }, + "warning": { + "connectivity": "PoderĆ­a ter problemas de conectividade." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } de { total } seleccionado | { n } de { total } seleccionados", - "allSelected": "{ n } elemento seleccionado | Todos os { n } elementos seleccionados", - "go": "Ir", - "launch": "Lanzar", - "refresh": "Actualizar contido da tabla", - "select": "Seleccionar", - "selectAll": "Escolle todos os elementos", - "selectElement": "Elixe un elemento | Elixe todos os { n } elementos", - "selectCurrentPage": "Seleccionar sĆ³ pĆ”xina actual" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverso", + "rss": "RSS", + "search": "Buscar" + }, + "description": { + "fediverse": "Utiliza este formulario para subscribirte a unha canle aloxada noutro lugar do Fediverso.", + "rss": "Usa este formulario para subscribirte a unha fonte RSS co seu URL." + }, + "error": { + "fetchFailed": "Non se puido obter o obxeto" + }, + "header": { + "fetchFailed": "Fallou a obtenciĆ³n do obxecto" + }, + "label": { + "fediverse": { + "fieldLabel": "Obxecto no Fediverso", + "fieldPlaceholder": "{'@'}usuaria{'@'}exemplo.com", + "title": "Subscribirse a un podcast aloxado no Fediverso" }, - "message": { - "success": "A acciĆ³n { action } foi lanzada correctamente sobre { n } elemento | A acciĆ³n { action } foi lanzada correctamente sobre { n } elementos", - "needsRefresh": "Actualizouse o contido, preme en actualizar para ver o contido actualizado" - }, - "label": { - "actions": "AcciĆ³ns", - "performAction": "Executar acciĆ³ns" - }, - "modal": { - "performAction": { - "header": "Quere executar { action } sobre { n } elemento? | Quere executar { action } sobre { n } elementos?", - "content": { - "warning": "Esto poderĆ­a afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente Ć© o que quere." - } - } - }, - "header": { - "error": "Fallo Ć³ aplicar a acciĆ³n" + "rss": { + "fieldLabel": "LocalizaciĆ³n da fonte RSS", + "fieldPlaceholder": "https://web.exemplo.com/rss.xml", + "title": "Subscribirse a fonte RSS do podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "Acerca de", - "chat": "Sala de conversa", - "docs": "DocumentaciĆ³n", - "forum": "Foro", - "support": "Axuda", - "git": "Incidencias", - "login": "Acceder", - "logout": "Pechar sesiĆ³n", - "notifications": "NotificaciĆ³ns", - "profile": "Perfil", - "settings": "Axustes", - "signup": "InscriciĆ³n" - }, - "label": { - "shortcuts": "Atallos de teclado", - "language": "Idioma", - "theme": "Decorado" - } - }, - "UserModal": { - "link": { - "about": "Acerca de", - "chat": "Sala de conversa", - "forum": "Foro", - "support": "Axuda", - "git": "Incidencias", - "login": "Acceder", - "logout": "Pechar sesiĆ³n", - "notifications": "NotificaciĆ³ns", - "profile": "Perfil", - "settings": "Axustes", - "signup": "InscriciĆ³n" - }, - "label": { - "shortcuts": "Atallos de teclado", - "language": "Idioma", - "theme": "Decorado" - }, - "header": { - "options": "OpciĆ³ns" - }, - "button": { - "switchInstance": "Utilizar outra instancia" - } - }, - "DangerousButton": { - "button": { - "cancel": "Cancelar", - "confirm": "Confirmar" - }, - "header": { - "confirm": "Queres confirmar esta acciĆ³n?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Cancelar", - "edit": "Editar", - "less": "Mostrar menos", - "more": "Mostrar mĆ”is", - "update": "Actualizar descriciĆ³n" - }, - "header": { - "failure": "Fallo ao actualizar a descriciĆ³n" - }, - "empty": { - "noDescription": "Non hai descriciĆ³n" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Baleirar" - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscarā€¦" - } - }, - "CollapseLink": { - "button": { - "collapse": "Pregar", - "expand": "Despregar" - } - }, - "CopyInput": { - "button": { - "copy": "Copiar" - }, - "message": { - "success": "Texto copiado ao portapapeis!" - } - }, - "LoginModal": { - "link": { - "login": "Acceder", - "signup": "InscriciĆ³n" - }, - "header": { - "unauthenticated": "Non estĆ” autenticado" - }, - "description": { - "noAccess": "Non tes acceso!" - } - }, - "ContentForm": { - "help": { - "markdown": "EstĆ” permitido o Markdown." - }, - "empty": { - "noContent": "Sen vista previa." - }, - "button": { - "preview": "Vista previa", - "write": "Escribir" - }, - "placeholder": { - "input": "Escribe aquĆ­ unhas palabrasā€¦" - } - }, - "EmptyState": { - "header": { - "noResults": "Non se atoparon resultados." - }, - "button": { - "refresh": "Actualizar" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG ou JPG. As dimensiĆ³n deben estar entre 1400x1400px e 3000x3000px. TamaƱo mĆ”ximo 5MB." - }, - "button": { - "remove": "Eliminar" - }, - "label": { - "upload": "Subir nova imaxeā€¦" - }, - "loader": { - "uploading": "Subindo ficheiroā€¦" - }, - "header": { - "failure": "Non se gardou o anexo" - } - }, - "ExpandableDiv": { - "button": { - "less": "Mostrar menos", - "more": "Mostrar mĆ”is" - } + "warning": { + "unsupported": "AĆ­nda non estĆ” soportado este obxeto" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - } + "SetInstanceModal": { + "button": { + "cancel": "Cancelar", + "submit": "Enviar" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } xa estĆ” en { 1 }." - }, - "button": { - "addDuplicate": "Engadir igualmente", - "addToPlaylist": "Engadir a esta lista de reproduciĆ³n", - "addTrack": "Engadir canciĆ³n", - "cancel": "Cancelar", - "edit": "Editar" - }, - "header": { - "addToPlaylist": "Engadir a lista de reproduciĆ³n", - "available": "Listaxes dispoƱibles", - "manage": "Xestionar listas de reproduciĆ³n", - "noResults": "Sen resultados co teu filtro", - "addFailure": "Non podemos engadir a canciĆ³n a lista de reproduciĆ³n" - }, - "table": { - "edit": { - "header": { - "edit": "Editar", - "lastModification": "ƚltima modificaciĆ³n", - "name": "Nome", - "tracks": "CanciĆ³ns" - } - } - }, - "placeholder": { - "filterPlaylist": "Nome da lista de reproduciĆ³n" - }, - "label": { - "filter": "Filtro" - }, - "empty": { - "noPlaylists": "AĆ­nda non se creou unha lista de reproduciĆ³n" - } + "header": { + "chooseInstance": "Elixe a tĆŗa instancia", + "failure": "Non se puido conectar ao URL proporcionado", + "suggestions": "OpciĆ³ns suxeridas" }, - "Editor": { - "button": { - "addDuplicate": "Engadir igualmente", - "clear": "Baleirar lista reproduciĆ³n", - "copy": "Copiar canciĆ³ns da cola a lista de reproduciĆ³n", - "insertFromQueue": "Introducir desde a cola ({ n } canciĆ³n) | Introducir desde a cola ({ n } canciĆ³ns)" - }, - "error": { - "sync": "Algo fallou ao gardar os cambios" - }, - "message": { - "sync": "Cambios sincronizados co servidor" - }, - "modal": { - "clearPlaylist": { - "header": "Queres baleirar a lista de reproduciĆ³n \"{ playlist }\"?", - "content": { - "warning": "Esto eliminarĆ” todas as canciĆ³ns da lista de reproduciĆ³n e non hai volta." - } - } - }, - "help": { - "reorder": "Arrastra e solta filas para reordenar as canciĆ³ns na lista" - }, - "header": { - "editor": "Editora da lista" - }, - "warning": { - "duplicate": "Algunhas canciĆ³ns na cola xa estĆ”n nesta lista de reproduciĆ³n:" - }, - "loading": { - "sync": "Sincronizando cambios co servidorā€¦" - } + "help": { + "notFunkwhaleServer": "O enderezo proporcionado non Ć© un servidor Funkwhale", + "selectPod": "Para continuar, elixe a instancia de Funkwhale Ć” que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opciĆ³ns suxeridas.", + "serverDown": "Igoal non estĆ” a funcionar o servidor" }, - "TrackPlaylistIcon": { - "button": { - "add": "Engadir a lista de reproduciĆ³nā€¦" - } + "label": { + "url": "URL da instancia" }, - "Form": { - "header": { - "createPlaylist": "Crear nova lista de reproduciĆ³n", - "createSuccess": "Lista creada", - "updateSuccess": "Lista de reproduciĆ³n actualizada", - "createFailure": "Lista creada" - }, - "button": { - "create": "Crear lista reproduciĆ³n", - "update": "Actualizar lista de reproduciĆ³n" - }, - "placeholder": { - "name": "A miƱa fantĆ”stica lista" - }, - "label": { - "name": "Nome da lista", - "visibility": "Visibilidade da lista de reproduciĆ³n" - } - }, - "Widget": { - "button": { - "create": "Crear lista de reproduciĆ³n", - "more": "Mostrar mĆ”is" - }, - "placeholder": { - "noPlaylists": "AĆ­nda non se creou unha lista de reproduciĆ³n" - } + "message": { + "currentConnection": "Neste intre tes conexiĆ³n con { 0 }. Se continĆŗas desconectarĆ©moste da instancia actual e os datos locais serĆ”n eliminados.", + "newUrl": "EstĆ”s utilizando a instancia Funkwhale en { url }" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } aceptou o teu seguimento da biblioteca \"{ library }\"", - "libraryFollow": "{ username } segue a tĆŗa biblioteca \"{ library }\"", - "libraryPendingFollow": "{ username } quere seguir a tĆŗa biblioteca \"{ library }\"" + "ShortcutsModal": { + "button": { + "close": "Pechar" + }, + "header": { + "modal": "Atallos de teclado" + }, + "shortcut": { + "audio": { + "clearQueue": "Limpar cola", + "decreaseVolume": "Baixar volume", + "expandQueue": "Despregar vista da cola/reprodutor", + "increaseVolume": "Aumentar volume", + "label": "Atallos do reprodutor de audio", + "playNext": "Reproducir canciĆ³n seguinte", + "playPause": "Pausar/reproducir pista actual", + "playPrevious": "Reproducir canciĆ³n anterior", + "seekBack30": "Buscar atrĆ”s 30s", + "seekBack5": "Adiantar 5s", + "seekForward30": "Adiantar 30s", + "seekForward5": "Adiantar 5s", + "shuffleQueue": "Barallar a cola", + "toggleFavorite": "Marca de favorito", + "toggleLoop": "Activar a repeticiĆ³n da cola", + "toggleMute": "Activar silencio" }, - "button": { - "approve": "Aprobar", - "markRead": "Marcar como lido", - "markUnread": "Marcar como non lido", - "reject": "Rexeitar" + "general": { + "focus": "Foco na caixa de busca", + "label": "Atallos xerais", + "show": "Mostrar atallos de teclado dispoƱibles", + "unfocus": "SaĆ­r da barra de busca" } } }, "Sidebar": { + "header": { + "administration": "AdministraciĆ³n", + "explore": "Explorar", + "library": "Biblioteca", + "main": "MenĆŗ principal", + "more": "MĆ”is" + }, + "label": { + "add": "Engadir contido", + "administration": "AdministraciĆ³n", + "edits": "Ficheiros pendentes", + "follows": "PeticiĆ³ns de seguimento pendentes", + "language": "Idioma", + "main": "MenĆŗ principal", + "play": "Reproducir esta canciĆ³n", + "reports": "Denuncias pendentes de revisar", + "theme": "Decorado" + }, "link": { "about": "Acerca desta instancia", "albums": "Ɓlbums", @@ -1809,44 +322,1985 @@ "radios": "Radios", "search": "Buscar", "settings": "Axustes", + "switchInstance": "Cambiar de instancia", "users": "Usuarias" - }, - "label": { - "add": "Engadir contido", - "administration": "AdministraciĆ³n", - "language": "Idioma", - "main": "MenĆŗ principal", - "follows": "PeticiĆ³ns de seguimento pendentes", - "edits": "Ficheiros pendentes", - "play": "Reproducir esta canciĆ³n", - "theme": "Decorado" - }, - "header": { - "administration": "AdministraciĆ³n", - "explore": "Explorar", - "main": "MenĆŗ principal", - "more": "MĆ”is", - "library": "Biblioteca" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Gardar" + }, + "header": { + "error": "Erro Ć³ gardar os axustes.", + "image": "Imaxe actual" + }, + "message": { + "success": "Axustes actualizados correctamente." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Engade un novo campo", + "edit": "Formulario de ediciĆ³n", + "preview": "Formulario vista previa" + }, + "help": { + "additionalFields": "Campos de formulario adicionais para mostrar. SĆ³ se mostran se se activa a validaciĆ³n manual do rexistro.", + "helpText": "Un texto optativo para mostrar Ć³ inicio do formulario de rexistro." + }, + "label": { + "additionalField": "Campo adicional", + "additionalFields": "Campos adicionais", + "delete": "Borrar", + "helpText": "Texto de axuda", + "moveDown": "Baixar", + "moveUp": "Subir" + }, + "table": { + "additionalFields": { + "header": { + "actions": "AcciĆ³ns", + "label": "Etiqueta do campo", + "required": "Requerido", + "type": "Tipo de campo" + }, + "required": { + "false": "Non", + "true": "Si" + }, + "type": { + "long": "Texto longo", + "short": "Texto curto" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + }, + "title": "Actualizada o { date }" + }, + "ChannelEntries": { + "help": { + "subscribe": "PoderĆ­as ter que subscribirte Ć” canle para ver o seu contido." + } + }, + "ChannelForm": { + "header": { + "error": "Fallo ao gardar a canle." + }, + "help": { + "discography": "Publica a tĆŗa mĆŗsica para crear a tĆŗa discografĆ­a con Ć”lbums e sinxelos.", + "podcast": "Hospeda os teus episodios e ten a comunidade ao dĆ­a.", + "podcastFields": "Utilizado para os campos itunes:email e itunes:name requeridos por certas plataformas como Spotify ou iTunes.", + "username": "Utilizado en URLs e para seguir esta canle no Fediverso. Non poderĆ”s cambialo posteriormente." + }, + "label": { + "category": "CategorĆ­a", + "description": "DescriciĆ³n", + "discography": "DiscografĆ­a da artista", + "email": "Enderezo de email da dona", + "image": "Imaxe da canle", + "language": "Idioma", + "name": "Nome", + "owner": "Nome da dona", + "podcast": "Podcasts", + "subcategory": "SubcategorĆ­a", + "tags": "Etiquetas", + "username": "Identificador no Fediverso" + }, + "legend": { + "purpose": "Para que se vai usar esta canle?" + }, + "loader": { + "loading": "Cargando" + }, + "placeholder": { + "name": "Un nome molĆ³n para a canle", + "username": "tremendonomedacanle" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodios" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Mostrar mĆ”is" + }, + "help": { + "subscribe": "PoderĆ­as ter que subscribirte Ć” canle para ver o seu contido." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Mostrar mĆ”is" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copiar" + }, + "header": { + "preview": "Vista previa" + }, + "help": { + "anonymous": "Por favor, contacta coa administraciĆ³n e pĆ­delle que actualicen o axuste correspondente.", + "embed": "Copiar/pegar este cĆ³digo no HTML da tĆŗa web", + "width": "Deixar baleiro para un widget interactivo" + }, + "label": { + "embed": "CĆ³digo incrustado", + "height": "Alto do trebello", + "width": "Ancho do trebello" + }, + "message": { + "copy": "Texto copiado ao portapapeis!" + }, + "warning": { + "anonymous": "A comparticiĆ³n non funcionarĆ”, porque este servidor non permite a usuarias anĆ³nimas acceder ao contido." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cancelar solicitude de seguimento", + "follow": "Seguir", + "unfollow": "Deixar de seguir" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Engadir a lista de reproduciĆ³n", + "addToQueue": "Engadir a cola actual", + "discretePlay": "Reproducir", + "episodeDetails": "Detalles do episodio", + "hideArtist": "Ocultar contido deste artista", + "playAlbum": "Reproducir Ć”lbum", + "playArtist": "Reproducir artista", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "playPlaylist": "Reproducir lista", + "playTrack": "Reproducir canciĆ³n", + "playTracks": "Reproducir canciĆ³ns", + "report": "Denunciarā€¦", + "startRadio": "Reproducir canciĆ³ns similares", + "trackDetails": "Detalles da pista" + }, + "title": { + "more": "MĆ”isā€¦", + "unavailable": "Esta canciĆ³n non estĆ” dispoƱible en ningunha biblioteca a que teƱa acceso" + } + }, + "Player": { + "header": { + "player": "Reprodutor e controis" + }, + "label": { + "addArtistContentFilter": "Ocultar contido deste artistaā€¦", + "audioPlayer": "Reprodutor", + "clearQueue": "Baleirar a cola", + "expandQueue": "Despregar cola", + "loopingDisabled": "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canciĆ³n.", + "loopingSingle": "Bucle de unha canciĆ³n. Pulse para cambiar a bucle de toda a cola.", + "loopingWholeQueue": "Bucle de toda a cola. Pulse para desactivar o bucle.", + "mute": "Acalar", + "nextTrack": "Seguinte canciĆ³n", + "pause": "Pausar", + "play": "Reproducir", + "previousTrack": "CanciĆ³n anterior", + "shuffleQueue": "Barallar a cola", + "unmute": "Dar voz" + }, + "meta": { + "position": "{ index } de { length }", + "unknownAlbum": "Ɓlbum descoƱecido", + "unknownArtist": "Artista descoƱecido" + } + }, + "PlayerControls": { + "labels": { + "next": "CanciĆ³n seguinte", + "pause": "Pausar", + "play": "Reproducir", + "previous": "CanciĆ³n anterior" + } + }, + "Search": { + "empty": { + "noAlbums": "NingĆŗn Ć”lbum coincide coa busca", + "noArtists": "NingĆŗn artista coincide coa busca" + }, + "header": { + "albums": "Ɓlbums", + "artists": "Artistas", + "search": "Buscar por algo de mĆŗsica" + }, + "placeholder": { + "search": "Artista, Ć”lbum, pistaā€¦" + } + }, + "SearchBar": { + "empty": { + "noResults": "LamentĆ”molo, no hai resultados para a busca" + }, + "header": { + "noResults": "Non hai coincidencias" + }, + "label": { + "album": "Ɓlbum", + "artist": "Artista", + "category": { + "federation": "FederaciĆ³n", + "podcasts": "Podcasts" + }, + "search": "Buscar contido", + "tag": "Etiqueta", + "track": "CanciĆ³n" + }, + "link": { + "fediverse": "Buscar no fediverso", + "more": "MĆ”is resultados šŸ”’", + "rss": "Subscribirse ao podcast vĆ­a RSS" + }, + "placeholder": { + "search": "Buscar por artistas, Ć”lbums, pistasā€¦" + } + }, + "VolumeControl": { + "button": { + "mute": "Acalar", + "unmute": "Dar voz" + }, + "label": { + "slider": "Axustar volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + } + }, + "Widget": { + "button": { + "more": "Mostrar mĆ”is" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + } + }, + "Widget": { + "button": { + "more": "Mostrar mĆ”is" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostrar acciĆ³ns da pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Engadir a favoritas", + "addToPlaylist": "Engadir a lista de reproduciĆ³n", + "addToQueue": "Engadir Ć” cola", + "albumDetails": "Ver Ć”lbum", + "artistDetails": "Ver artista", + "channelDetails": "Ver canle", + "episodeDetails": "Detalles do episodio", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "removeFromFavorites": "Eliminar das favoritas", + "seriesDetails": "Ver serie", + "startRadio": "Reproducir radio", + "trackDetails": "Detalles da pista" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostrar acciĆ³ns da pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Engadir a favoritas", + "addToPlaylist": "Engadir a lista de reproduciĆ³n", + "addToQueue": "Engadir Ć” cola", + "albumDetails": "Ver Ć”lbum", + "artistDetails": "Ver artista", + "channelDetails": "Ver canle", + "episodeDetails": "Detalles do episodio", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "removeFromFavorites": "Eliminar das favoritas", + "seriesDetails": "Ver serie", + "startRadio": "Reproducir radio", + "trackDetails": "Detalles da pista" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Ɓlbum", + "artist": "Artista", + "title": "TĆ­tulo" + } + } + }, + "Widget": { + "button": { + "more": "Mostrar mĆ”is" + }, + "empty": { + "noResults": "Non se atopou nada" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Recrear token" + }, + "header": { + "appDetails": "Detalles da aplicaciĆ³n", + "appSecretWarning": "Gardar unha copia deste token nun lugar seguro.", + "editApp": "Editar aplicaciĆ³n" + }, + "help": { + "appDetails": "O ID da aplicaciĆ³n e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguĆ©n." + }, + "label": { + "accessToken": "Token de acceso", + "appId": "ID da aplicaciĆ³n", + "appSecret": "Chave segreda da aplicaciĆ³n" + }, + "link": { + "settings": "Volver Ć³s axustes" + }, + "message": { + "appSecretWarning": "Non poderĆ”s volver a velo unha vez saias desta pantalla." + }, + "title": "Editar aplicaciĆ³n" + }, + "ApplicationForm": { + "button": { + "create": "Crear aplicaciĆ³n", + "update": "Actualizar lista de reproduciĆ³n" + }, + "header": { + "failure": "Non podemos crear a sĆŗa conta" + }, + "help": { + "redirectUri": "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirecciĆ³n se as aplicaciĆ³ns non son mostradas na web." + }, + "label": { + "name": "Nome", + "redirectUri": "URI de redirecciĆ³n", + "scopes": { + "description": "Marcando \"Lectura\" e \"Escritura\" para o Ć”mbito superior implica dar acceso aos Ć”mbitos inferiores.", + "label": "Ɓmbitos", + "read": { + "description": "Acceso de sĆ³-lectura ao datos de usuario", + "label": "Ler" + }, + "write": { + "description": "Acceso de sĆ³-escritura aos datos de usuario", + "label": "Escribir" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Volver Ć³s axustes" + }, + "title": "Crear unha nova aplicaciĆ³n" + }, + "Authorize": { + "button": { + "authorize": "Autorizar { app }" + }, + "header": { + "access": "{ app } quere acceder a tĆŗa conta Funkwhale", + "allScopes": "Acceso completo", + "authorize": "Autorizar app de terceiros", + "authorizeFailure": "Erro Ć³ autorizar a aplicaciĆ³n", + "fetchFailure": "Erro Ć³ obter datos da aplicaciĆ³n", + "readOnly": "SĆ³-lectura", + "writeOnly": "SĆ³-escritura" + }, + "help": { + "copyCode": "Vaiseche mostrar un cĆ³digo para copiar-pegar na aplicaciĆ³n", + "pasteCode": "Copiar-pegar o seguinte cĆ³digo na aplicaciĆ³n:", + "redirect": "Vas ser redirixida a { 0 }" + }, + "message": { + "unknownPermissions": "Esta aplicaciĆ³n tamĆ©n estĆ” solicitando os seguintes permisos descoƱecidos:" + }, + "title": "Permitir aplicaciĆ³n" + }, + "LoginForm": { + "button": { + "login": "Acceder" + }, + "header": { + "loginFailure": "Non podemos darche acceso" + }, + "help": { + "approvalRequired": "Se te rexistraches recentemente, poderĆ­as ter que agardar un pouco para que se revise a conta ou verifique o teu email.", + "invalidCredentials": "Comproba que as credenciais son correctas e asegĆŗrate de ter verificado o email." + }, + "label": { + "password": "Contrasinal", + "username": "Nome de usuaria ou email" + }, + "link": { + "createAccount": "Crear unha conta", + "resetPassword": "Restablece o contrasinal" + }, + "message": { + "redirect": "ƍmoste redirixir a {domain} para autenticarte" + }, + "placeholder": { + "username": "Escribe o teu nome de usuaria ou email" + } + }, + "Logout": { + "button": { + "logout": "Si, pechade a sesiĆ³n!" + }, + "header": { + "confirm": "Tes certeza de querer pechar sesiĆ³n?", + "unauthenticated": "Non iniciaches sesiĆ³n" + }, + "link": { + "login": "Accede!" + }, + "message": { + "loggedIn": "Accedeches como { username }" + }, + "title": "Pechar sesiĆ³n" + }, + "Plugin": { + "button": { + "save": "Gardar", + "scan": "Escanear" + }, + "description": { + "library": "A biblioteca onde importar os ficheiros." + }, + "header": { + "failure": "Fallo ao gardar o plugin" + }, + "label": { + "library": "Biblioteca", + "pluginEnabled": "Activado" + }, + "link": { + "documentation": "DocumentaciĆ³n" + } + }, + "Settings": { + "button": { + "delete": "Borrar", + "deleteAccount": "Eliminar a miƱa contaā€¦", + "deleteAccountConfirm": "Eliminar a miƱa conta", + "disableSubsonic": "Desactivar o acceso", + "edit": "Editar", + "password": "Cambiar contrasinal", + "refresh": "Actualizar", + "remove": "Eliminar", + "removeApp": "Eliminar aplicaciĆ³n", + "revoke": "Repudiar", + "revokeAccess": "Retirar acceso", + "update": "Actualizar", + "updateSettings": "Actualizar axustes" + }, + "description": { + "authorizedApps": "Esta Ć© unha lista das aplicaciĆ³ns que teƱen acceso aos datos da tĆŗa conta.", + "changeEmail": "Cambiar o enderezo de email asociado Ć” tĆŗa conta. EnviarĆ©mosche un email para confirmar o novo enderezo.", + "changePassword": { + "paragraph1": "Ao cambiar o contrasinal tamĆ©n cambias o contrasinal no API Subsonic si Ć© que solicitaches un.", + "paragraph2": "DeberĆ” actualizar o contrasinal nos seus clientes que utilicen este contrasinal." + }, + "contentFilters": "Os filtros de contido axĆŗdanche a ocultar contido que non queres ver neste servizo.", + "deleteAccount": "Podes eliminar de xeito irreversible epermanente a tĆŗa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmaciĆ³n.", + "plugins": "Usa engadidos para extender Funkwhale e ter caracterĆ­sticas adicionais.", + "yourApps": "Esta Ć© a lista das aplicaciĆ³ns que ti creaches." + }, + "header": { + "accountFailure": "Non podemos eliminar a tĆŗa conta", + "accountSettings": "Axustes da conta", + "authorizedApps": "Apps autorizadas", + "avatar": "Avatar", + "avatarFailure": "Non se gardou o avatar", + "changeEmail": "Cambiar o meu enderezo de email", + "changePassword": "Cambiar o contrasinal", + "contentFilters": "Filtros de contido", + "deleteAccount": "Eliminar a miƱa conta", + "emailFailure": "Non podemos cambiar o teu enderezo de email", + "hiddenArtists": "Artistas ocultos", + "noApps": "Non ten ningunha regra activada para esta conta.", + "noPersonalApps": "Non tes ningunha aplicaciĆ³n rexistrada.", + "passwordFailure": "Non se pode cambiar o contrasinal", + "plugins": "Plugins", + "settingsUpdated": "Axustes actualizados", + "updateFailure": "Non se actualizaron os axustes", + "yourApps": "As sĆŗas notificaciĆ³ns" + }, + "help": { + "changePassword": "Comproba que o contrasinal Ć© correcto", + "noApps": "Se autorizas o acceso aos teus datos por aplicaciĆ³ns de terceiros, estas aplicaciĆ³ns aparecerĆ”n aquĆ­.", + "noPersonalApps": "Engade unha para integrar Funkwhale con aplicaciĆ³ns de terceiros." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Contrasinal actual", + "newEmail": "Novo enderezo de email", + "newPassword": "Novo contrasinal", + "password": "Contrasinal" + }, + "link": { + "managePlugins": "Xestionar plugins", + "newApp": "Rexistrar unha nova aplicaciĆ³n" + }, + "message": { + "confirmDelete": "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve", + "currentEmail": "O teu email actual Ć© {email}" + }, + "modal": { + "changePassword": { + "content": { + "logout": "Pecharemos esta sesiĆ³n e deberĆ”s acceder co novo", + "subsonic": "O teu contrasinal Subsonic serĆ” cambiado por un novo, aleatorio, desconectando todos os dispositivos que utilicen o contrasinal antigo", + "warning": "Cambiar o contrasinal terĆ” as seguintes consecuencias" + }, + "header": "Cambiar o contrasinal?" + }, + "deleteAccount": { + "content": { + "warning": "Esto non ten volta e eliminarĆ” permanentemente os teus datos dos nosos servidores. PecharĆ”s sesiĆ³n inmediatamente." + }, + "header": "Desexas eliminar a tĆŗa conta?" + }, + "deleteApp": { + "content": { + "warning": "Esto eliminarĆ” completamente a aplicaciĆ³n e tĆ³dolos tokens asociados." + }, + "header": "Eliminar a aplicaciĆ³n \"{ application }\"?" + }, + "revokeApp": { + "content": { + "warning": "Esto evitarĆ” que a aplicaciĆ³n acceda ao servizo no seu nome." + }, + "header": "Retirar acceso para a aplicaciĆ³n \"{ application }\"?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data de creaciĆ³n", + "name": "Nome" + } + }, + "authorizedApps": { + "header": { + "application": "AplicaciĆ³n", + "permissions": "Permisos" + } + }, + "yourApps": { + "header": { + "application": "AplicaciĆ³n", + "creationDate": "Data de creaciĆ³n", + "scopes": "Ɓmbitos" + } + } + }, + "title": "Axustes da conta", + "warning": { + "deleteAccount": "Vaise eliminar a tĆŗa conta dos nosos servidores dentro duns minutos. Contactaremos con outros servidores que puidesen ter unha copia dos teus datos para que os borren. Por favor, ten en conta que algĆŗn de estos servidores poderĆ­a estar desconectado ou non poder levar a fin a operaciĆ³n." + } + }, + "SignupForm": { + "button": { + "create": "Crear a miƱa conta" + }, + "header": { + "login": "Accede coa tĆŗa conta Funkwhale", + "signupFailure": "Non se pode crear a conta." + }, + "label": { + "email": "Enderezo de email", + "invitation": "CĆ³digo de convite", + "password": "Contrasinal", + "username": "Nome de usuaria" + }, + "message": { + "accountCreated": "Creouse correctamente a conta. Verifica o teu email antes de intentar acceder.", + "awaitingReview": "A solicitude da conta enviouse correctamente. SerĆ”s notificada por email cando o equipo de administraciĆ³n revise a solicitude.", + "registrationClosed": "O rexistro pĆŗblico non Ć© posible en esta instancia. Precisas un cĆ³digo de convite para rexistrarte.", + "requiresReview": "O rexistro nesta instancia estĆ” aberto, pero revisado pola administraciĆ³n para ser aprobado." + }, + "placeholder": { + "email": "Escribe o teu email", + "invitation": "Escribe o cĆ³digo de convite (dif. maiĆŗsculas)", + "username": "Escribe o teu nome de usuaria" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Desactivar o acceso", + "confirmNewPassword": "Solicitar un contrasinal", + "disable": "Desactivar o acceso Subsonic", + "newPassword": "Solicitar un novo contrasinal" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale Ć© compatible con outros reprodutores de mĆŗsica compatibles coa API Subsonic.", + "paragraph2": "Pode utilizalos para desfrutar da sĆŗa lista de reproduciĆ³n e mĆŗsica en modo fora de liƱa, no seu dispositivo mĆ³bil ou tableta, por exemplo.", + "paragraph3": "PorĆ©n, o acceso a Funkwhale desde estos outros clientes precisa dun contrasinal diferente que podes establecer aquĆ­ embaixo." + } + }, + "header": { + "error": "Fallo", + "subsonic": "Contrasinal API Subsonic" + }, + "label": { + "subsonicField": "O teu contrasinal API Subsonic" + }, + "link": { + "apps": "Aprende como utilizar Funkwhale desde outras apps" + }, + "message": { + "accessDisabled": "Acceso desactivado", + "passwordUpdated": "Contrasinal actualizado", + "unavailable": "O API Subsonic non estĆ” dispoƱible en esta instancia Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "DesactivarĆ” o acceso a API Subsonic desde a conta." + }, + "header": "Desactivar o acceso a API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "Esto pecharĆ” sesiĆ³n nos dispositivos existentes que utilicen o contrasinal actual." + }, + "header": "Solicitar un nonvo contrasinal para o API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Fallou a creaciĆ³n" + }, + "label": { + "albumTitle": "TĆ­tulo" + } + }, + "AlbumModal": { + "button": { + "cancel": "Cancelar", + "create": "Crear" + }, + "header": { + "newAlbum": "Novo Ć”lbum", + "newSeries": "Nova serie" + } + }, + "AlbumSelect": { + "label": { + "album": "Ɓlbum", + "series": "Series" + }, + "meta": { + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + }, + "option": { + "none": "Nada" + } + }, + "LicenseSelect": { + "label": { + "license": "Licenza" + }, + "link": { + "license": "Acerca desta licenza" + }, + "option": { + "none": "Nada" + } + }, + "SubscribeButton": { + "help": { + "auth": "Tes que iniciar sesiĆ³n para subscribirte a esta canle" + }, + "title": { + "subscribe": "Subscribir", + "unsubscribe": "Desubscribir" + } + }, + "UploadForm": { + "button": { + "edit": "Editar", + "ignore": "Ignorar", + "remove": "Eliminar", + "resume": "Retomar", + "retry": "Volta a intentar" + }, + "description": { + "extensions": "ExtensiĆ³ns soportadas: { extensions }" + }, + "header": { + "error": "Fallou a publicaciĆ³n" + }, + "help": { + "license": "Engade unha licenza ao subido para darlle liberdade ao teu pĆŗblico." + }, + "label": { + "channel": "Canle", + "openBrowser": "Buscarā€¦" + }, + "message": { + "dragAndDrop": "Arrastra e solta aquĆ­ os ficheiros ou abre o navegador para subilos", + "pending": "Tes borradores pendentes de publicar." + }, + "status": { + "errored": "Con fallos", + "pending": "Pendente", + "uploading": "Subindo" + }, + "warning": { + "quota": "Non tes espazo suficiente para subir mĆ”is ficheiros. Contacta coa administraciĆ³n." + } + }, + "UploadMetadataForm": { + "label": { + "description": "DescriciĆ³n", + "image": "Imaxe da canciĆ³n", + "position": "PaxinaciĆ³n", + "tags": "Etiquetas", + "title": "TĆ­tulo" + } + }, + "UploadModal": { + "button": { + "cancel": "Cancelar", + "close": "Pechar", + "finishLater": "Rematar mĆ”is tarde", + "next": "Seguinte paso", + "previous": "Paso anterior", + "publish": "Publicar", + "update": "Actualizar" + }, + "header": { + "processing": "Procesando subidas", + "publish": "Publicar audio", + "uploadDetails": "Detalles da subida", + "uploadFiles": "Ficheiros a subir" + }, + "meta": { + "files": "{ n } ficheiro | { n } ficheiros", + "quota": "Almacenaxe dispoƱible: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{ n } elemento seleccionado | Todos os { n } elementos seleccionados", + "go": "Ir", + "launch": "Lanzar", + "refresh": "Actualizar contido da tabla", + "select": "Seleccionar", + "selectAll": "Escolle todos os elementos", + "selectCurrentPage": "Seleccionar sĆ³ pĆ”xina actual", + "selectElement": "Elixe un elemento | Elixe todos os { n } elementos", + "selected": "{ n } de { total } seleccionado | { n } de { total } seleccionados" + }, + "header": { + "error": "Fallo Ć³ aplicar a acciĆ³n" + }, + "label": { + "actions": "AcciĆ³ns", + "performAction": "Executar acciĆ³ns" + }, + "message": { + "needsRefresh": "Actualizouse o contido, preme en actualizar para ver o contido actualizado", + "success": "A acciĆ³n { action } foi lanzada correctamente sobre { n } elemento | A acciĆ³n { action } foi lanzada correctamente sobre { n } elementos" + }, + "modal": { + "performAction": { + "content": { + "warning": "Esto poderĆ­a afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente Ć© o que quere." + }, + "header": "Quere executar { action } sobre { n } elemento? | Quere executar { action } sobre { n } elementos?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Eliminar" + }, + "header": { + "failure": "Non se gardou o anexo" + }, + "help": { + "upload": "PNG ou JPG. As dimensiĆ³n deben estar entre 1400x1400px e 3000x3000px. TamaƱo mĆ”ximo 5MB." + }, + "label": { + "upload": "Subir nova imaxeā€¦" + }, + "loader": { + "uploading": "Subindo ficheiroā€¦" + } + }, + "CollapseLink": { + "button": { + "collapse": "Pregar", + "expand": "Despregar" + } + }, + "ContentForm": { + "button": { + "preview": "Vista previa", + "write": "Escribir" + }, + "empty": { + "noContent": "Nada na vista previa" + }, + "help": { + "markdown": "EstĆ” permitido o Markdown" + }, + "placeholder": { + "input": "Escribe aquĆ­ unhas palabrasā€¦" + } + }, + "CopyInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "success": "Texto copiado ao portapapeis!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Cancelar", + "confirm": "Confirmar" + }, + "header": { + "confirm": "Queres confirmar esta acciĆ³n?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } h { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Actualizar" + }, + "header": { + "noResults": "Non se atoparon resultados." + } + }, + "ExpandableDiv": { + "button": { + "less": "Mostrar menos", + "more": "Mostrar mĆ”is" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Baleirar" + }, + "label": { + "search": "Buscar" + }, + "placeholder": { + "search": "Buscarā€¦" + } + }, + "LoginModal": { + "description": { + "noAccess": "Non tes acceso" + }, + "header": { + "unauthenticated": "Non estĆ” autenticado" + }, + "link": { + "login": "Acceder", + "signup": "InscriciĆ³n" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Cancelar", + "edit": "Editar", + "less": "Mostrar menos", + "more": "Mostrar mĆ”is", + "update": "Actualizar descriciĆ³n" + }, + "empty": { + "noDescription": "Non hai descriciĆ³n" + }, + "header": { + "failure": "Fallo ao actualizar a descriciĆ³n" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Idioma", + "shortcuts": "Atallos de teclado", + "theme": "Decorado" + }, + "link": { + "about": "Acerca de", + "chat": "Sala de conversa", + "docs": "DocumentaciĆ³n", + "forum": "Foro", + "git": "Incidencias", + "login": "Acceder", + "logout": "Pechar sesiĆ³n", + "notifications": "NotificaciĆ³ns", + "profile": "Perfil", + "settings": "Axustes", + "signup": "InscriciĆ³n", + "support": "Axuda" + } + }, + "UserModal": { + "button": { + "switchInstance": "Utilizar outra instancia" + }, + "header": { + "options": "OpciĆ³ns" + }, + "label": { + "language": "Idioma", + "shortcuts": "Atallos de teclado", + "theme": "Decorado" + }, + "link": { + "about": "Acerca de", + "chat": "Sala de conversa", + "docs": "DocumentaciĆ³n", + "forum": "Foro", + "git": "Incidencias", + "login": "Acceder", + "logout": "Pechar sesiĆ³n", + "notifications": "NotificaciĆ³ns", + "profile": "Perfil", + "settings": "Axustes", + "signup": "InscriciĆ³n", + "support": "Axuda" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "AĆ­nda non engadiches canciĆ³ns as favoritas" + }, + "header": { + "favorites": "{ n } favorita | { n } favoritas" + }, + "link": { + "library": "Buscar na biblioteca" + }, + "loader": { + "loading": "Cargando as favoritasā€¦" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por pĆ”xina" + }, + "title": "As sĆŗas Favoritas" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Engadir a favoritas", + "remove": "Eliminar das favoritas" + }, + "label": { + "inFavorites": "Nas favoritas" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Pechar", + "reload": "Pechar e recargar pĆ”xina" + }, + "description": { + "failure": "Algo fallou ao actualizar os datos:", + "pending": "A solicitude de actualizaciĆ³n non se realizou a tempo no noso servidor. Procesarase mĆ”is tarde.", + "skipped": "O servidor remoto respondeu, pero o tipo de resposta non estĆ” soportado por Funkwhale.", + "success": "ActualizĆ”ronse os datos desde o servidor remoto." + }, + "header": { + "failure": "Actualizar", + "pending": "Actualizar info da instancia", + "refresh": "Actualizando obxeto desde servidor remotoā€¦", + "saveFailure": "Erro Ć³ gardar os axustes", + "skipped": "Omiteuse a actualizaciĆ³n", + "success": "ActualizaciĆ³n correcta" + }, + "loader": { + "awaitingResult": "Cargando as favoritasā€¦", + "fetchRequest": "Solicitando a obtenciĆ³nā€¦" + }, + "table": { + "error": { + "label": { + "detail": "Detalles do fallo", + "type": "Tipo de fallo" + }, + "value": { + "connectionError": "Non se puido conectar ao servidor remoto", + "httpError": "Houbo un fallo HTTP ao contactar co servidor remoto", + "httpStatus": "O servidor remoto respondeu con HTTP { status }", + "invalidAttributesError": "Os datos devoltos polo servidor remoto teƱen valores non vĆ”lidos ou faltan atributos", + "invalidJsonError": "O servidor remoto devolveu un datos JSON ou JSON-LD non vĆ”lidos", + "timeoutError": "O servidor remoto non respondeu rĆ”pido abondo", + "unknownError": "Fallo descoƱecido" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Mostrar mĆ”is" + }, + "empty": { + "noMatch": "Sen biblioteca coincidente." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "copy": "Texto copiado ao portapapeis!" + }, + "title": "Mostrar/ocultar contrasinal" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Engade unha descriciĆ³nā€¦" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + }, + "title": "Ɓlbum" + }, + "AlbumDetail": { + "description": { + "libraries": "Este Ć”lbum estĆ” presente nas seguintes bibliotecas:" + }, + "header": { + "episodes": "Episodios", + "libraries": "Bibliotecas da usuaria", + "tracks": "CanciĆ³ns" + }, + "meta": { + "volume": "Volume { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "embed": "Incrustar", + "more": "MĆ”isā€¦" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderaciĆ³n", + "musicbrainz": "Ver en MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar o Ć”lbum, asi como tĆ³dolos ficheiros asociados. Esta acciĆ³n non ten volta." + }, + "header": "Eliminar este Ć”lbum?" + }, + "embed": { + "header": "InclĆŗe este Ć”lbum no teu sitio web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Editar este Ć”lbum", + "suggest": "Suxire unha ediciĆ³n para este Ć”lbum" + }, + "message": { + "remote": "Este obxeto estĆ” xestionado en outro servidor, non podes editalo." + } + }, + "Albums": { + "button": { + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a tĆŗa consulta" + }, + "header": { + "browse": "Ollando Ć”lbums" + }, + "label": { + "search": "Buscar", + "tags": "Etiquetas" + }, + "link": { + "addMusic": "Engade algo de mĆŗsica" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por pĆ”xina" + }, + "placeholder": { + "search": "Escribir tĆ­tulo do Ć”lbumā€¦" + }, + "title": "Ɓlbums" + }, + "ArtistBase": { + "button": { + "cancel": "Cancelar", + "edit": "Editar", + "embed": "Incrustar", + "more": "MĆ”isā€¦", + "play": "Reproducir tĆ³dolos Ć”lbums" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderaciĆ³n", + "musicbrainz": "Ver en MusicBrainz", + "wikipedia": "Buscar en Wikipedia" + }, + "meta": { + "albums": "{ n } Ć”lbum | { n } Ć”lbums", + "tracks": "{ n } pista en | { n } pista en" + }, + "modal": { + "embed": { + "header": "InclĆŗe esta canciĆ³n no teu sitio web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Eliminar avatar", + "more": "Cargando seguidorasā€¦" + }, + "description": { + "library": "Este artista estĆ” presente nas seguintes bibliotecas:" + }, + "header": { + "album": "Ɓlbums deste artista", + "library": "Bibliotecas da usuaria", + "track": "Novas pistas deste artista" + }, + "link": { + "filter": "Ver ficheiros" + }, + "message": { + "filter": "Actualmente estĆ”s a ocultar contido relacionado con este artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Editar este artista", + "suggest": "Non podemos cargar a canciĆ³n" + }, + "message": { + "remote": "Este obxeto estĆ” xestionado en outro servidor, non podes editalo." + } + }, + "Artists": { + "button": { + "search": "Buscar", + "upload": "Engade algo de mĆŗsica" + }, + "empty": { + "noResults": "Sen resultados para a tĆŗa consulta" + }, + "header": { + "browse": "Buscando artistas" + }, + "label": { + "excludeCompilation": "ExcluĆ­r Artistas da CompilaciĆ³n", + "search": "Nome do artista", + "tags": "Etiquetas" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por pĆ”xina" + }, + "placeholder": { + "search": "Buscarā€¦" + }, + "title": "Artistas" + }, + "EditCard": { + "button": { + "approve": "Aprobar", + "delete": "Borrar", + "reject": "Rexeitar" + }, + "header": { + "modification": "Data de modificaciĆ³n" + }, + "link": { + "track": "CanciĆ³n #{ id } - % { name }" + }, + "modal": { + "content": { + "warning": "Vaise eliminar completamente a suxestiĆ³n, a acciĆ³n Ć© irreversible." + }, + "delete": { + "header": "Eliminar esta suxestiĆ³n?" + } + }, + "status": { + "applied": "Aprobada e aplicada", + "approved": "Aprobada", + "pending": "Ficheiros pendentes", + "rejected": "Rexeitado" + }, + "table": { + "update": { + "header": { + "field": "Campo", + "newValue": "Novo valor", + "oldValue": "Valor anterior" + }, + "notApplicable": "N/A" + } + } + }, + "EditForm": { + "button": { + "cancel": "Cancelar", + "clear": "Baleirar", + "new": "Enviar outra ediciĆ³n", + "reset": "Restablecer ao valor inicial", + "showAll": "Mostrar todas as ediciĆ³ns", + "showUnreviewed": "Restrinxir a ediciĆ³ns non revisadas", + "submit": "Enviar e aplicar a ediciĆ³n", + "suggest": "Enviar suxestiĆ³n" + }, + "empty": { + "suggestEdit": "Suxire un cambio utilizando o formulario inferior" + }, + "header": { + "failure": "Erro Ć³ gardar o axuste", + "recentEdits": "Recentemente engadida", + "success": "Enviouse correctamente a ediciĆ³n.", + "unreviewed": "EdiciĆ³ns recentes agardando revisiĆ³n" + }, + "label": { + "summary": "Resumen (optativo)" + }, + "message": { + "noPermission": "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serĆ”n revisados antes da sĆŗa aprobaciĆ³n." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "Un breve resumen describindo os cambios." + } + }, + "FileUpload": { + "button": { + "cancel": "Cancelar", + "retry": "Voltar a intentar as subidas" + }, + "description": { + "import": "Estado da importaciĆ³n", + "previousImport": "Resultados da importaciĆ³n anterior:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Fallo Ć³ iniciar a importaciĆ³n", + "local": "Importa mĆŗsica desde a almacenaxe local", + "server": "Estado da importaciĆ³n", + "status": "Estado da importaciĆ³n" + }, + "label": { + "extensions": "ExtensiĆ³ns soportadas: { extensions }", + "remainingSpace": "Almacenaxe restante", + "uploadWidget": "Preme para escoller os ficheiros a subir ou arrastra e solta ficheiros ou directorios" + }, + "link": { + "picard": "RecomendĆ”moslle utilizar Picard para ese propĆ³sito.", + "processing": "Procesando", + "uploading": "Subindo" + }, + "message": { + "listener": "Esta pĆ”xina solicĆ­tache que confirmes que queres saĆ­r - non se gardarĆ”n os datos escritos.", + "local": { + "copyright": "Non estĆ”s a subir contido con copyright a unha biblioteca pĆŗblica, de outro xeito poderĆ­as faltarlle a lei", + "format": "Os ficheiros de mĆŗsica que estĆ”s a subir estĆ”n en formato OGG, Flac, MP3 ou AIFF", + "message": "Vai subir mĆŗsica a sĆŗa biblioteca. Antes de seguir, asegĆŗrese de que:", + "tag": "Os ficheiros de mĆŗsica que estĆ” a subir estĆ”n correctamente etiquetados." + } + }, + "table": { + "upload": { + "header": { + "actions": "AcciĆ³ns", + "filename": "Nome do ficheiro", + "size": "TamaƱo", + "status": "Estado" + }, + "progress": "{percent}%", + "status": { + "pending": "Pendente", + "uploaded": "Subida", + "uploading": "Subindoā€¦" + } + } + }, + "tooltip": { + "denied": "Subida denegada, asegĆŗrese de que o ficheiro non Ć© demasiado grande e que non acadou o lĆ­mite de cuota", + "extension": "Tipo de ficheiro non vĆ”lido, asegĆŗrate de que subes un ficheiro de audio. ExtensiĆ³ns de ficheiros soportadas { extensions }", + "network": "Fallou a rede mentras se subĆ­a o ficheiro", + "retry": "Reintentar", + "size": "Fallou a subida, mira que non sexa demasiado grande", + "timeout": "Caducou a subida, intĆ©nteo de novo" + } + }, + "FsBrowser": { + "button": { + "import": "Importar" + } + }, + "FsLogs": { + "empty": { + "notStarted": "A importaciĆ³n non comezou" + } + }, + "Home": { + "header": { + "newChannels": "Novas canles", + "playlists": "Listas de reproduciĆ³n", + "recentlyAdded": "Recentemente engadida", + "recentlyFavorited": "Favorecida recentemente", + "recentlyListened": "Escoitada recentemente" + }, + "title": "Biblioteca" + }, + "ImportStatusModal": { + "button": { + "close": "Pechar" + }, + "error": { + "importFailure": "Algo fallou no proceso de subida. AquĆ­ embaixo atoparĆ”s mĆ”is informaciĆ³n.", + "invalidMetadata": { + "label": "Metadatos non vĆ”lidos", + "message": "Os metadatos incluĆ­dos no ficheiro non son vĆ”lidos ou faltan algĆŗns campos requeridos." + }, + "unknownError": { + "label": "Fallo descoƱecido", + "message": "Aconteceu un fallo descoƱecido" + } + }, + "header": { + "importDetail": "Estado da importaciĆ³n" + }, + "link": { + "documentation": "Lea a documentaciĆ³n para este fallo", + "support": "Abrir un fĆ­o de axuda (incluĆ­r informaciĆ³n de depuraciĆ³n abaixo na tĆŗa mensaxe)" + }, + "message": { + "importDetail": "A subida estĆ” pendente e axiƱa serĆ” procesada polo servidor.", + "importSuccess": "A subida non se procesou correctamente polo servidor." + }, + "table": { + "error": { + "debug": "InformaciĆ³n de depuraciĆ³n", + "errorDetail": "Detalles do fallo", + "errorType": "Tipo de fallo", + "help": "Obter axuda" + } + }, + "warning": { + "importSkipped": "A subida non se realizou porque xa ten unha semellante dispoƱible nunha das sĆŗas bibliotecas." + } + }, + "Podcasts": { + "button": { + "cancel": "Cancelar", + "channel": "Crear Canle", + "feed": "Subscribirse a fonte", + "search": "Buscar", + "subscribe": "Subscribir" + }, + "empty": { + "noResults": "Sen resultados para a tĆŗa consulta" + }, + "header": { + "browse": "Buscando Podcast" + }, + "label": { + "search": "TĆ­tulo do podcast", + "tags": "Etiquetas" + }, + "modal": { + "subscription": { + "header": "SubscriciĆ³n" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por pĆ”xina" + }, + "placeholder": { + "search": "Buscarā€¦" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Crea unha radio", + "create": "Crea a tĆŗa propia radio", + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a tĆŗa busca" + }, + "header": { + "browse": "Buscando radios", + "instance": "Radios da instancia", + "user": "Radios da usuaria" + }, + "label": { + "search": "Buscar" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por pĆ”xina" + }, + "placeholder": { + "search": "Escribe un nome de radioā€¦" + }, + "title": "Radios" + }, + "TagDetail": { + "header": { + "channels": "Canles", + "tracks": "CanciĆ³ns" + }, + "link": { + "albums": "Ɓlbums", + "artists": "Artistas", + "moderation": "Actualizar regra de moderaciĆ³n" + } + }, + "TagSelector": { + "placeholder": { + "search": "Buscarā€¦" + } + }, + "TrackBase": { + "button": { + "cancel": "Cancelar", + "delete": "Eliminar", + "download": "Descargar", + "edit": "Editar", + "embed": "Incrustar", + "more": "MĆ”isā€¦", + "play": "Reproducir" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderaciĆ³n", + "wikipedia": "Buscar en Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canciĆ³n xunto cos datos e ficheiros relacionados, esta acciĆ³n non ten volta." + }, + "header": "Eliminar esta canciĆ³n?" + }, + "embed": { + "header": "InclĆŗe esta canciĆ³n no teu sitio web" + } + }, + "subtitle": { + "with-uploader": "Subida por {0} o {1}", + "without-uploader": "Subida o {0}" + }, + "title": "CanciĆ³n" + }, + "TrackDetail": { + "description": { + "library": "Esta canciĆ³n estĆ” presente nas seguintes bibliotecas:" + }, + "header": { + "episode": "Detalles do episodio", + "library": "Bibliotecas relacionadas", + "playlists": "Listas relacionadas", + "release": "Detalles da publicaciĆ³n", + "track": "Detalles" + }, + "link": { + "musicbrainz": "Ver en MusicBrainz" + }, + "notApplicable": "N/A", + "table": { + "release": { + "album": "Ɓlbum", + "artist": "Artista", + "copyright": "Copyright", + "license": "Licenza", + "series": "Serie", + "url": "URL", + "year": "Ano" + }, + "track": { + "bitrate": { + "label": "Taxa de bits", + "value": "{bitrate}/s" + }, + "codec": "CĆ³dec", + "downloads": "Descargas", + "duration": "DuraciĆ³n", + "size": "TamaƱo" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Editar esta canciĆ³n", + "suggest": "Non podemos cargar a canciĆ³n" + }, + "message": { + "remote": " Este obxecto estĆ” xestionado noutro servidor, non podes editalo." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Engadir filtro", + "save": "Gardar" + }, + "description": { + "builder": "Pode utilizar esta interface para construĆ­r a sĆŗa propia radio, que reproducirĆ” canciĆ³ns segundo o seu criterio." + }, + "header": { + "builder": "Construtor", + "created": "Radio creada", + "matches": "{ n } canciĆ³n coicidente cos filtros combinados | { n } canciĆ³ns coincidentes cos filtros combinados", + "updated": "Radio actualizada" + }, + "label": { + "description": "DescriciĆ³n", + "filter": "Engade filtros para personalizar a tĆŗa radio", + "name": "Nome da Radio", + "public": "Mostrar pĆŗblicamente" + }, + "option": { + "filter": "Escolla un filtro" + }, + "placeholder": { + "description": "A miƱa abraiante descriciĆ³n", + "name": "A miƱa increĆ­ble radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data de acceso", - "account": "Conta", - "creationDate": "Data de creaciĆ³n", - "domain": "Dominio", - "importStatus": "Estado da importaciĆ³n", - "library": "Biblioteca", - "name": "Nome", - "size": "TamaƱo", - "visibility": "Visibilidade" + "actions": "AcciĆ³ns", + "candidates": "Candidatas", + "config": "Configurar", + "exclude": "ExcluĆ­r", + "name": "Nome do filtro" } } }, + "title": "Constructor de Radio" + }, + "Filter": { + "cancelButton": "Cancelar", + "excludeLabel": "ExcluĆ­r", + "matchingTracks": "0 canciĆ³ns cumpren co filtro | {n} canciĆ³n cumpre co filtro | {n} canciĆ³ns cumpren co filtro", + "matchingTracksModalHeader": "Filtro coincidente da canciĆ³n", + "removeButton": "Eliminar" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "CategorĆ­a", + "search": "Buscar" + }, + "link": { + "local": "Local", + "moderation": "Abrir na interface de moderaciĆ³n" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome, contaā€¦" + }, + "table": { + "channel": { + "header": { + "account": "Conta", + "albums": "Ɓlbums", + "creationDate": "Data de creaciĆ³n", + "domain": "Dominio", + "name": "Nome", + "tracks": "CanciĆ³ns" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Os Ć”lbums seleccionados vanse eliminar, asĆ­ como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acciĆ³n non ten volta." + } + }, + "label": { + "search": "Buscar" + }, + "link": { + "local": "Local", + "moderation": "Abrir na interface de moderaciĆ³n" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por tĆ­tulo, artista, Ć”lbumeā€¦" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data de creaciĆ³n", + "domain": "Dominio", + "name": "TĆ­tulo", + "releaseDate": "Data da Ćŗltima vista", + "tracks": "CanciĆ³ns" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vaise eliminar o artista seleccionado, asĆ­ como as subidas asociadas, canciĆ³ns, Ć”lbums, favoritos e historial de escoita. Esta acciĆ³n non ten volta." + } + }, + "label": { + "category": "CategorĆ­a", + "search": "Buscar" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome de usuaria, bioā€¦" + }, + "table": { + "artist": { + "header": { + "albums": "Ɓlbums", + "creationDate": "Data de creaciĆ³n", + "domain": "Dominio", + "name": "Nome", + "tracks": "CanciĆ³ns" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "all": "Todos", + "approved": "Aprobada", + "pending": "Ficheiros pendentes", + "rejected": "Rexeitado" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por tĆ­tulo, artista, dominioā€¦" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vaise eliminar a biblioteca seleccionada, asĆ­ como as subidas asociadas e seguimentos. Esta acciĆ³n Ć© irreversible." + } + }, + "label": { + "search": "Buscar", + "visibility": "Visibilidade" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome de usuaria, bioā€¦" + }, + "table": { + "library": { + "header": { + "account": "Conta", + "creationDate": "Data de creaciĆ³n", + "domain": "Dominio", + "followers": "Seguidoras", + "name": "Nome", + "uploads": "Subidas", + "visibility": "Visibilidade" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vas eliminar a etiqueta e desligala do contido existente, se o estĆ”. Esta acciĆ³n non ten volta." + } + }, + "label": { + "search": "Buscar" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por nome" + }, + "table": { + "tag": { + "header": { + "albums": "Ɓlbums", + "artists": "Artistas", + "creationDate": "Data de creaciĆ³n", + "name": "Nome", + "tracks": "CanciĆ³ns" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "As canciĆ³ns seleccionadas vanse eliminar, asĆ­ como as subidas asociadas, favoritos e historial de escoita. Esta acciĆ³n Ć© irreversible." + } + }, + "label": { + "search": "Buscar" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, tĆ­tulo, artista, Ć”lbum, ID MusicBrainzā€¦" + }, + "table": { + "track": { + "header": { + "album": "Ɓlbum", + "artist": "Artista", + "creationDate": "Data de creaciĆ³n", + "domain": "Dominio", + "license": "Licenza", + "title": "TĆ­tulo" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Esta acciĆ³n non Ć© reversible." + } + }, + "label": { + "search": "Buscar", + "status": "Estado", + "visibility": "Visibilidade" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", "option": { "all": "Todos", "failed": "Fallou", @@ -1862,396 +2316,68 @@ }, "label": "Ordenando" }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Esta acciĆ³n non Ć© reversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar", - "status": "Estado", - "visibility": "Visibilidade" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { "search": "Buscar por dominio, nome de usuaria, bioā€¦" }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data de acceso", "account": "Conta", "creationDate": "Data de creaciĆ³n", "domain": "Dominio", - "followers": "Seguidoras", + "importStatus": "Estado da importaciĆ³n", + "library": "Biblioteca", "name": "Nome", - "uploads": "Subidas", + "size": "TamaƱo", "visibility": "Visibilidade" } } - }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vaise eliminar a biblioteca seleccionada, asĆ­ como as subidas asociadas e seguimentos. Esta acciĆ³n Ć© irreversible." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Buscar", - "visibility": "Visibilidade" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bioā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Ɓlbum", - "artist": "Artista", - "creationDate": "Data de creaciĆ³n", - "domain": "Dominio", - "license": "Licenza", - "title": "TĆ­tulo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "As canciĆ³ns seleccionadas vanse eliminar, asĆ­ como as subidas asociadas, favoritos e historial de escoita. Esta acciĆ³n Ć© irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por dominio, tĆ­tulo, artista, Ć”lbum, ID MusicBrainzā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Ɓlbums", - "creationDate": "Data de creaciĆ³n", - "domain": "Dominio", - "name": "Nome", - "tracks": "CanciĆ³ns" - } - } - }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "label": { - "category": "CategorĆ­a", - "search": "Buscar" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vaise eliminar o artista seleccionado, asĆ­ como as subidas asociadas, canciĆ³ns, Ć”lbums, favoritos e historial de escoita. Esta acciĆ³n non ten volta." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bioā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Ɓlbums", - "artists": "Artistas", - "creationDate": "Data de creaciĆ³n", - "name": "Nome", - "tracks": "CanciĆ³ns" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vas eliminar a etiqueta e desligala do contido existente, se o estĆ”. Esta acciĆ³n non ten volta." - } - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por nome" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Todos", - "approved": "Aprobada", - "pending": "Ficheiros pendentes", - "rejected": "Rexeitado" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "placeholder": { - "search": "Buscar por tĆ­tulo, artista, dominioā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - }, - "label": { - "status": "Estado" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data de creaciĆ³n", - "domain": "Dominio", - "name": "TĆ­tulo", - "releaseDate": "Data da Ćŗltima vista", - "tracks": "CanciĆ³ns" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Os Ć”lbums seleccionados vanse eliminar, asĆ­ como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acciĆ³n non ten volta." - } - }, - "link": { - "local": "Local", - "moderation": "Abrir na interface de moderaciĆ³n" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por tĆ­tulo, artista, Ć”lbumeā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Conta", - "domain": "Dominio", - "local": "Local", - "owner": "Dona", - "type": "Tipo" - }, - "status": { - "assignedTo": "Asignada a", - "internalNotes": "Notas internas", - "resolutionDate": "Data da resoluciĆ³n", - "resolved": "Resolto", - "status": "Estado", - "unresolved": "Non resolto" - }, - "report": { - "category": "CategorĆ­a", - "creationDate": "Data de creaciĆ³n", - "submittedBy": "Enviado por" + "AccountsTable": { + "action": { + "purge": { + "label": "Limpar" } }, - "header": { - "actions": "AcciĆ³ns", - "notes": "Notas internas", - "message": "Mensaxe", - "reportedObject": "Elemento denunciado" - }, - "button": { - "confirmDelete": "Borrar", - "delete": "Eliminar obxeto denunciado", - "resolve": "Resolver", - "unresolve": "Non resolto" - }, - "modal": { - "delete": { - "header": "Eliminar obxeto denunciado?", - "content": { - "warning": "Esto vai eliminar o elemento asociado a esta denuncia e marcala como resolta. Esta eliminaciĆ³n Ć© irreversible." - } - } - }, - "notApplicable": "N/A", - "link": { - "moderation": "Actualizar regra de moderaciĆ³n", - "report": "Denunciar { id }", - "publicPage": "Ver pĆ”xina pĆŗblica" - }, - "warning": { - "objectDeleted": "Eliminouse o elemento asociado a esta denuncia." - } - }, - "UserRequestCard": { - "header": { - "actions": "AcciĆ³ns", - "notes": "Notas internas", - "signup": "Mensaxe" - }, - "button": { - "approve": "Aprobar", - "reject": "Rexeitar" - }, - "table": { - "status": { - "approved": "Aprobada", - "assignedTo": "Asignada a", - "internalNotes": "Notas internas", - "pending": "Pendente", - "refused": "Rexeitada", - "status": "Estado" - }, - "request": { - "creationDate": "Data de creaciĆ³n", - "submittedBy": "Enviado por" - } - }, - "notApplicable": "N/A", - "link": { - "request": "Solicitar { id }" - }, - "message": { - "signup": "Esta usuaria quere rexistrarse na tĆŗa instancia." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Engadir nova regra de moderaciĆ³n", - "editRule": "Editar regra de moderaciĆ³n", - "failure": "Erro Ć³ crear a regra" - }, "label": { - "blockAll": "Bloquear todo", - "policyDisabled": "Desactivado", - "policyEnabled": "Activado", - "silenceActivity": "Acalar actividade", - "silenceNotifications": "Acalar notificaciĆ³ns", - "customizeRule": "Ou personalice a sĆŗa regra", - "policyReason": "RazĆ³n", - "rejectMedia": "Rexeitar medios" + "search": "Buscar" }, - "tooltip": { - "blockAll": "Bloquear todo desta conta ou dominio. Esto evitarĆ” calquera interacciĆ³n coa entidade, e eliminarĆ” o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", - "rejectMedia": "Non baixar ningĆŗn ficheiro de medios (audio, portada, avatar da contaā€¦) desta conta ou dominio. Esto eliminarĆ” tamĆ©n o contido existente.", - "summary": "Explica por que aplicas esta polĆ­tica. Dependendo da configuraciĆ³n da tĆŗa instancia esto axudarache a lembrar por que actuaches sobre esta conta ou dominio, e pode ser mostrado pĆŗblicamente para que as usuarias entendan cales son as regras de moderaciĆ³n que se aplican.", - "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", - "silenceNotifications": "Evitar que o dominio ou conta mostre notificaciĆ³ns, excepto das seguidoras.", - "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condiciĆ³n sen eliminala completamente." + "link": { + "local": "Conta local" }, - "button": { - "cancel": "Cancelar", - "create": "Crear", - "delete": "Borrar", - "confirm": "Borrar regra de moderaciĆ³n", - "update": "Actualizar" + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" }, - "modal": { - "delete": { - "header": "Eliminar esta regra de moderaciĆ³n?", - "content": { - "warning": "Esta acciĆ³n non Ć© reversible." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Engadir nota" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { - "summary": "Describe quĆ© acciĆ³ns se tomaron, ou calquera outra actualizaciĆ³nā€¦" + "search": "Buscar por dominio, nome de usuaria, bioā€¦" }, - "header": { - "failure": "Fallo ao enviar a nota" + "table": { + "account": { + "header": { + "domain": "Dominio", + "firstSeen": "Primeira visualizaciĆ³n", + "lastSeen": "ƚltima vista", + "moderationRule": "Baixo regra de moderaciĆ³n", + "name": "Nome", + "uploads": "Subidas" + }, + "moderationRule": "Si" + } } }, "DomainsTable": { @@ -2266,6 +2392,16 @@ "label": "Eliminar da lista-permitir" } }, + "empty": { + "noPods": "Non se atoparon outras instancias" + }, + "label": { + "inList": "EstĆ” presente na lista de permitidos", + "search": "Buscar" + }, + "link": { + "list": "Este dominio estĆ” presente na tĆŗa lista-permitido" + }, "option": { "all": "Todos", "no": "Non", @@ -2279,76 +2415,32 @@ }, "label": "Ordenando" }, - "table": { - "domain": { - "header": { - "firstSeen": "Primeira visualizaciĆ³n", - "name": "Nome", - "receivedMessages": "Mensaxes recibidas", - "moderationRule": "Baixo regra de moderaciĆ³n", - "users": "Usuarias" - }, - "moderationRule": "Si" - } - }, - "label": { - "inList": "EstĆ” presente na lista de permitidos", - "search": "Buscar" - }, - "empty": { - "noPods": "Non se atoparon outras instancias" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { "search": "Buscar por nomeā€¦" }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - }, - "link": { - "list": "Este dominio estĆ” presente na tĆŗa lista-permitido" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Dominio", "firstSeen": "Primeira visualizaciĆ³n", - "lastSeen": "ƚltima vista", - "name": "Nome", "moderationRule": "Baixo regra de moderaciĆ³n", - "uploads": "Subidas" + "name": "Nome", + "receivedMessages": "Mensaxes recibidas", + "users": "Usuarias" }, "moderationRule": "Si" } - }, - "link": { - "local": "Conta local" - }, - "action": { - "purge": { - "label": "Limpar" - } - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bioā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Editar" + }, + "header": { + "rule": "Regra" + }, "label": { "blockAll": "Bloquear todo", "muteActivity": "Acalar actividade", @@ -2356,15 +2448,49 @@ "reason": "RazĆ³n", "rejectMedia": "Rexeitar medios" }, - "button": { - "edit": "Editar" - }, "status": { "enabled": "Activado", "paused": "Pausada" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Cancelar", + "confirm": "Borrar regra de moderaciĆ³n", + "create": "Crear", + "delete": "Borrar", + "update": "Actualizar" }, "header": { - "rule": "Regra" + "addRule": "Engadir nova regra de moderaciĆ³n", + "editRule": "Editar regra de moderaciĆ³n", + "failure": "Erro Ć³ crear a regra" + }, + "label": { + "blockAll": "Bloquear todo", + "customizeRule": "Ou personalice a sĆŗa regra", + "policyDisabled": "Desactivado", + "policyEnabled": "Activado", + "policyReason": "RazĆ³n", + "rejectMedia": "Rexeitar medios", + "silenceActivity": "Acalar actividade", + "silenceNotifications": "Acalar notificaciĆ³ns" + }, + "modal": { + "delete": { + "content": { + "warning": "Esta acciĆ³n non Ć© reversible" + }, + "header": "Eliminar esta regra de moderaciĆ³n?" + } + }, + "tooltip": { + "blockAll": "Bloquear todo desta conta ou dominio. Isto evitarĆ” calquera interacciĆ³n coa entidade, e eliminarĆ” o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", + "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condiciĆ³n sen eliminala completamente.", + "rejectMedia": "Non baixar ningĆŗn ficheiro de medios (audio, portada, avatar da contaā€¦) desta conta ou dominio. Esto eliminarĆ” tamĆ©n o contido existente.", + "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", + "silenceNotifications": "Evitar que o dominio ou conta mostre notificaciĆ³ns, excepto das seguidoras.", + "summary": "Explica por que aplicas esta polĆ­tica. Dependendo da configuraciĆ³n da tĆŗa instancia esto axudarache a lembrar por que actuaches sobre esta conta ou dominio, e pode ser mostrado pĆŗblicamente para que as usuarias entendan cales son as regras de moderaciĆ³n que se aplican." } }, "InstancePolicyModal": { @@ -2374,161 +2500,130 @@ }, "modal": { "manage": { - "header": "Xestionar as regras de moderaciĆ³n para { obj }", "content": { "warning": "Esta entidade estĆ” suxeita a regras especĆ­ficas de moderaciĆ³n" - } + }, + "header": "Xestionar as regras de moderaciĆ³n para { obj }" } } }, + "NoteForm": { + "button": { + "add": "Engadir nota" + }, + "header": { + "failure": "Fallo ao enviar a nota" + }, + "placeholder": { + "summary": "Describe quĆ© acciĆ³ns se tomaron, ou calquera outra actualizaciĆ³nā€¦" + } + }, "NotesThread": { "button": { "delete": "Borrar" }, "modal": { "delete": { - "header": "Eliminar esta nota?", "content": { "warning": "Vai eliminar a nota. Esta acciĆ³n non ten volta." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Conta", - "albums": "Ɓlbums", - "creationDate": "Data de creaciĆ³n", - "domain": "Dominio", - "name": "Nome", - "tracks": "CanciĆ³ns" + }, + "header": "Eliminar esta nota?" } } }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" + "ReportCard": { + "button": { + "confirmDelete": "Borrar", + "delete": "Eliminar obxeto denunciado", + "resolve": "Resolver", + "unresolve": "Non resolto" }, - "label": "Ordenando" + "header": { + "actions": "AcciĆ³ns", + "message": "Mensaxe", + "notes": "Notas internas", + "reportedObject": "Elemento denunciado" + }, + "link": { + "moderation": "Actualizar regra de moderaciĆ³n", + "publicPage": "Ver pĆ”xina pĆŗblica", + "report": "Denunciar { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Esto vai eliminar o elemento asociado a esta denuncia e marcala como resolta. Esta eliminaciĆ³n Ć© irreversible." + }, + "header": "Eliminar obxeto denunciado?" + } + }, + "notApplicable": "N/A", + "table": { + "object": { + "account": "Conta", + "domain": "Dominio", + "local": "Local", + "owner": "Dona", + "type": "Tipo" + }, + "report": { + "category": "CategorĆ­a", + "creationDate": "Data de creaciĆ³n", + "submittedBy": "Enviado por" + }, + "status": { + "assignedTo": "Asignada a", + "internalNotes": "Notas internas", + "resolutionDate": "Data da resoluciĆ³n", + "resolved": "Resolto", + "status": "Estado", + "unresolved": "Non resolto" + } + }, + "warning": { + "objectDeleted": "Eliminouse o elemento asociado a esta denuncia." + } }, - "label": { - "category": "CategorĆ­a", - "search": "Buscar" - }, - "link": { - "local": "Local", - "moderation": "Abrir na interface de moderaciĆ³n" - }, - "placeholder": { - "search": "Buscar por dominio, nome, contaā€¦" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" + "UserRequestCard": { + "button": { + "approve": "Aprobar", + "reject": "Rexeitar" + }, + "header": { + "actions": "AcciĆ³ns", + "notes": "Notas internas", + "signup": "Mensaxe" + }, + "link": { + "request": "Solicitar { id }" + }, + "message": { + "signup": "Esta usuaria quere rexistrarse na tĆŗa instancia." + }, + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Data de creaciĆ³n", + "submittedBy": "Enviado por" + }, + "status": { + "approved": "Aprobada", + "assignedTo": "Asignada a", + "internalNotes": "Notas internas", + "pending": "Pendente", + "refused": "Rexeitada", + "resolutionDate": "Data da resoluciĆ³n", + "status": "Estado" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Estado da conta", - "email": "Email", - "lastActivity": "ƚltima actividade", - "permissions": "Permisos", - "signup": "Rexistrarse", - "status": "Estado", - "username": "Nome de usuaria" - }, - "accountStatus": { - "active": "Activo", - "inactive": "Non activo" - }, - "status": { - "admin": "Admin", - "regular": "usuaria normal", - "staff": "Persoal do equipo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "DirecciĆ³n da orde" - }, - "label": "Ordenando" - }, - "permission": { - "library": "Biblioteca", - "moderation": "ModeraciĆ³n", - "settings": "Axustes" - }, - "notApplicable": "N/A", - "placeholder": { - "search": "Buscar por nome de usuaria, correo-e, nomeā€¦" - }, - "pagination": { - "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Todos", - "expired": "Caducado/utilizado", - "open": "Abrir" - }, - "table": { - "invitation": { - "header": { - "code": "CĆ³digo", - "creationDate": "Data de creaciĆ³n", - "expirationDate": "Data de caducidade", - "owner": "Dona", - "status": "Estado" - } - } - }, - "action": { - "delete": "Borrar" - }, - "label": { - "expired": "Caducado", - "unused": "Non utilizado", - "search": "Buscar", - "status": "Estado", - "used": "Utilizado" - }, - "ordering": { - "label": "Ordenando" - }, - "placeholder": { - "search": "Buscar por nome de usuaria, correo-e, cĆ³digoā€¦" - }, - "pagination": { - "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" - } - }, "InvitationForm": { "button": { "clear": "Baleirar", "new": "Obter un novo convite" }, - "table": { - "invitation": { - "header": { - "code": "CĆ³digo", - "link": "Compartir ligazĆ³n" - } - } - }, "header": { "failure": "Erro Ć³ crear o convite" }, @@ -2537,523 +2632,59 @@ }, "placeholder": { "invitation": "Deixar baleiro para un cĆ³digo aleatorio" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "AcciĆ³ns", - "label": "Etiqueta do campo", - "type": "Tipo de campo", - "required": "Requerido" - }, - "type": { - "long": "Texto longo", - "short": "Texto curto" - }, - "required": { - "false": "Non", - "true": "Si" - } - } - }, - "button": { - "add": "Engade un novo campo", - "edit": "Formulario de ediciĆ³n", - "preview": "Formulario vista previa" - }, - "label": { - "additionalField": "Campo adicional", - "additionalFields": "Campos adicionais", - "delete": "Borrar", - "helpText": "Texto de axuda", - "moveDown": "Baixar", - "moveUp": "Subir" - }, - "help": { - "additionalFields": "Campos de formulario adicionais para mostrar. SĆ³ se mostran se se activa a validaciĆ³n manual do rexistro.", - "helpText": "Un texto optativo para mostrar Ć³ inicio do formulario de rexistro." - } - }, - "SettingsGroup": { - "header": { - "image": "Imaxe actual", - "error": "Erro Ć³ gardar os axustes" - }, - "button": { - "save": "Gardar" - }, - "message": { - "success": "Axustes actualizados correctamente." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Todos" - }, - "label": { - "category": "CategorĆ­a" - } - }, - "ReportModal": { - "header": { - "disabled": "DesactivĆ”ronse as denuncias anĆ³nimas, conĆ©ctate para enviar unha denuncia.", - "modal": "Queres denunciar este elemento?", - "submissionFailure": "Erro Ć³ enviar a denuncia" - }, - "button": { - "cancel": "Cancelar", - "submit": "Enviar denuncia" - }, - "label": { - "email": "Email", - "forwardToDomain": "Reenviar a { domain}", - "message": "Mensaxe" - }, - "description": { - "forwardToDomain": "Reenviar unha copia anĆ³nima da tĆŗa denuncia Ć³ servidor que hospeda este elemento.", - "message": "Utiliza este campo para proporcionar contexto adicional Ć” moderaciĆ³n para xestionar a denuncia.", - "modal": "Utiliza este formulario para enviar unha denuncia Ć³ equipo de moderaciĆ³n.", - "email": "Utilizaremos este correo se precisamos contactar contigo referente a esta denuncia." - }, - "message": { - "submissionSuccess": "Denuncia enviada correctamente, grazas" - } - }, - "FilterModal": { - "button": { - "cancel": "Cancelar", - "hide": "Agochar contido" - }, - "message": { - "success": "Engadeuse o filtro de contido" - }, - "header": { - "modal": "Queres agochar o contido da artista \"{ radio }\"?", - "failure": "Erro Ć³ crear o filtro" - }, - "warning": { - "createFilter": { - "listItem2": "No widget \"AdiciĆ³ns recentes\"", - "listItem3": "En listaxes de artistas e Ć”lbums", - "listItem1": "En favoritas e historial de escoita de outras usuarias", - "listItem4": "Nas suxestiĆ³ns de radios", - "listIntro": "Non volverĆ”s a ver as pistas, Ć”lbums e actividade relacionados con este artista:" - } - }, - "help": { - "createFilter": "Podes xestionar e actualizar os teus filtros desde os axustes da tĆŗa conta." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Algo fallou ao actualizar os datos:", - "success": "ActualizĆ”ronse os datos desde o servidor remoto.", - "pending": "A solicitude de actualizaciĆ³n non se realizou a tempo no noso servidor. Procesarase mĆ”is tarde.", - "skipped": "O servidor remoto respondeu, pero o tipo de resposta non estĆ” soportado por Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Houbo un fallo HTTP ao contactar co servidor remoto", - "invalidAttributesError": "Os datos devoltos polo servidor remoto teƱen valores non vĆ”lidos ou faltan atributos", - "connectionError": "Non se puido conectar ao servidor remoto", - "httpStatus": "O servidor remoto respondeu con HTTP { status }", - "timeoutError": "O servidor remoto non respondeu rĆ”pido abondo", - "invalidJsonError": "O servidor remoto devolveu un datos JSON ou JSON-LD non vĆ”lidos", - "unknownError": "Fallo descoƱecido" - }, - "label": { - "detail": "Detalles do fallo", - "type": "Tipo de fallo" - } - } - }, - "button": { - "close": "Pechar", - "reload": "Pechar e recargar pĆ”xina" - }, - "header": { - "saveFailure": "Erro Ć³ gardar os axustes", - "failure": "Actualizar", - "pending": "Actualizar info da instancia", - "success": "ActualizaciĆ³n correcta", - "skipped": "Omiteuse a actualizaciĆ³n", - "refresh": "Actualizando obxeto desde servidor remotoā€¦" - }, - "loader": { - "fetchRequest": "Solicitando a obtenciĆ³nā€¦", - "awaitingResult": "Cargando as favoritasā€¦" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Sen biblioteca coincidente." - }, - "button": { - "showMore": "Mostrar mĆ”is" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Atallos do reprodutor de audio", - "clearQueue": "Limpar cola", - "decreaseVolume": "Baixar volume", - "expandQueue": "Despregar vista da cola/reprodutor", - "increaseVolume": "Aumentar volume", - "playPause": "Pausar/reproducir pista actual", - "playNext": "Reproducir canciĆ³n seguinte", - "playPrevious": "Reproducir canciĆ³n anterior", - "seekBack30": "Buscar atrĆ”s 30s", - "seekBack5": "Adiantar 5s", - "seekForward30": "Adiantar 30s", - "seekForward5": "Adiantar 5s", - "shuffleQueue": "Barallar a cola", - "toggleFavorite": "Marca de favorito", - "toggleMute": "Activar silencio", - "toggleLoop": "Activar a repeticiĆ³n da cola" - }, - "general": { - "focus": "Foco na caixa de busca", - "label": "Atallos xerais", - "show": "Mostrar atallos de teclado dispoƱibles", - "unfocus": "SaĆ­r da barra de busca" - } - }, - "button": { - "close": "Pechar" - }, - "header": { - "modal": "Atallos de teclado" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Elixe a tĆŗa instancia", - "failure": "Non se puido conectar ao URL proporcionado", - "suggestions": "OpciĆ³ns suxeridas" - }, - "label": { - "url": "URL da instancia" - }, - "help": { - "notFunkwhaleServer": "O enderezo proporcionado non Ć© un servidor Funkwhale", - "serverDown": "Igoal non estĆ” a funcionar o servidor", - "selectPod": "Para continuar, elixe a instancia de Funkwhale Ć” que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opciĆ³ns suxeridas." - }, - "message": { - "newUrl": "EstĆ”s utilizando a instancia Funkwhale en { url }" - } - }, - "Queue": { - "button": { - "clear": "Baleirar", - "close": "Pechar", - "stopRadio": "Deter radio" - }, - "label": { - "duration": "DuraciĆ³n", - "addArtistContentFilter": "Ocultar contido deste artistaā€¦", - "next": "Seguinte canciĆ³n", - "pause": "Pausar", - "play": "Reproducir", - "previous": "CanciĆ³n anterior", - "queue": "Cola", - "remove": "Eliminar", - "restart": "Reiniciar canciĆ³n" - }, - "message": { - "radio": "As novas canciĆ³ns engadiranse aquĆ­ automĆ”ticamente.", - "automaticPlay": "A seguinte canciĆ³n reproducirase automĆ”ticamente en poucos segundosā€¦" - }, - "header": { - "failure": "Non se puido cargar a canciĆ³n", - "radio": "Tes a radio acendida" - }, - "meta": { - "queuePosition": "CanciĆ³n { index } de { length }" - }, - "warning": { - "connectivity": "PoderĆ­a ter problemas de conectividade." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copiar" - }, - "title": "Mostrar/ocultar contrasinal", - "message": { - "copy": "Texto copiado ao portapapeis!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Editar" - } - }, - "Button": { - "startRadio": "Reproducir radio", - "stopRadio": "Deter radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Fallou a obtenciĆ³n do obxecto" - }, - "button": { - "fediverse": "Fediverso", - "rss": "RSS", - "search": "Buscar" - }, - "label": { - "fediverse": { - "fieldLabel": "Obxecto no Fediverso", - "title": "Subscribirse a un podcast aloxado no Fediverso" - }, - "rss": { - "fieldPlaceholder": "https://web.exemplo.com/rss.xml", - "fieldLabel": "LocalizaciĆ³n da fonte RSS", - "title": "Subscribirse a fonte RSS do podcast" - } - }, - "warning": { - "unsupported": "AĆ­nda non estĆ” soportado este obxeto" - }, - "error": { - "fetchFailed": "Non se puido obter o obxeto" - }, - "description": { - "fediverse": "Utiliza este formulario para subscribirte a unha canle aloxada noutro lugar do Fediverso.", - "rss": "Usa este formulario para subscribirte a unha fonte RSS co seu URL." - } - }, - "PageNotFound": { - "link": { - "home": "Ir Ć³ inicio" - }, - "title": "PĆ”xina non atopada", - "header": { - "pageNotFound": "Non atopamos a pĆ”xina!" - }, - "message": { - "pageNotFound": "LamentĆ”molo, a pĆ”xina que solicitou non existe:" - } - }, - "vui": { - "Pagination": { - "next": "PĆ”xina seguinte", - "label": "PaxinaciĆ³n", - "previous": "PĆ”xina anterior" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostrar 1 etiqueta mĆ”is | Mostrar { n } etiquetas mĆ”is" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "listenings": "{ n } escoita | { n } escoitas", - "subscribers": "{ n } subscritora | { n } subscritoras", - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - }, - "link": { - "channelEpisodes": "TĆ³dolos episodios", - "mirrored": "RĆ©plica de { domain }", - "moderation": "Actualizar regra de moderaciĆ³n", - "channelOverview": "Vista xeral", - "channelTracks": "CanciĆ³ns", - "domainView": "Ver en { domain }" - }, - "header": { - "artistChannel": "Canle da artista", - "podcastChannel": "Canle de podcast" - }, - "button": { - "cancel": "Cancelar", - "confirm": "Borrar", - "delete": "Eliminarā€¦", - "edit": "Editarā€¦", - "embed": "Incrustar", - "play": "Reproducir", - "updateChannel": "Actualizar canle", - "upload": "Subir" - }, - "title": "Canle", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copiar-pegar este URL na tĆŗa app de podcasting:" - }, - "header": "Subscribirse vĆ­a RSS" - }, - "fediverse": { - "content": { - "help": "Se usas Mastodon ou outro servizo do fediverso, podes subscribirte a esta conta:" - }, - "header": "Subscribirse no Fediverso" - }, - "funkwhale": { - "header": "Subscribirse en Funkwhale" - }, - "header": "Subscribirse a esta canle" }, - "delete": { - "header": "Eliminar esta Canle?", - "content": { - "warning": "Vaise eliminar a canle e todos os ficheiros e datos relacionados. Esta acciĆ³n non ten volta." - } - }, - "embed": { - "header": "InclĆŗe esta canciĆ³n no teu sitio web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Engadir nova", - "erroredUploads": "Ver subidas con fallos", - "skippedUploads": "Ver subidas omitidas" - }, - "header": { - "albums": "Ɓlbums", - "latestEpisodes": "ƚltimos episodios", - "latestTracks": "ƚltimas canciĆ³ns", - "series": "Series", - "uploadsFailure": "Non se publicaron algunha das subidas", - "uploadsProcessing": "EstĆ”nse a procesar as subidas", - "uploadsSuccess": "PublicĆ”ronse correctamente as subidas" - }, - "meta": { - "progress": "Subidas procesadas:" - }, - "message": { - "processing": "Funkwhale estĆ” procesando as subidas e estarĆ”n dispoƱibles moi pronto." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Engadir nova" - }, - "button": { - "cancel": "Cancelar", - "subscribe": "Subscribir" - }, - "placeholder": { - "search": "Filtrar por nomeā€¦" - }, - "title": "SubscriciĆ³ns a canles", - "modal": { - "subscription": { - "header": "SubscriciĆ³n" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - }, - "link": { - "details": "Detalles da biblioteca" - }, - "label": { - "size": "TamaƱo total dos ficheiros de esta biblioteca" - }, - "button": { - "upload": "Subir" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } utilizado de { max } permitido", - "errored": "Ficheiros con fallos", - "pending": "Ficheiros pendentes", - "skipped": "Ficheiros saltados" - }, - "header": { - "currentUsage": "Uso actual" - }, - "loading": { - "currentUsage": "Cargando datos de usoā€¦" - }, - "button": { - "purge": "Limpar" - }, - "modal": { - "purgeErrored": { - "header": "Eliminar ficheiros con fallos?", - "content": { - "description": "Elimina as canciĆ³ns subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a sĆŗa cuota." - } - }, - "purgePending": { - "header": "Eliminar ficheiros pendentes?", - "content": { - "description": "Elimina completamente as canciĆ³ns subidas pero aĆ­nda non procesadas, engadindo o espazo correspondente a sĆŗa cuota." - } - }, - "purgeSkipped": { - "header": "Eliminar ficheiros saltados?", - "content": { - "description": "Elimina as canciĆ³ns subidas saltadas durante o proceso de importaciĆ³n, engadindo o espazo correspondente a sĆŗa cuota." - } - } - }, - "link": { - "viewFiles": "Ver ficheiros" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Ɓlbum", - "artist": "Artista", - "duration": "DuraciĆ³n", - "importStatus": "Estado da importaciĆ³n", - "size": "TamaƱo", - "title": "TĆ­tulo", - "uploadDate": "Data de subida" + "code": "CĆ³digo", + "link": "Compartir ligazĆ³n" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Borrar" + }, + "label": { + "expired": "Caducado", + "search": "Buscar", + "status": "Estado", + "unused": "Non utilizado", + "used": "Utilizado" }, "option": { - "status": { - "all": "Todos", - "draft": "Borrador", - "failed": "Fallou", - "finished": "Rematado", - "pending": "Pendente", - "skipped": "Saltado" - } + "all": "Todos", + "expired": "Caducado/utilizado", + "open": "Abrir" }, + "ordering": { + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" + }, + "placeholder": { + "search": "Buscar por nome de usuaria, correo-e, cĆ³digoā€¦" + }, + "table": { + "invitation": { + "header": { + "code": "CĆ³digo", + "creationDate": "Data de creaciĆ³n", + "expirationDate": "Data de caducidade", + "owner": "Dona", + "status": "Estado", + "user": "Usuaria" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Buscar" + }, + "notApplicable": "N/A", "ordering": { "direction": { "ascending": "Ascendente", @@ -3062,397 +2693,579 @@ }, "label": "Ordenando" }, - "action": { - "delete": "Borrar", - "restartImport": "Volta a lanzar importaciĆ³n" + "pagination": { + "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" }, - "label": { - "importStatus": "Estado da importaciĆ³n", - "search": "Buscar" - }, - "notApplicable": "N/A", - "empty": { - "noTracks": "AĆ­nda non se engadiron canciĆ³ns a esta biblioteca" + "permission": { + "library": "Biblioteca", + "moderation": "ModeraciĆ³n", + "settings": "Axustes" }, "placeholder": { - "search": "Buscar por tĆ­tulo, artista, Ć”lbumā€¦" + "search": "Buscar por nome de usuaria, correo-e, nomeā€¦" }, - "button": { - "showStatus": "Mostrar informaciĆ³n acerca do estado da subida desta canciĆ³n" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crear nova biblioteca" - }, - "loading": { - "libraries": "Cargando Bibliotecasā€¦" - }, - "empty": { - "noLibrary": "Semella que non ten unha biblioteca, Ć© momento de crear unha." - }, - "header": { - "libraries": "As miƱas Bibliotecas" - } - }, - "Form": { - "button": { - "create": "Crear biblioteca", - "delete": "Borrar", - "confirm": "Eliminar biblioteca", - "update": "Actualizar biblioteca" - }, - "modal": { - "delete": { - "header": "Eliminar esta biblioteca?", - "content": { - "warning": "EliminarĆ” completamente a biblioteca e as canciĆ³ns. Non poderĆ” voltar atrĆ”s." + "table": { + "user": { + "accountStatus": { + "active": "Activo", + "inactive": "Non activo" + }, + "header": { + "accountStatus": "Estado da conta", + "email": "Email", + "lastActivity": "ƚltima actividade", + "permissions": "Permisos", + "signup": "Rexistrarse", + "status": "Estado", + "username": "Nome de usuaria" + }, + "status": { + "admin": "Admin", + "regular": "usuaria normal", + "staff": "Persoal do equipo" } } - }, - "label": { - "description": "DescriciĆ³n", - "name": "Nome", - "visibility": "Visibilidade" - }, - "header": { - "failure": "Fallo" - }, - "description": { - "library": "As bibliotecas axĆŗdanlle a organizar e compartir a sĆŗa colecciĆ³n musical. Pode subir a sĆŗa propia colecciĆ³n de mĆŗsica a Funkwhale e compartila cos seus amigos e familia.", - "visibility": "Pode compartir a biblioteca con outa xente, independentemente da sĆŗa visibilidade." - }, - "message": { - "libraryCreated": "Biblioteca creada", - "libraryDeleted": "Biblioteca eliminada", - "libraryUpdated": "Biblioteca actualizada" - }, - "placeholder": { - "name": "A miƱa abraiante biblioteca", - "description": "Esta biblioteca contĆ©n a miƱa mĆŗsica persoal, espero que che guste." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns", - "failedTracks": "CanciĆ³ns con fallo:", - "lastUpdate": "ƚltima actualizaciĆ³n:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Ɠ deixar de seguir esta biblioteca perderĆ”s o acceso Ć³ seu contido." - }, - "header": "Deixar de seguir biblioteca?" - } - }, - "button": { - "cancel": "Cancelar solicitude de seguimento", - "follow": "Seguir", - "pending": "Solicitude de seguimento pendente de aprobaciĆ³n", - "unfollow": "Deixar de seguir" - }, - "link": { - "scanDetails": "Detalles", - "scan": "Escanear agora" - }, - "label": { - "scanFailure": "Problema ao escanear", - "scanPending": "Ascendente", - "scanSuccess": "Escaneado", - "scanPartialSuccess": "Escaneado con fallos", - "scanProgress": "Escaneandoā€¦ ({ progress }%)", - "sharingLink": "Compartir ligazĆ³n" - }, - "message": { - "scanLaunched": "Escaneado iniciado", - "scanSkipped": "Escaneado saltado (o escaneado anterior Ć© moi recente)" - }, - "tooltip": { - "private": "Esta biblioteca Ć© privada e precisas que a usuaria che conceda permiso para acceder ao contido", - "public": "Esta biblioteca Ć© pĆŗblica e pode acceder ao contido libremente" - } - }, - "ScanForm": { - "header": { - "failure": "Non se obtivo a biblioteca remota" - }, - "placeholder": { - "url": "Escribe o URL dunha biblioteca" - }, - "label": { - "search": "Buscar unha biblioteca remota" - }, - "button": { - "submit": "Enviar busca" - } - }, - "Home": { - "header": { - "knownLibraries": "Bibliotecas coƱecidas", - "remoteLibraries": "Bibliotecas remotas" - }, - "loading": { - "remoteLibraries": "Cargando bibliotecas remotasā€¦" - }, - "button": { - "refresh": "Actualizar" - }, - "description": { - "remoteLibraries": "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son pĆŗblicas ou lle outorgan acceso." - } - } - }, - "Home": { - "title": "Engadir e xestionar contido", - "description": { - "follow": "Segue bibliotecas doutras usuarias para ter nova mĆŗsica. As bibliotecas pĆŗblicas pĆ³dense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso.", - "channel": { - "1": "Se es mĆŗsico ou podcaster, as canles estĆ”n deseƱadas para ti!", - "2": "Comparte publicamente o teu traballo para ter subscritoras en Funkwhale, do Fediverso ou calquer aplicaciĆ³n de podcast." - }, - "upload": "Subir a tĆŗa biblioteca personal de mĆŗsica a Funkwhale para desfrutala desde onde queiras e compartila coas amizades." - }, - "header": { - "follow": "Seguir bibliotecas remotas", - "channel": "Publica o teu traballo nunha canle", - "upload": "Subir contido de terceiros a biblioteca" - }, - "button": { - "start": "Comezar" - }, - "help": { - "uploadQuota": "Esta instancia ofrece {quota} de almacenamento a cada usuaria." - } - }, - "Base": { - "title": "Engadir contido", - "link": { - "libraries": "Bibliotecas", - "tracks": "CanciĆ³ns" - }, - "menu": { - "secondary": "MenĆŗ secundario" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" - }, - "link": { - "albums": "Ɓlbums", - "artists": "Artistas", - "moderation": "Actualizar regra de moderaciĆ³n", - "owner": "Propiedade de { username }", - "tracks": "CanciĆ³ns", - "domain": "Ver en { domain }" - }, - "button": { - "edit": "Editar", - "upload": "Subir" - }, - "title": "Biblioteca", - "label": { - "private": "Privado", - "public": "PĆŗblico", - "instance": "Restrinxido", - "sharingLink": "Compartir ligazĆ³n" - }, - "description": { - "sharingLink": "Comparte esta ligazĆ³n para que as usuarias poidan acceder a biblioteca ao pegala na barra de busca da sĆŗa instancia." - }, - "tooltip": { - "private": "Esta biblioteca Ć© privada e precisas que a usuaria che conceda permiso para acceder ao contido", - "public": "Esta biblioteca Ć© pĆŗblica e pode acceder ao contido libremente", - "instance": "Esta biblioteca estĆ” restrinxida as usuarias de esta instancia" - } - }, - "Edit": { - "button": { - "accept": "Aceptar", - "reject": "Rexeitar" - }, - "table": { - "action": { - "status": { - "accepted": "Aceptado", - "pending": "Pendente de aceptaciĆ³n", - "rejected": "Rexeitado" - }, - "header": { - "action": "AcciĆ³n", - "date": "Data", - "status": "Estado", - "user": "Usuaria" - } - } - }, - "header": { - "followers": "Seguidoras", - "libraryContents": "Contido da biblioteca" - }, - "loading": { - "followers": "Cargando seguidorasā€¦" - }, - "empty": { - "noFollowers": "NinguĆ©n segue esta biblioteca" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Esta biblioteca estĆ” baleira, deberĆ­as subir algo!", - "follow": "PoderĆ­as ter que seguir esta biblioteca para ver o seu contido." - } - }, - "DetailOverview": { - "empty": { - "upload": "Esta biblioteca estĆ” baleira, deberĆ­as subir algo!", - "follow": "PoderĆ­as ter que seguir esta biblioteca para ver o seu contido." - } - }, - "DetailTracks": { - "empty": { - "upload": "Esta biblioteca estĆ” baleira, deberĆ­as subir algo!", - "follow": "PoderĆ­as ter que seguir esta biblioteca para ver o seu contido." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Perfil de { username }", - "link": { - "activity": "Actividade", - "moderation": "Actualizar regra de moderaciĆ³n", - "overview": "Vista xeral", - "domainView": "Ver en { domain }" - }, - "label": { - "self": "Esta es tĆ­!" - } - }, - "PasswordReset": { - "label": { - "email": "Enderezo de email da conta" - }, - "button": { - "requestReset": "Solicita restablecer o contrasinal" - }, - "link": { - "back": "Volve ao acceso" - }, - "placeholder": { - "email": "Escribe o enderezo de correo ligado a tĆŗa conta" - }, - "header": { - "failure": "Fallo Ć³ solicitar o restablecemento do contrasinal", - "reset": "Restablece o contrasinal" - }, - "title": "Restablece o contrasinal", - "help": { - "form": "Utiliza este formulario para solicitar o restablecemento do contrasinal. EnviarĆ©mosche un email con instruciĆ³ns para restablecelo." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Engadir nova" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Canle da artista" - }, - "header": "Crea unha canle", - "podcast": { - "header": "Canle de podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Cancelar", - "createChannel": "Crear canle", - "next": "Seguinte paso", - "previous": "Paso anterior" + "hide": "Agochar contido" }, "header": { - "channels": "Canles", - "sharedLibraries": "Esta usuaria compartiu as seguintes bibliotecas", - "libraries": "Bibliotecas da usuaria" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Volve ao acceso", - "login": "Accede" + "failure": "Erro Ć³ crear o filtro", + "modal": "Queres agochar o contido da artista \"{ radio }\"?" }, - "title": "Cambiar o contrasinal", - "header": { - "failure": "Erro Ć³ cambiar o contrasinal", - "success": "Contrasinal actualizado correctamente" + "help": { + "createFilter": "Podes xestionar e actualizar os teus filtros desde os axustes da tĆŗa conta." }, "message": { - "requestSent": "Se o enderezo de correo proporcionado no paso anterior Ć© vĆ”lido e ligado a unha conta de usuaria, deberĆ­as recibir un correo coas instruciĆ³ns de restablecemento nun par de minutos.", - "success": "O contrasinal foi actualizado correctamente." + "success": "Engadeuse o filtro de contido" }, + "warning": { + "createFilter": { + "listIntro": "Non volverĆ”s a ver as pistas, Ć”lbums e actividade relacionados con este artista:", + "listItem1": "En favoritas e historial de escoita de outras usuarias", + "listItem2": "No widget \"AdiciĆ³ns recentes\"", + "listItem3": "En listaxes de artistas e Ć”lbums", + "listItem4": "Nas suxestiĆ³ns de radios" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Novo contrasinal" + "category": "CategorĆ­a" }, + "option": { + "all": "Todos" + } + }, + "ReportModal": { "button": { - "update": "Actualizar contrasinal" - } - }, - "EmailConfirm": { - "title": "Confirma o teu email", - "label": { - "confirmationCode": "CĆ³digo de confirmaciĆ³n" + "cancel": "Cancelar", + "submit": "Enviar denuncia" + }, + "description": { + "email": "Utilizaremos este correo se precisamos contactar contigo referente a esta denuncia.", + "forwardToDomain": "Reenviar unha copia anĆ³nima da tĆŗa denuncia Ć³ servidor que hospeda este elemento.", + "message": "Utiliza este campo para proporcionar contexto adicional Ć” moderaciĆ³n para xestionar a denuncia.", + "modal": "Utiliza este formulario para enviar unha denuncia ao equipo de moderaciĆ³n" + }, + "error": { + "nodeinfoFetch": "Non se obtivo Info da Instancia: {error}" }, "header": { - "failure": "Non se confirmou o teu email", - "success": "Enderezo de email confirmado" + "disabled": "DesactivĆ”ronse as denuncias anĆ³nimas, conĆ©ctate para enviar unha denuncia.", + "modal": "Queres denunciar este elemento?", + "submissionFailure": "Erro Ć³ enviar a denuncia" }, - "link": { - "login": "Accede", - "back": "Volver ao acceso" + "label": { + "email": "Email", + "forwardToDomain": "Reenviar a { domain}", + "message": "Mensaxe" }, "message": { - "success": "Xa pode utilizar o servizo sen limitaciĆ³ns." - } - }, - "Signup": { - "header": { - "createAccount": "Crear unha conta Funkwhale" - }, - "title": "Rexistro" - }, - "Login": { - "title": "Acceder", - "header": { - "login": "Accede coa tĆŗa conta Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Accedendoā€¦" - } - }, - "Plugins": { - "title": "Xestionar plugins" - }, - "ProfileActivity": { - "header": { - "playlists": "Listas de reproduciĆ³n", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" + "submissionSuccess": "Denuncia enviada correctamente, grazas" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Aprobar", + "markRead": "Marcar como lido", + "markUnread": "Marcar como non lido", + "reject": "Rexeitar" + }, + "message": { + "libraryAcceptFollow": "{ username } aceptou o teu seguimento da biblioteca \"{ library }\"", + "libraryFollow": "{ username } segue a tĆŗa biblioteca \"{ library }\"", + "libraryPendingFollow": "{ username } quere seguir a tĆŗa biblioteca \"{ library }\"", + "libraryReject": "Rexeitaches a solicitude de {username} para seguir \"{library}\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + } + }, + "Editor": { + "button": { + "addDuplicate": "Engadir igualmente", + "clear": "Baleirar lista reproduciĆ³n", + "copy": "Copiar canciĆ³ns da cola a lista de reproduciĆ³n", + "insertFromQueue": "Introducir desde a cola ({ n } canciĆ³n) | Introducir desde a cola ({ n } canciĆ³ns)" + }, + "error": { + "sync": "Algo fallou ao gardar os cambios" + }, + "header": { + "editor": "Editora da lista" + }, + "help": { + "reorder": "Arrastra e solta filas para reordenar as canciĆ³ns na lista" + }, + "loading": { + "sync": "Sincronizando cambios co servidorā€¦" + }, + "message": { + "sync": "Cambios sincronizados co servidor" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Esto eliminarĆ” todas as canciĆ³ns da lista de reproduciĆ³n e non hai volta." + }, + "header": "Queres baleirar a lista de reproduciĆ³n \"{ playlist }\"?" + } + }, + "warning": { + "duplicate": "Algunhas canciĆ³ns na cola xa estĆ”n nesta lista de reproduciĆ³n:" + } + }, + "Form": { + "button": { + "create": "Crear lista reproduciĆ³n", + "update": "Actualizar lista de reproduciĆ³n" + }, + "header": { + "createFailure": "Lista creada", + "createPlaylist": "Crear nova lista de reproduciĆ³n", + "createSuccess": "Lista creada", + "updateSuccess": "Lista de reproduciĆ³n actualizada" + }, + "label": { + "name": "Nome da lista", + "visibility": "Visibilidade da lista de reproduciĆ³n" + }, + "placeholder": { + "name": "A miƱa fantĆ”stica lista" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Engadir igualmente", + "addToPlaylist": "Engadir a esta lista de reproduciĆ³n", + "addTrack": "Engadir canciĆ³n", + "cancel": "Cancelar", + "edit": "Editar" + }, + "empty": { + "noPlaylists": "AĆ­nda non se creou unha lista de reproduciĆ³n" + }, + "header": { + "addFailure": "Non podemos engadir a canciĆ³n a lista de reproduciĆ³n", + "addToPlaylist": "Engadir a lista de reproduciĆ³n", + "available": "Listaxes dispoƱibles", + "manage": "Xestionar listas de reproduciĆ³n", + "noResults": "Sen resultados co teu filtro", + "track": "{title}, de {artist}" + }, + "label": { + "filter": "Filtro" + }, + "placeholder": { + "filterPlaylist": "Nome da lista de reproduciĆ³n" + }, + "table": { + "edit": { + "header": { + "edit": "Editar", + "lastModification": "ƚltima modificaciĆ³n", + "name": "Nome", + "tracks": "CanciĆ³ns" + } + } + }, + "warning": { + "duplicate": "{ 0 } xa estĆ” en { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Engadir a lista de reproduciĆ³nā€¦" + } + }, + "Widget": { + "button": { + "create": "Crear lista de reproduciĆ³n", + "more": "Mostrar mĆ”is" + }, + "placeholder": { + "noPlaylists": "AĆ­nda non se creou unha lista de reproduciĆ³n" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Iniciar radio dos artistas", + "startPlaylistsRadio": "Iniciar radio das listas de reproduciĆ³n", + "startRadio": "Reproducir radio", + "startTagsRadio": "Iniciar radio das etiquetas", + "stopArtistsRadio": "Deter radio dos artistas", + "stopPlaylistsRadio": "Deter radio das listas de reproduciĆ³n", + "stopRadio": "Deter radio", + "stopTagsRadio": "Deter radio da etiquetas" + }, + "Card": { + "button": { + "edit": "Editar" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostrar 1 etiqueta mĆ”is | Mostrar { n } etiquetas mĆ”is" + } + } + }, + "vui": { + "Pagination": { + "label": "PaxinaciĆ³n", + "next": "PĆ”xina seguinte", + "previous": "PĆ”xina anterior" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Engadeuse { n } canciĆ³n a cola | EngadĆ­ronse { n } canciĆ³ns a cola" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "MĆŗsica", + "other": "Outro", + "podcast": "Podcast" + }, + "label": "CategorĆ­a do contido" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Subeuse a canciĆ³n, pero aĆ­nda non foi programado o procesamento", + "label": "Borrador" + }, + "errored": { + "help": "Non se procesou esta canciĆ³n, asegĆŗrese que estĆ” correctamente etiquetada", + "label": "Con fallo" + }, + "finished": { + "help": "Importado", + "label": "Rematado" + }, + "pending": { + "help": "CanciĆ³n subida, pero aĆ­nda non procesada polo servidor", + "label": "Pendente" + }, + "skipped": { + "help": "A canciĆ³n xa estĆ” presente nunha das sĆŗas bibliotecas", + "label": "Saltado" + } + }, + "label": "Preme para mostrar mĆ”is informaciĆ³n sobre o proceso de importaciĆ³n desta subida" + }, + "privacyLevel": { + "choices": { + "instance": "Todas nesta instancia", + "private": "NinguĆ©n excepto eu", + "public": "Todas, en tĆ³dalas instancias" + }, + "help": "Indica o nivel de visibilidade da tĆŗa actividade", + "label": "Visibilidade da actividade", + "shortChoices": { + "instance": "Instancia", + "private": "Privado", + "public": "Todo o mundo" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contido ilegal", + "invalidMetadata": "Metadatos non vĆ”lidos", + "offensiveContent": "Contido ofensivo", + "other": "Outro", + "takedownRequest": "Rexeitar peticiĆ³n" + }, + "label": "CategorĆ­a" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data de acceso", + "albumTitle": "Nome do Ć”lbum", + "appliedDate": "Data de solicitude", + "artistName": "Nome do artista", + "bitrate": "Taxa de bits", + "creationDate": "Data de creaciĆ³n", + "dateJoined": "Data de rexistro", + "domain": "Dominio", + "duration": "DuraciĆ³n", + "expirationDate": "Data de caducidade", + "firstSeen": "Data do primeiro acceso", + "followers": "Seguidoras", + "handledDate": "Data da concesiĆ³n", + "itemsCount": "Elementos", + "lastActivity": "ƚltima actividade", + "lastSeen": "Data da Ćŗltima sesiĆ³n", + "modificationDate": "Data de modificaciĆ³n", + "name": "Nome", + "receivedMessages": "Mensaxes recibidas", + "releaseDate": "Data da Ćŗltima vista", + "size": "TamaƱo", + "trackTitle": "Nome da canciĆ³n", + "uploads": "Subidas", + "username": "Nome de usuaria", + "users": "Usuarias" + }, + "scopes": { + "edits": { + "description": "Editar os contidos", + "label": "EdiciĆ³ns" + }, + "favorites": { + "description": "Acceso a favoritas", + "label": "Favoritas" + }, + "filters": { + "description": "Establecer filtros do contido", + "label": "Filtros de contido" + }, + "follows": { + "description": "Acceso aos seguimentos", + "label": "Segue" + }, + "libraries": { + "description": "Acceso a ficheiros de audio, bibliotecas, artistas e canciĆ³ns", + "label": "Bibliotecas e subidas" + }, + "listenings": { + "description": "Acceso ao historial de escoita", + "label": "Escoitas" + }, + "notifications": { + "description": "Acceso as notificaciĆ³ns", + "label": "NotificaciĆ³ns" + }, + "playlists": { + "description": "Acceso a listas de reproduciĆ³n", + "label": "Listas de reproduciĆ³n" + }, + "profile": { + "description": "Acesso a email, nome de usuaria, e informaciĆ³n do perfil", + "label": "Abrir perfil" + }, + "radios": { + "description": "Acceso as radios", + "label": "Radios" + }, + "reports": { + "description": "Acceso Ć”s denuncias a moderar", + "label": "Denuncias" + }, + "security": { + "description": "Acceso Ć³s axustes de seguridade como contrasinal e permisos", + "label": "Seguranza" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data da Ćŗltima vista", + "title": "TĆ­tulo" + }, + "artist": { + "name": "Nome" + }, + "cover": { + "label": "Portada" + }, + "description": { + "label": "DescriciĆ³n" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "license": "Licenza", + "position": "PaxinaciĆ³n", + "title": "TĆ­tulo" + } + }, + "useReport": { + "account": { + "label": "Denunciar a {'@'}{username}", + "typeLabel": "Conta" + }, + "album": { + "label": "Denunciar este Ć”lbumā€¦", + "typeLabel": "Ɓlbum" + }, + "artist": { + "label": "Denunciar este artistaā€¦", + "typeLabel": "Artista", + "unknownLabel": "Artista descoƱecido" + }, + "channel": { + "label": "Denunciar esta canleā€¦", + "typeLabel": "Canle" + }, + "library": { + "label": "Denunciar esta bibliotecaā€¦", + "typeLabel": "Biblioteca" + }, + "playlist": { + "label": "Denunciar esta listaxeā€¦", + "typeLabel": "Lista de reproduciĆ³n" + }, + "track": { + "label": "Denunciar esta canciĆ³nā€¦", + "typeLabel": "CanciĆ³n" + } + }, + "useReportConfigs": { + "account": { + "label": "Conta", + "summary": "Bio" + }, + "album": { + "label": "Ɓlbum", + "releaseDate": "Data da Ćŗltima vista", + "title": "TĆ­tulo" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Canle" + }, + "creationDate": { + "label": "Data de creaciĆ³n" + }, + "library": { + "description": "DescriciĆ³n", + "label": "Biblioteca" + }, + "musicbrainzId": { + "label": "ID en MusicBrainz" + }, + "name": { + "label": "Nome" + }, + "playlist": { + "label": "Lista de reproduciĆ³n" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "label": "CanciĆ³n", + "license": "Licenza", + "position": "PaxinaciĆ³n", + "title": "TĆ­tulo" + }, + "visibility": { + "label": "Visibilidade" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "Para axudarnos a saber que pasou, adxunta unha descriciĆ³n detallada do que estabas a facer e facilitou o erro.", + "errorReportTitle": "Aconteceu un fallo non agardado.", + "leaveFeedback": "Deixar o comentario", + "unexpectedError": "Aconteceu un fallo non agardado." + }, + "useThemeList": { + "browserDefault": "Por defecto no navegador", + "darkTheme": "Escuro", + "lightTheme": "Claro" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Enviaches demasiadas solicitudes en pouco tempo, intĆ©ntao de novo en { delay }", + "rateLimitLater": "Enviaches demasiadas solicitudes en pouco tempo, por favor intĆ©ntao mĆ”is tarde" + }, + "sentry": { + "allow": "Permitir", + "deny": "Rexeitar", + "funkwhaleInstance": "Instancia oficial de Funkwhale", + "message": "As trazas do problema compartiranse con { 0 } para axudarnos a entender como e cando se produce o erro.", + "title": "Para mellorar a calidade do noso servizo, gustarĆ­anos recoller algunha informaciĆ³n acerca dos fallos durante a sesiĆ³n." + }, + "serviceWorker": { + "actions": { + "later": "MĆ”is tarde", + "update": "Actualizar" + }, + "newAppVersion": "Hai unha nova versiĆ³n da app." + } + }, + "views": { "Notifications": { + "button": { + "read": "Marcar todo como lido", + "submit": "Listo!" + }, + "empty": { + "notifications": "Sen notificaciĆ³n para mostrar" + }, + "header": { + "funkwhaleSupport": "Gozas de Funkwhale?", + "instanceSupport": "Axuda a este servidor Funkwhale", + "messages": "Mensaxes", + "notifications": "As sĆŗas notificaciĆ³ns" + }, + "label": { + "reminder": "Lembrarmo en:", + "showRead": "Mostrar notificaciĆ³ns lidas" + }, + "link": { + "donate": "Doar", + "help": "Descubre outros xeitos de axudar" + }, + "loading": { + "notifications": "Cargando notificaciĆ³nsā€¦" + }, + "message": { + "funkwhaleSupport": "Levas por aquĆ­ un anaco. Se Funkwhale che resulta Ćŗtil, poderiamos utilizar a tĆŗa axuda para facelo aĆ­nda mellor!" + }, "option": { "delay": { "30": "30 dĆ­as", @@ -3461,584 +3274,63 @@ "never": "Nunca" } }, - "link": { - "help": "Descubre outros xeitos de axudar", - "donate": "Doar" + "title": "NotificaciĆ³ns" + }, + "Search": { + "button": { + "submit": "Enviar consulta de busca" }, "header": { - "funkwhaleSupport": "Gozas de Funkwhale?", - "instanceSupport": "Axuda a este servidor Funkwhale", - "messages": "Mensaxes", - "notifications": "As sĆŗas notificaciĆ³ns" + "remote": "Buscar un obxeto remoto", + "rss": "Subscribirse a fonte RSS do podcast", + "search": "Buscar" }, - "button": { - "submit": "Listo!", - "read": "Marcar todo como lido" - }, - "loading": { - "notifications": "Cargando notificaciĆ³nsā€¦" - }, - "empty": { - "notifications": "Sen notificaciĆ³n para mostrar." - }, - "title": "NotificaciĆ³ns", "label": { - "reminder": "Lembrarmo en:", - "showRead": "Mostrar notificaciĆ³ns lidas" - }, - "message": { - "funkwhaleSupport": "Levas por aquĆ­ un anaco. Se Funkwhale che resulta Ćŗtil, poderiamos utilizar a tĆŗa axuda para facelo aĆ­nda mellor!" + "albums": "Ɓlbums", + "artists": "Artistas", + "playlists": "Listas de reproduciĆ³n", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Etiquetas", + "tracks": "CanciĆ³ns" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nome de usuaria", - "loginStatus": { - "disabled": "Desactivado", - "enabled": "Activado", - "label": "Estado da conexiĆ³n" - }, - "displayName": "Nome pĆŗblico", - "email": "Enderezo de email", - "lastActivity": "ƚltima actividade", - "lastChecked": "ƚltima comprobaciĆ³n", - "permissions": "Permisos", - "signupDate": "Data de rexistro", - "userType": "Tipo" - }, - "audioContent": { - "cachedSize": "TamaƱo da cachĆ©", - "megabyte": "MB", - "totalSize": "TamaƱo total", - "uploadQuota": "Cota de subida" - }, - "activity": { - "emittedFollows": "Seguimentos da biblioteca emitidos", - "emittedMessages": "Mensaxes emitidas", - "firstSeen": "Primeira visualizaciĆ³n", - "receivedFollows": "Seguimentos de biblioteca recibidos" - } - }, - "header": { - "accountData": "Datos da conta", - "activity": "Actividade", - "audioContent": "Contido de audio", - "localAccount": "Conta local", - "activePolicy": "Este dominio estĆ” suxeito a regras especĆ­ficas de moderaciĆ³n", - "noPolicy": "Non ten ningunha regra activada para esta conta." - }, - "button": { - "addPolicy": "Engadir nova regra de moderaciĆ³n" - }, - "link": { - "albums": "Ɓlbums", - "artists": "Artistas", - "channels": "Canles", - "domain": "Dominio", - "libraries": "Bibliotecas", - "linkedReports": "Denuncias ligadas", - "openProfile": "Abrir perfil", - "remoteProfile": "Abrir perfil", - "requests": "PeticiĆ³ns", - "tracks": "CanciĆ³ns", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "tooltip": { - "uploadQuota": "Indicar canto contido pode subir a usuaria. Deixar baleiro para utilizar o valor por omisiĆ³n da instancia." - }, - "option": { - "permission": { - "library": "Biblioteca", - "moderation": "ModeraciĆ³n", - "settings": "Axustes" - } - }, - "description": { - "policy": "As polĆ­ticas de moderaciĆ³n axĆŗdanlle a controlar o xeito en que a sĆŗa instancia interactĆŗa con determinado dominio ou conta." - }, - "notApplicable": "N/A", - "warning": { - "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "Base": { - "link": { - "accounts": "Contas", - "domains": "Dominios", - "reports": "Denuncias", - "userRequests": "Solicitudes da usuaria" - }, - "title": "ModeraciĆ³n", - "menu": { - "secondary": "MenĆŗ secundario" - } - }, - "DomainsDetail": { - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "instanceData": "Datos da instancia", - "activePolicy": "Este dominio estĆ” suxeito a regras especĆ­ficas de moderaciĆ³n", - "noPolicy": "Non ten ningunha regra activada para este dominio." - }, - "button": { - "addPolicy": "Engadir nova regra de moderaciĆ³n", - "addToAllowList": "Engadir a lista-permitir", - "refreshNodeInfo": "Actualizar info da instancia", - "removeFromAllowList": "Eliminar da lista-permitir" - }, - "link": { - "albums": "Ɓlbums", - "artists": "Artistas", - "channels": "Canles", - "knownAccounts": "Contas coƱecidas", - "libraries": "Bibliotecas", - "website": "Abrir sitio web", - "tracks": "CanciĆ³ns", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "TamaƱo da cachĆ©", - "totalSize": "TamaƱo total" - }, - "activity": { - "emittedFollows": "Seguimentos da biblioteca emitidos", - "emittedMessages": "Mensaxes emitidas", - "firstSeen": "Primeira visualizaciĆ³n", - "receivedFollows": "Seguimentos de biblioteca recibidos" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Erro Ć³ obter info do nodo", - "label": "Estado" - }, - "inAllowList": { - "label": "EstĆ” presente na lista de permitidos", - "false": "Non", - "true": "Si" - }, - "lastChecked": "ƚltima comprobaciĆ³n", - "domainName": "Nome", - "software": { - "label": "Software" - }, - "totalUsers": "Conta de usuarias" - } - }, - "description": { - "policy": "As polĆ­ticas de moderaciĆ³n axĆŗdanlle a controlar o xeito en que a sĆŗa instancia interactĆŗa con determinado dominio ou conta." - }, - "notApplicable": "N/A", - "warning": { - "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "DomainsList": { - "button": { - "add": "Engadir" - }, - "label": { - "addDomain": "Engadir un dominio", - "addToAllowList": "Engadir a lista-permitir" - }, - "title": "Dominios", - "header": { - "domains": "Dominios", - "failure": "Fallou a creaciĆ³n do dominio" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Todos", - "resolved": "Resolto", - "unresolved": "Non resolto" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "title": "Denuncias", - "header": { - "reports": "Denuncias" - }, - "label": { - "search": "Buscar", - "status": "Estado" - }, - "placeholder": { - "search": "Buscar por tĆ­tulo, artista, dominioā€¦" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Todos", - "approved": "Aprobada", - "pending": "Pendente", - "refused": "Rexeitada" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "label": { - "search": "Buscar", - "status": "Estado" - }, - "placeholder": { - "search": "Buscar por nome de usuariaā€¦" - }, - "title": "Solicitudes da usuaria", - "header": { - "userRequests": "Solicitudes da usuaria" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data de acceso", - "firstSeen": "Primeira visualizaciĆ³n" - }, - "audioContent": { - "bitrate": { - "label": "Taxa de bits" - }, - "cachedSize": "TamaƱo da cachĆ©", - "duration": "DuraciĆ³n", - "size": "TamaƱo", - "track": "CanciĆ³n" - }, - "upload": { - "name": "Nome" - } - }, - "link": { - "account": "Conta", - "domain": "Dominio", - "importStatus": "Estado da importaciĆ³n", - "library": "Biblioteca", - "remoteProfile": "Abrir perfil", - "type": "Tipo", - "django": "Ver na admin de Django", - "visibility": "Visibilidade" - }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "local": "Local", - "uploadData": "Data de subida" - }, - "button": { - "delete": "Borrar", - "download": "Descargar" - }, - "modal": { - "delete": { - "header": "Eliminar esta subida?", - "content": { - "warning": "Esta acciĆ³n non Ć© reversible." - } - } - }, - "notApplicable": "N/A" - }, - "LibraryDetail": { - "link": { - "account": "Conta", - "albums": "Ɓlbums", - "artists": "Artistas", - "domain": "Dominio", - "reports": "Denuncias ligadas", - "remoteProfile": "Abrir perfil", - "tracks": "CanciĆ³ns", - "uploads": "Subidas", - "django": "Ver na admin de Django", - "visibility": "Visibilidade" - }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "libraryData": "Biblioteca actualizada", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "TamaƱo da cachĆ©", - "totalSize": "TamaƱo total" - }, - "library": { - "description": "DescriciĆ³n", - "name": "Nome" - }, - "activity": { - "firstSeen": "Primeira visualizaciĆ³n", - "followers": "Seguidoras" - } - }, - "button": { - "delete": "Borrar" - }, - "modal": { - "delete": { - "header": "Eliminar esta biblioteca?", - "content": { - "warning": "Vaise eliminar a biblioteca, asĆ­ como as subidas asociadas, e os seguimentos. A acciĆ³n Ć© irreversible." - } - } - }, - "warning": { - "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "AlbumDetail": { - "header": { - "activity": "Actividade", - "albumData": "Data do Ć”lbum", - "audioContent": "Contido de audio", - "local": "Local" - }, - "link": { - "artist": "Artista", - "domain": "Dominio", - "edits": "EdiciĆ³ns", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "tracks": "CanciĆ³ns", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "TamaƱo da cachĆ©", - "totalSize": "TamaƱo total" - }, - "album": { - "description": "DescriciĆ³n", - "title": "TĆ­tulo" - }, - "activity": { - "favorited": "CanciĆ³ns favoritas", - "firstSeen": "Primeira visualizaciĆ³n", - "listenings": "Escoitas", - "playlists": "Listas de reproduciĆ³n" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar este Ć”lbum?", - "content": { - "warning": "Vaise a eliminar o Ć”lbum, asĆ­ como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acciĆ³n non ten volta." - } - } - }, - "warning": { - "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "ArtistDetail": { - "header": { - "activity": "Actividade", - "artistData": "Datos do artista", - "audioContent": "Contido de audio", - "local": "Local" - }, - "link": { - "albums": "Ɓlbums", - "category": "CategorĆ­a", - "domain": "Dominio", - "edits": "EdiciĆ³ns", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "tracks": "CanciĆ³ns", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "TamaƱo da cachĆ©", - "totalSize": "TamaƱo total" - }, - "artist": { - "description": "DescriciĆ³n", - "name": "Nome" - }, - "activity": { - "favorited": "CanciĆ³ns favoritas", - "firstSeen": "Primeira visualizaciĆ³n", - "listenings": "Escoitas", - "playlists": "Listas de reproduciĆ³n" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar este artista?", - "content": { - "warning": "Vaise eliminar o artista, asĆ­ como todas as subidas asociadas, pistas, Ć”lbums, favoritos e historial de escoita. Esta acciĆ³n non ten volta." - } - } - }, - "warning": { - "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "TagDetail": { - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "tagData": "Etiquetar datos" - }, - "link": { - "albums": "Ɓlbums", - "artists": "Artistas", - "localProfile": "Abrir perfil", - "tracks": "CanciĆ³ns", - "django": "Ver na admin de Django" - }, - "button": { - "delete": "Borrar" - }, - "modal": { - "delete": { - "header": "Eliminar esta etiqueta?", - "content": { - "warning": "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acciĆ³n non Ć© reversible." - } - } - }, - "table": { - "activity": { - "firstSeen": "Primeira visualizaciĆ³n" - }, - "tag": { - "name": "Nome" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Actividade", - "local": "Local", - "trackData": "Nome da canciĆ³n" - }, - "link": { - "album": "Ɓlbum", - "albumArtist": "Autora do Ć”lbum", - "artist": "Artista", - "domain": "Dominio", - "edits": "EdiciĆ³ns", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "trackData": { - "cachedSize": "TamaƱo da cachĆ©", - "totalSize": "TamaƱo total" - }, - "track": { - "copyright": "Copyright", - "description": "DescriciĆ³n", - "discNumber": "NĆŗmero de disco", - "license": "Licenza", - "position": "PaxinaciĆ³n", - "title": "TĆ­tulo" - }, - "activity": { - "favorited": "CanciĆ³ns favoritas", - "firstSeen": "Primeira visualizaciĆ³n", - "listenings": "Escoitas", - "playlists": "Listas de reproduciĆ³n" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar esta canciĆ³n?", - "content": { - "warning": "Vaise eliminar a canciĆ³n, asĆ­ como as subidas asociadas, favoritos e historial de escoita. Esta acciĆ³n Ć© irreversible." - } - } - }, - "warning": { - "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "Base": { - "link": { - "albums": "Ɓlbums", - "artists": "Artistas", - "channels": "Canles", - "edits": "EdiciĆ³ns", - "libraries": "Bibliotecas", - "tags": "Etiquetas", - "tracks": "CanciĆ³ns", - "uploads": "Subidas" - }, - "title": "Xestionar biblioteca", - "menu": { - "secondary": "MenĆŗ secundario" - } - }, - "EditsList": { - "title": "EdiciĆ³ns", - "header": { - "edits": "Ficheiros de biblioteca" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Borrar", + "openRemote": "Abrir perfil", + "refresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "channelData": "Datos da canle" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "Ver na admin de Django", + "localProfile": "Abrir perfil" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canle, asĆ­ como as subidas, pistas e Ć”lbumes asociados. Esta acciĆ³n non ten volta." + }, + "header": "Eliminar esta canle?" + } + }, "table": { - "channelData": { - "account": "Conta", - "category": "CategorĆ­a", - "description": "DescriciĆ³n", - "domain": "Dominio", - "name": "Nome", - "rss": "Fonte RSS", - "url": "URL" + "activity": { + "edits": "EdiciĆ³ns", + "favorited": "CanciĆ³ns favoritas", + "firstSeen": "Primeira visualizaciĆ³n", + "linkedReports": "Denuncias ligadas", + "listenings": "Escoitas", + "playlists": "Listas de reproduciĆ³n" }, "audioContent": { "albums": "Ɓlbums", @@ -4047,40 +3339,16 @@ "tracks": "CanciĆ³ns", "uploads": "Subidas" }, - "activity": { - "edits": "EdiciĆ³ns", - "favorited": "CanciĆ³ns favoritas", - "firstSeen": "Primeira visualizaciĆ³n", - "linkedReports": "Denuncias ligadas", - "listenings": "Escoitas", - "playlists": "Listas de reproduciĆ³n" + "channelData": { + "account": "Conta", + "category": "CategorĆ­a", + "description": "DescriciĆ³n", + "domain": "Dominio", + "name": "Nome", + "rss": "Fonte RSS", + "url": "URL" } }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "channelData": "Datos da canle" - }, - "button": { - "delete": "Borrar", - "openRemote": "Abrir perfil", - "refresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar esta canle?", - "content": { - "warning": "Vaise eliminar a canle, asĆ­ como as subidas, pistas e Ć”lbumes asociados. Esta acciĆ³n non ten volta." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Abrir perfil", - "django": "Ver na admin de Django" - }, "warning": { "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" } @@ -4104,53 +3372,1205 @@ "channels": "Canles", "federation": "FederaciĆ³n", "instanceInfo": "InformaciĆ³n da instancia", - "settings": "Axustes da instancia", "moderation": "ModeraciĆ³n", "music": "MĆŗsica", "playlists": "Listas de reproduciĆ³n", "sections": "SecciĆ³ns", "security": "Seguranza", + "settings": "Axustes da instancia", "signups": "Rexistros", "stats": "EstatĆ­sticas", "subsonic": "Subsonic", "ui": "Interface de usuaria" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "albumData": "Data do Ć”lbum", + "audioContent": "Contido de audio", + "local": "Local" + }, + "link": { + "artist": "Artista", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "EdiciĆ³ns", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "CanciĆ³ns", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise a eliminar o Ć”lbum, asĆ­ como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acciĆ³n non ten volta." + }, + "header": "Eliminar este Ć”lbum?" + } + }, + "table": { + "activity": { + "favorited": "CanciĆ³ns favoritas", + "firstSeen": "Primeira visualizaciĆ³n", + "listenings": "Escoitas", + "playlists": "Listas de reproduciĆ³n" + }, + "album": { + "description": "DescriciĆ³n", + "title": "TĆ­tulo" + }, + "audioContent": { + "cachedSize": "TamaƱo da cachĆ©", + "totalSize": "TamaƱo total" + } + }, + "warning": { + "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "ArtistDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "artistData": "Datos do artista", + "audioContent": "Contido de audio", + "local": "Local" + }, + "link": { + "albums": "Ɓlbums", + "category": "CategorĆ­a", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "EdiciĆ³ns", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "CanciĆ³ns", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar o artista, asĆ­ como todas as subidas asociadas, pistas, Ć”lbums, favoritos e historial de escoita. Esta acciĆ³n non ten volta." + }, + "header": "Eliminar este artista?" + } + }, + "table": { + "activity": { + "favorited": "CanciĆ³ns favoritas", + "firstSeen": "Primeira visualizaciĆ³n", + "listenings": "Escoitas", + "playlists": "Listas de reproduciĆ³n" + }, + "artist": { + "description": "DescriciĆ³n", + "name": "Nome" + }, + "audioContent": { + "cachedSize": "TamaƱo da cachĆ©", + "totalSize": "TamaƱo total" + } + }, + "warning": { + "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "Base": { + "link": { + "albums": "Ɓlbums", + "artists": "Artistas", + "channels": "Canles", + "edits": "EdiciĆ³ns", + "libraries": "Bibliotecas", + "tags": "Etiquetas", + "tracks": "CanciĆ³ns", + "uploads": "Subidas" + }, + "menu": { + "secondary": "MenĆŗ secundario" + }, + "title": "Xestionar biblioteca" + }, + "EditsList": { + "header": { + "edits": "Ficheiros de biblioteca" + }, + "title": "EdiciĆ³ns" + }, + "LibraryDetail": { + "button": { + "delete": "Borrar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "libraryData": "Biblioteca actualizada", + "local": "Local" + }, + "link": { + "account": "Conta", + "albums": "Ɓlbums", + "artists": "Artistas", + "django": "Ver na admin de Django", + "domain": "Dominio", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "CanciĆ³ns", + "uploads": "Subidas", + "visibility": "Visibilidade" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a biblioteca, asĆ­ como as subidas asociadas, e os seguimentos. A acciĆ³n Ć© irreversible." + }, + "header": "Eliminar esta biblioteca?" + } + }, + "table": { + "activity": { + "firstSeen": "Primeira visualizaciĆ³n", + "followers": "Seguidoras" + }, + "audioContent": { + "cachedSize": "TamaƱo da cachĆ©", + "totalSize": "TamaƱo total" + }, + "library": { + "description": "DescriciĆ³n", + "name": "Nome" + } + }, + "warning": { + "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "TagDetail": { + "button": { + "delete": "Borrar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "tagData": "Etiquetar datos" + }, + "link": { + "albums": "Ɓlbums", + "artists": "Artistas", + "django": "Ver na admin de Django", + "localProfile": "Abrir perfil", + "tracks": "CanciĆ³ns" + }, + "modal": { + "delete": { + "content": { + "warning": "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acciĆ³n non Ć© reversible." + }, + "header": "Eliminar esta etiqueta?" + } + }, + "table": { + "activity": { + "firstSeen": "Primeira visualizaciĆ³n" + }, + "tag": { + "name": "Nome" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "local": "Local", + "trackData": "Nome da canciĆ³n" + }, + "link": { + "album": "Ɓlbum", + "albumArtist": "Autora do Ć”lbum", + "artist": "Artista", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "EdiciĆ³ns", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canciĆ³n, asĆ­ como as subidas asociadas, favoritos e historial de escoita. Esta acciĆ³n Ć© irreversible." + }, + "header": "Eliminar esta canciĆ³n?" + } + }, + "table": { + "activity": { + "favorited": "CanciĆ³ns favoritas", + "firstSeen": "Primeira visualizaciĆ³n", + "listenings": "Escoitas", + "playlists": "Listas de reproduciĆ³n" + }, + "track": { + "copyright": "Copyright", + "description": "DescriciĆ³n", + "discNumber": "NĆŗmero de disco", + "license": "Licenza", + "position": "PaxinaciĆ³n", + "title": "TĆ­tulo" + }, + "trackData": { + "cachedSize": "TamaƱo da cachĆ©", + "totalSize": "TamaƱo total" + } + }, + "warning": { + "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "UploadDetail": { + "button": { + "delete": "Borrar", + "download": "Descargar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "local": "Local", + "uploadData": "Data de subida" + }, + "link": { + "account": "Conta", + "django": "Ver na admin de Django", + "domain": "Dominio", + "importStatus": "Estado da importaciĆ³n", + "library": "Biblioteca", + "remoteProfile": "Abrir perfil", + "type": "Tipo", + "visibility": "Visibilidade" + }, + "modal": { + "delete": { + "content": { + "warning": "Esta acciĆ³n non Ć© reversible." + }, + "header": "Eliminar esta subida?" + } + }, + "notApplicable": "N/A", + "table": { + "activity": { + "accessedDate": "Data de acceso", + "firstSeen": "Primeira visualizaciĆ³n" + }, + "audioContent": { + "bitrate": { + "label": "Taxa de bits", + "value": "{bitrate}/s" + }, + "cachedSize": "TamaƱo da cachĆ©", + "duration": "DuraciĆ³n", + "size": "TamaƱo", + "track": "CanciĆ³n" + }, + "upload": { + "name": "Nome" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Engadir nova regra de moderaciĆ³n" + }, + "description": { + "policy": "As polĆ­ticas de moderaciĆ³n axĆŗdanche a controlar o xeito en que a tĆŗa instancia interactĆŗa con determinado dominio ou conta" + }, + "header": { + "accountData": "Datos da conta", + "activePolicy": "Este dominio estĆ” suxeito a regras especĆ­ficas de moderaciĆ³n", + "activity": "Actividade", + "audioContent": "Contido de audio", + "localAccount": "Conta local", + "noPolicy": "Non ten ningunha regra activada para esta conta." + }, + "link": { + "albums": "Ɓlbums", + "artists": "Artistas", + "channels": "Canles", + "django": "Ver na admin de Django", + "domain": "Dominio", + "libraries": "Bibliotecas", + "linkedReports": "Denuncias ligadas", + "openProfile": "Abrir perfil", + "remoteProfile": "Abrir perfil", + "requests": "PeticiĆ³ns", + "tracks": "CanciĆ³ns", + "uploads": "Subidas" + }, + "notApplicable": "N/A", + "option": { + "permission": { + "library": "Biblioteca", + "moderation": "ModeraciĆ³n", + "settings": "Axustes" + } + }, + "table": { + "accountData": { + "displayName": "Nome pĆŗblico", + "email": "Enderezo de email", + "lastActivity": "ƚltima actividade", + "lastChecked": "ƚltima comprobaciĆ³n", + "loginStatus": { + "disabled": "Desactivado", + "enabled": "Activado", + "label": "Estado da conexiĆ³n" + }, + "permissions": "Permisos", + "signupDate": "Data de rexistro", + "userType": "Tipo", + "username": "Nome de usuaria" + }, + "activity": { + "emittedFollows": "Seguimentos da biblioteca emitidos", + "emittedMessages": "Mensaxes emitidas", + "firstSeen": "Primeira visualizaciĆ³n", + "receivedFollows": "Seguimentos de biblioteca recibidos" + }, + "audioContent": { + "cachedSize": "TamaƱo da cachĆ©", + "megabyte": "MB", + "totalSize": "TamaƱo total", + "uploadQuota": "Cota de subida" + } + }, + "tooltip": { + "uploadQuota": "Indicar canto contido pode subir a usuaria. Deixar baleiro para utilizar o valor por omisiĆ³n da instancia." + }, + "warning": { + "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "Base": { + "link": { + "accounts": "Contas", + "domains": "Dominios", + "reports": "Denuncias", + "userRequests": "Solicitudes da usuaria" + }, + "menu": { + "secondary": "MenĆŗ secundario" + }, + "title": "ModeraciĆ³n" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Engadir nova regra de moderaciĆ³n", + "addToAllowList": "Engadir a lista-permitir", + "refreshNodeInfo": "Actualizar info da instancia", + "removeFromAllowList": "Eliminar da lista-permitir" + }, + "description": { + "policy": "As polĆ­ticas de moderaciĆ³n axĆŗdanche a controlar o xeito en que a tĆŗa instancia interactĆŗa con determinado dominio ou conta" + }, + "header": { + "activePolicy": "Este dominio estĆ” suxeito a regras especĆ­ficas de moderaciĆ³n", + "activity": "Actividade", + "audioContent": "Contido de audio", + "instanceData": "Datos da instancia", + "noPolicy": "Non ten ningunha regra activada para este dominio." + }, + "link": { + "albums": "Ɓlbums", + "artists": "Artistas", + "channels": "Canles", + "django": "Ver na admin de Django", + "knownAccounts": "Contas coƱecidas", + "libraries": "Bibliotecas", + "tracks": "CanciĆ³ns", + "uploads": "Subidas", + "website": "Abrir sitio web" + }, + "notApplicable": "N/A", + "table": { + "activity": { + "emittedFollows": "Seguimentos da biblioteca emitidos", + "emittedMessages": "Mensaxes emitidas", + "firstSeen": "Primeira visualizaciĆ³n", + "receivedFollows": "Seguimentos de biblioteca recibidos" + }, + "audioContent": { + "cachedSize": "TamaƱo da cachĆ©", + "totalSize": "TamaƱo total" + }, + "instanceData": { + "domainName": "Nome", + "inAllowList": { + "false": "Non", + "label": "EstĆ” presente na lista de permitidos", + "true": "Si" + }, + "lastChecked": "ƚltima comprobaciĆ³n", + "nodeInfoStatus": { + "label": "Estado", + "value": "Erro Ć³ obter info do nodo" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Conta de usuarias" + } + }, + "warning": { + "stats": "As estatĆ­sticas contabilĆ­zanse pola actividade coƱecida e o contido da sĆŗa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "DomainsList": { + "button": { + "add": "Engadir" + }, + "header": { + "domains": "Dominios", + "failure": "Fallou a creaciĆ³n do dominio" + }, + "label": { + "addDomain": "Engadir un dominio", + "addToAllowList": "Engadir a lista-permitir" + }, + "title": "Dominios" + }, + "ReportsList": { + "header": { + "reports": "Denuncias" + }, + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "status": { + "all": "Todos", + "resolved": "Resolto", + "unresolved": "Non resolto" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "placeholder": { + "search": "Buscar por tĆ­tulo, artista, dominioā€¦" + }, + "title": "Denuncias" + }, + "RequestsList": { + "header": { + "userRequests": "Solicitudes da usuaria" + }, + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "status": { + "all": "Todos", + "approved": "Aprobada", + "pending": "Pendente", + "refused": "Rexeitada" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "placeholder": { + "search": "Buscar por identificador" + }, + "title": "Solicitudes da usuaria" + } + }, "users": { "Base": { "link": { "invitations": "Convites", "users": "Usuarias" }, - "title": "Xestionar usuarias", "menu": { "secondary": "MenĆŗ secundario" + }, + "title": "Xestionar usuarias" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Accedendoā€¦" + } + }, + "EmailConfirm": { + "header": { + "failure": "Non se confirmou o teu email", + "success": "Enderezo de email confirmado" + }, + "label": { + "confirmationCode": "CĆ³digo de confirmaciĆ³n" + }, + "link": { + "back": "Volver ao acceso", + "login": "Accede" + }, + "message": { + "success": "Xa podes utilizar o servizo sen limitaciĆ³ns" + }, + "title": "Confirma o teu email" + }, + "Login": { + "header": { + "login": "Accede coa tĆŗa conta Funkwhale" + }, + "title": "Acceder" + }, + "PasswordReset": { + "button": { + "requestReset": "Solicita restablecer o contrasinal" + }, + "header": { + "failure": "Fallo Ć³ solicitar o restablecemento do contrasinal", + "reset": "Restablece o contrasinal" + }, + "help": { + "form": "Utiliza este formulario para solicitar o restablecemento do contrasinal. EnviarĆ©mosche un email con instruciĆ³ns para restablecelo." + }, + "label": { + "email": "Enderezo de email da conta" + }, + "link": { + "back": "Volve ao acceso" + }, + "placeholder": { + "email": "Escribe o enderezo de correo ligado a tĆŗa conta" + }, + "title": "Restablece o contrasinal" + }, + "PasswordResetConfirm": { + "button": { + "update": "Actualizar contrasinal" + }, + "header": { + "failure": "Erro Ć³ cambiar o contrasinal", + "success": "Contrasinal actualizado correctamente" + }, + "label": { + "newPassword": "Novo contrasinal" + }, + "link": { + "back": "Volve ao acceso", + "login": "Accede" + }, + "message": { + "requestSent": "Se o enderezo de correo proporcionado no paso anterior Ć© vĆ”lido e ligado a unha conta de usuaria, deberĆ­as recibir un correo coas instruciĆ³ns de restablecemento nun par de minutos.", + "success": "O contrasinal foi actualizado correctamente." + }, + "title": "Cambiar o contrasinal" + }, + "Plugins": { + "title": "Xestionar plugins" + }, + "ProfileActivity": { + "header": { + "playlists": "Listas de reproduciĆ³n", + "recentlyFavorited": "Favorecida recentemente", + "recentlyListened": "Escoitada recentemente" + } + }, + "ProfileBase": { + "label": { + "self": "Esta es tĆ­!" + }, + "link": { + "activity": "Actividade", + "domainView": "Ver en { domain }", + "moderation": "Actualizar regra de moderaciĆ³n", + "overview": "Vista xeral" + }, + "title": "Perfil de { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Cancelar", + "createChannel": "Crear canle", + "next": "Seguinte paso", + "previous": "Paso anterior" + }, + "header": { + "channels": "Canles", + "libraries": "Bibliotecas da usuaria", + "sharedLibraries": "Esta usuaria compartiu as seguintes bibliotecas" + }, + "link": { + "addNew": "Engadir nova" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Canle da artista" + }, + "header": "Crea unha canle", + "podcast": { + "header": "Canle de podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crear unha conta Funkwhale" + }, + "title": "Rexistro" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Cancelar", + "confirm": "Borrar", + "delete": "Eliminarā€¦", + "edit": "Editarā€¦", + "embed": "Incrustar", + "play": "Reproducir", + "updateChannel": "Actualizar canle", + "upload": "Subir" + }, + "header": { + "artistChannel": "Canle da artista", + "podcastChannel": "Canle de podcast" + }, + "link": { + "channelEpisodes": "TĆ³dolos episodios", + "channelOverview": "Vista xeral", + "channelTracks": "CanciĆ³ns", + "domainView": "Ver en { domain }", + "mirrored": "RĆ©plica de { domain }", + "moderation": "Actualizar regra de moderaciĆ³n" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "listenings": "{ n } escoita | { n } escoitas", + "subscribers": "{ n } subscritora | { n } subscritoras", + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canle e todos os ficheiros e datos relacionados. Esta acciĆ³n non ten volta." + }, + "header": "Eliminar esta Canle?" + }, + "embed": { + "header": "InclĆŗe esta canciĆ³n no teu sitio web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Se usas Mastodon ou outro servizo do fediverso, podes subscribirte a esta conta:" + }, + "header": "Subscribirse no Fediverso" + }, + "funkwhale": { + "header": "Subscribirse en Funkwhale" + }, + "header": "Subscribirse a esta canle", + "rss": { + "content": { + "help": "Copiar-pegar este URL na tĆŗa app de podcasting:" + }, + "header": "Subscribirse vĆ­a RSS" + } + } + }, + "title": "Canle" + }, + "DetailOverview": { + "header": { + "albums": "Ɓlbums", + "latestEpisodes": "ƚltimos episodios", + "latestTracks": "ƚltimas canciĆ³ns", + "series": "Series", + "uploadsFailure": "Non se publicaron algunha das subidas", + "uploadsProcessing": "EstĆ”nse a procesar as subidas", + "uploadsSuccess": "PublicĆ”ronse correctamente as subidas" + }, + "link": { + "addAlbum": "Engadir nova", + "erroredUploads": "Ver subidas con fallos", + "skippedUploads": "Ver subidas omitidas" + }, + "message": { + "processing": "Funkwhale estĆ” procesando as subidas e estarĆ”n dispoƱibles moi pronto." + }, + "meta": { + "progress": "Subidas procesadas: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Cancelar", + "subscribe": "Subscribir" + }, + "link": { + "addNew": "Engadir nova" + }, + "modal": { + "subscription": { + "header": "SubscriciĆ³n" + } + }, + "placeholder": { + "search": "Filtrar por nomeā€¦" + }, + "title": "SubscriciĆ³ns a canles" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Bibliotecas", + "tracks": "CanciĆ³ns" + }, + "menu": { + "secondary": "MenĆŗ secundario" + }, + "title": "Engadir contido" + }, + "Home": { + "button": { + "start": "Comezar" + }, + "description": { + "channel": { + "1": "Se es mĆŗsico ou podcaster, as canles estĆ”n deseƱadas para ti!", + "2": "Comparte publicamente o teu traballo para ter subscritoras en Funkwhale, do Fediverso ou calquer aplicaciĆ³n de podcast." + }, + "follow": "Segue bibliotecas doutras usuarias para ter nova mĆŗsica. As bibliotecas pĆŗblicas pĆ³dense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso.", + "upload": "Subir a tĆŗa biblioteca personal de mĆŗsica a Funkwhale para desfrutala desde onde queiras e compartila coas amizades." + }, + "header": { + "channel": "Publica o teu traballo nunha canle", + "follow": "Seguir bibliotecas remotas", + "upload": "Subir contido de terceiros a biblioteca" + }, + "help": { + "uploadQuota": "Esta instancia ofrece {quota} de almacenamento a cada usuaria." + }, + "title": "Engadir e xestionar contido" + }, + "libraries": { + "Card": { + "button": { + "upload": "Subir" + }, + "label": { + "size": "TamaƱo total dos ficheiros de esta biblioteca" + }, + "link": { + "details": "Detalles da biblioteca" + }, + "meta": { + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + } + }, + "FilesTable": { + "action": { + "delete": "Borrar", + "restartImport": "Volta a lanzar importaciĆ³n" + }, + "button": { + "showStatus": "Mostrar informaciĆ³n acerca do estado da subida desta canciĆ³n" + }, + "empty": { + "noTracks": "AĆ­nda non se engadiron canciĆ³ns a esta biblioteca" + }, + "label": { + "importStatus": "Estado da importaciĆ³n", + "search": "Buscar" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "Todos", + "draft": "Borrador", + "failed": "Fallou", + "finished": "Rematado", + "pending": "Pendente", + "skipped": "Saltado" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "DirecciĆ³n da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por tĆ­tulo, artista, Ć”lbumā€¦" + }, + "table": { + "file": { + "header": { + "album": "Ɓlbum", + "artist": "Artista", + "duration": "DuraciĆ³n", + "importStatus": "Estado da importaciĆ³n", + "size": "TamaƱo", + "title": "TĆ­tulo", + "uploadDate": "Data de subida" + } + } + } + }, + "Form": { + "button": { + "confirm": "Eliminar biblioteca", + "create": "Crear biblioteca", + "delete": "Borrar", + "update": "Actualizar biblioteca" + }, + "description": { + "library": "As bibliotecas axĆŗdanlle a organizar e compartir a sĆŗa colecciĆ³n musical. Pode subir a sĆŗa propia colecciĆ³n de mĆŗsica a Funkwhale e compartila cos seus amigos e familia.", + "visibility": "Pode compartir a biblioteca con outa xente, independentemente da sĆŗa visibilidade." + }, + "header": { + "failure": "Fallo" + }, + "label": { + "description": "DescriciĆ³n", + "name": "Nome", + "visibility": "Visibilidade" + }, + "message": { + "libraryCreated": "Biblioteca creada", + "libraryDeleted": "Biblioteca eliminada", + "libraryUpdated": "Biblioteca actualizada" + }, + "modal": { + "delete": { + "content": { + "warning": "EliminarĆ” completamente a biblioteca e as canciĆ³ns. Non poderĆ” voltar atrĆ”s." + }, + "header": "Eliminar esta biblioteca?" + } + }, + "placeholder": { + "description": "Esta biblioteca contĆ©n a miƱa mĆŗsica persoal, espero que che guste.", + "name": "A miƱa abraiante biblioteca" + } + }, + "Home": { + "empty": { + "noLibrary": "Semella que non ten unha biblioteca, Ć© momento de crear unha." + }, + "header": { + "libraries": "As miƱas Bibliotecas" + }, + "link": { + "createLibrary": "Crear nova biblioteca" + }, + "loading": { + "libraries": "Cargando Bibliotecasā€¦" + } + }, + "Quota": { + "button": { + "purge": "Limpar" + }, + "header": { + "currentUsage": "Uso actual" + }, + "label": { + "currentUsage": "{ current } utilizado de { max } permitido", + "errored": "Ficheiros con fallos", + "pending": "Ficheiros pendentes", + "percentUsed": "{progress}%", + "skipped": "Ficheiros saltados" + }, + "link": { + "viewFiles": "Ver ficheiros" + }, + "loading": { + "currentUsage": "Cargando datos de usoā€¦" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Elimina as canciĆ³ns subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a sĆŗa cuota." + }, + "header": "Eliminar ficheiros con fallos?" + }, + "purgePending": { + "content": { + "description": "Elimina completamente as canciĆ³ns subidas pero aĆ­nda non procesadas, engadindo o espazo correspondente a sĆŗa cuota." + }, + "header": "Eliminar ficheiros pendentes?" + }, + "purgeSkipped": { + "content": { + "description": "Elimina as canciĆ³ns subidas saltadas durante o proceso de importaciĆ³n, engadindo o espazo correspondente a sĆŗa cuota." + }, + "header": "Eliminar ficheiros saltados?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cancelar solicitude de seguimento", + "follow": "Seguir", + "pending": "Solicitude de seguimento pendente de aprobaciĆ³n", + "unfollow": "Deixar de seguir" + }, + "error": { + "follow": "Non se puido seguir a biblioteca remota: {error}", + "unfollow": "Non se puido retirar seguimento a biblioteca: {error}" + }, + "label": { + "scanFailure": "Problema ao escanear", + "scanPartialSuccess": "Escaneado con fallos", + "scanPending": "Ascendente", + "scanProgress": "Escaneandoā€¦ ({ progress }%)", + "scanSuccess": "Escaneado", + "sharingLink": "Compartir ligazĆ³n" + }, + "link": { + "scan": "Escanear agora ", + "scanDetails": "Detalles" + }, + "message": { + "scanLaunched": "Escaneado iniciado", + "scanSkipped": "Escaneado saltado (o escaneado anterior Ć© moi recente)" + }, + "meta": { + "failedTracks": "CanciĆ³ns que fallaron: {tracks}", + "lastUpdate": "ƚltima actualizaciĆ³n: ", + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Ɠ deixar de seguir esta biblioteca perderĆ”s o acceso Ć³ seu contido." + }, + "header": "Deixar de seguir biblioteca?" + } + }, + "tooltip": { + "private": "Esta biblioteca Ć© privada e precisas que a usuaria che conceda permiso para acceder ao contido", + "public": "Esta biblioteca Ć© pĆŗblica e pode acceder ao contido libremente" + } + }, + "Home": { + "button": { + "refresh": "Actualizar" + }, + "description": { + "remoteLibraries": "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son pĆŗblicas ou lle outorgan acceso." + }, + "header": { + "knownLibraries": "Bibliotecas coƱecidas", + "remoteLibraries": "Bibliotecas remotas" + }, + "loading": { + "remoteLibraries": "Cargando bibliotecas remotasā€¦" + } + }, + "ScanForm": { + "button": { + "submit": "Enviar busca" + }, + "header": { + "failure": "Non se obtivo a biblioteca remota" + }, + "label": { + "search": "Buscar unha biblioteca remota" + }, + "placeholder": { + "url": "Escribe o URL dunha biblioteca" } } } }, - "Search": { - "label": { - "albums": "Ɓlbums", - "artists": "Artistas", - "playlists": "Listas de reproduciĆ³n", - "podcasts": "Podcasts", - "radios": "Radios", - "series": "Series", - "tags": "Etiquetas", - "tracks": "CanciĆ³ns" + "library": { + "DetailAlbums": { + "empty": { + "follow": "PoderĆ­as ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca estĆ” baleira, deberĆ­as subir algo!" + } }, - "header": { - "search": "Buscar", - "remote": "Buscar un obxeto remoto", - "rss": "Subscribirse a fonte RSS do podcast" + "DetailOverview": { + "empty": { + "follow": "PoderĆ­as ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca estĆ” baleira, deberĆ­as subir algo!" + } }, - "button": { - "submit": "Enviar consulta de busca" + "DetailTracks": { + "empty": { + "follow": "PoderĆ­as ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca estĆ” baleira, deberĆ­as subir algo!" + } + }, + "Edit": { + "button": { + "accept": "Aceptar", + "reject": "Rexeitar" + }, + "empty": { + "noFollowers": "NinguĆ©n segue esta biblioteca" + }, + "header": { + "followers": "Seguidoras", + "libraryContents": "Contido da biblioteca" + }, + "loading": { + "followers": "Cargando seguidorasā€¦" + }, + "table": { + "action": { + "header": { + "action": "AcciĆ³n", + "date": "Data", + "status": "Estado", + "user": "Usuaria" + }, + "status": { + "accepted": "Aceptado", + "pending": "Pendente de aceptaciĆ³n", + "rejected": "Rexeitado" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Editar", + "upload": "Subir" + }, + "description": { + "sharingLink": "Comparte esta ligazĆ³n para que as usuarias poidan acceder a biblioteca ao pegala na barra de busca da sĆŗa instancia." + }, + "label": { + "instance": "Restrinxido", + "private": "Privado", + "public": "PĆŗblico", + "sharingLink": "Compartir ligazĆ³n" + }, + "link": { + "albums": "Ɓlbums", + "artists": "Artistas", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderaciĆ³n", + "owner": "Propiedade de { username }", + "tracks": "CanciĆ³ns" + }, + "meta": { + "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" + }, + "title": "Biblioteca", + "tooltip": { + "instance": "Esta biblioteca estĆ” restrinxida as usuarias de esta instancia", + "private": "Esta biblioteca Ć© privada e precisas que a usuaria che conceda permiso para acceder ao contido", + "public": "Esta biblioteca Ć© pĆŗblica e pode acceder ao contido libremente" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Cancelar", + "confirm": "Eliminar lista de reproduciĆ³n", + "delete": "Borrar", + "edit": "Editar", + "embed": "Incrustar", + "playAll": "Reproducir todo", + "stopEdit": "Deter a ediciĆ³n" + }, + "empty": { + "noTracks": "AĆ­nda non tes canciĆ³ns na lista de reproduciĆ³n" + }, + "header": { + "tracks": "CanciĆ³ns" + }, + "meta": { + "tracks": "Lista de reproduciĆ³n que contĆ©n { n } canciĆ³n, de { username } | Lista de reproduciĆ³n que contĆ©n { n } canciĆ³ns, de { username }" + }, + "modal": { + "delete": { + "content": { + "warning": "EliminarĆ” completamente a lista de reproduciĆ³n e non poderĆ” voltar atrĆ”s." + }, + "header": "Queres eliminar esta lista de reproduciĆ³n \"{ playlist }\"?" + }, + "embed": { + "header": "InclĆŗe esta lista no seu sitio web" + } + }, + "title": "Lista de reproduciĆ³n" + }, "List": { + "button": { + "create": "Crear lista de reproduciĆ³n", + "manage": "Xestiona as listas de reproduciĆ³n", + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a tĆŗa busca" + }, + "header": { + "browse": "Buscando nas listaxes", + "playlists": "Listas de reproduciĆ³n" + }, + "label": { + "search": "Buscar" + }, "ordering": { "direction": { "ascending": "Ascendente", @@ -4159,58 +4579,11 @@ }, "label": "Ordenando" }, - "header": { - "browse": "Buscando nas listaxes", - "playlists": "Listas de reproduciĆ³n" - }, - "button": { - "create": "Crear lista de reproduciĆ³n", - "manage": "Xestiona as listas de reproduciĆ³n", - "search": "Buscar" - }, - "placeholder": { - "search": "Nome da lista de reproduciĆ³nā€¦" - }, - "empty": { - "noResults": "Sen resultados para a tĆŗa busca" - }, "pagination": { "results": "Resultados por pĆ”xina" }, - "label": { - "search": "Buscar" - } - }, - "Detail": { - "button": { - "cancel": "Cancelar", - "delete": "Borrar", - "confirm": "Eliminar lista de reproduciĆ³n", - "edit": "Editar", - "embed": "Incrustar", - "playAll": "Reproducir todo", - "stopEdit": "Deter a ediciĆ³n" - }, - "modal": { - "delete": { - "header": "Queres eliminar esta lista de reproduciĆ³n \"{ playlist }\"?", - "content": { - "warning": "EliminarĆ” completamente a lista de reproduciĆ³n e non poderĆ” voltar atrĆ”s." - } - }, - "embed": { - "header": "InclĆŗe esta lista no seu sitio web" - } - }, - "title": "Lista de reproduciĆ³n", - "meta": { - "tracks": "Lista de reproduciĆ³n que contĆ©n { n } canciĆ³n, de { username } | Lista de reproduciĆ³n que contĆ©n { n } canciĆ³ns, de { username }" - }, - "empty": { - "noTracks": "AĆ­nda non tes canciĆ³ns na lista de reproduciĆ³n" - }, - "header": { - "tracks": "CanciĆ³ns" + "placeholder": { + "search": "Nome da lista de reproduciĆ³nā€¦" } } }, @@ -4218,289 +4591,26 @@ "Detail": { "button": { "confirm": "Eliminar radio", + "delete": "Eliminar", "edit": "Editarā€¦" }, - "modal": { - "delete": { - "header": "Queres eliminar a radio \"{ radio }\"?", - "content": { - "warning": "EliminarĆ” completamente a radio e non ten volta atrĆ”s." - } - } - }, "empty": { "noTracks": "AĆ­nda non se engadiron canciĆ³ns a esta radio" }, - "title": "Radio", "header": { + "radio": "Radio que inclĆŗe {tracks} canciĆ³ns, de ", "tracks": "CanciĆ³ns" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Engadeuse { n } canciĆ³n a cola | EngadĆ­ronse { n } canciĆ³ns a cola" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Acceso a ficheiros de audio, bibliotecas, artistas e canciĆ³ns", - "label": "Bibliotecas e subidas" - }, - "filters": { - "description": "Establecer filtros do contido", - "label": "Filtros de contido" - }, - "profile": { - "description": "Acesso a email, nome de usuaria, e informaciĆ³n do perfil", - "label": "Abrir perfil" - }, - "edits": { - "description": "Editar os contidos", - "label": "EdiciĆ³ns" - }, - "follows": { - "description": "Acceso aos seguimentos", - "label": "Segue" - }, - "listenings": { - "description": "Acceso ao historial de escoita", - "label": "Escoitas" - }, - "reports": { - "description": "Acceso Ć”s denuncias a moderar", - "label": "Denuncias" - }, - "notifications": { - "description": "Acceso as notificaciĆ³ns", - "label": "NotificaciĆ³ns" - }, - "playlists": { - "description": "Acceso a listas de reproduciĆ³n", - "label": "Listas de reproduciĆ³n" - }, - "radios": { - "description": "Acceso as radios", - "label": "Radios" - }, - "security": { - "description": "Acceso Ć³s axustes de seguridade como contrasinal e permisos", - "label": "Seguranza" - }, - "favorites": { - "label": "Favoritas" - } }, - "filters": { - "accessedDate": "Data de acceso", - "albumTitle": "Nome do Ć”lbum", - "artistName": "Nome do artista", - "bitrate": "Taxa de bits", - "creationDate": "Data de creaciĆ³n", - "domain": "Dominio", - "duration": "DuraciĆ³n", - "expirationDate": "Data de caducidade", - "firstSeen": "Data da primeira visualizaciĆ³n", - "followers": "Seguidoras", - "itemsCount": "Elementos", - "lastActivity": "ƚltima actividade", - "lastSeen": "Data da Ćŗltima vista", - "modificationDate": "Data de modificaciĆ³n", - "name": "Nome", - "receivedMessages": "Mensaxes recibidas", - "releaseDate": "Data da Ćŗltima vista", - "dateJoined": "Data de rexistro", - "size": "TamaƱo", - "trackTitle": "Nome da canciĆ³n", - "uploads": "Subidas", - "username": "Nome de usuaria", - "users": "Usuarias" - }, - "fields": { - "privacyLevel": { - "label": "Visibilidade da actividade", - "help": "Indica o nivel de visibilidade da tĆŗa actividade", - "shortChoices": { - "public": "Todo o mundo", - "instance": "Instancia", - "private": "Privado" + "modal": { + "delete": { + "content": { + "warning": "EliminarĆ” completamente a radio e non ten volta atrĆ”s." }, - "choices": { - "instance": "Todas nesta instancia", - "public": "Todas, en tĆ³dalas instancias", - "private": "NinguĆ©n excepto eu" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "CategorĆ­a", - "choices": { - "illegalContent": "Contido ilegal", - "invalidMetadata": "Metadatos non vĆ”lidos", - "offensiveContent": "Contido ofensivo", - "other": "Outro", - "takedownRequest": "Rexeitar peticiĆ³n" - } - }, - "importStatus": { - "label": "Preme para mostrar mĆ”is informaciĆ³n sobre o proceso de importaciĆ³n desta subida", - "choices": { - "draft": { - "label": "Borrador", - "help": "Subeuse a canciĆ³n, pero aĆ­nda non foi programado o procesamento" - }, - "errored": { - "label": "Con fallo", - "help": "Non se procesou esta canciĆ³n, asegĆŗrese que estĆ” correctamente etiquetada" - }, - "finished": { - "label": "Rematado", - "help": "Importado" - }, - "pending": { - "label": "Pendente", - "help": "CanciĆ³n subida, pero aĆ­nda non procesada polo servidor" - }, - "skipped": { - "label": "Saltado", - "help": "A canciĆ³n xa estĆ” presente nunha das sĆŗas bibliotecas" - } - } - }, - "contentCategory": { - "label": "CategorĆ­a do contido", - "choices": { - "music": "MĆŗsica", - "other": "Outro", - "podcast": "Podcast" - } + "header": "Queres eliminar a radio {radio}?" } - } + }, + "title": "Radio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Conta" - }, - "album": { - "typeLabel": "Ɓlbum", - "label": "Denunciar este Ć”lbumā€¦" - }, - "artist": { - "typeLabel": "Artista", - "label": "Denunciar este artistaā€¦" - }, - "channel": { - "typeLabel": "Canle", - "label": "Denunciar esta canleā€¦" - }, - "library": { - "typeLabel": "Biblioteca", - "label": "Denunciar esta bibliotecaā€¦" - }, - "playlist": { - "typeLabel": "Lista de reproduciĆ³n", - "label": "Denunciar esta listaxeā€¦" - }, - "track": { - "label": "Denunciar esta canciĆ³nā€¦", - "typeLabel": "CanciĆ³n" - } - }, - "useReportConfigs": { - "account": { - "label": "Conta", - "summary": "Bio" - }, - "album": { - "label": "Ɓlbum", - "releaseDate": "Data da Ćŗltima vista", - "title": "TĆ­tulo" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Canle" - }, - "track": { - "copyright": "Copyright", - "license": "Licenza", - "position": "PaxinaciĆ³n", - "title": "TĆ­tulo", - "label": "CanciĆ³n" - }, - "creationDate": { - "label": "Data de creaciĆ³n" - }, - "library": { - "description": "DescriciĆ³n", - "label": "Biblioteca" - }, - "musicbrainzId": { - "label": "ID en MusicBrainz" - }, - "name": { - "label": "Nome" - }, - "playlist": { - "label": "Lista de reproduciĆ³n" - }, - "tags": { - "label": "Etiquetas" - }, - "visibility": { - "label": "Visibilidade" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "Licenza", - "position": "PaxinaciĆ³n", - "title": "TĆ­tulo" - }, - "cover": { - "label": "Portada" - }, - "description": { - "label": "DescriciĆ³n" - }, - "artist": { - "name": "Nome" - }, - "album": { - "releaseDate": "Data da Ćŗltima vista", - "title": "TĆ­tulo" - }, - "tags": { - "label": "Etiquetas" - } - } - }, - "useThemeList": { - "darkTheme": "Escuro", - "lightTheme": "Claro" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Hai unha nova versiĆ³n da app.", - "actions": { - "later": "MĆ”is tarde", - "update": "Actualizar" - } - }, - "axios": { - "rateLimitDelay": "Enviaches demasiadas solicitudes en pouco tempo, intĆ©ntao de novo en { delay }", - "rateLimitLater": "Enviaches demasiadas solicitudes en pouco tempo, por favor intĆ©ntao mĆ”is tarde" } } } From 6b6ba942918c3b07f5414ed02fbd482c362c18c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Caras?= <matyas@caras.cafe> Date: Mon, 26 Jun 2023 16:39:46 +0000 Subject: [PATCH 175/371] Translated using Weblate (Czech) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/cs/ --- front/src/locales/cs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/locales/cs.json b/front/src/locales/cs.json index cf647dbf4..beefc4327 100644 --- a/front/src/locales/cs.json +++ b/front/src/locales/cs.json @@ -22,7 +22,7 @@ "closedRegistrations": "Registrace na tomto podu jsou uzavřenĆ©. MÅÆžete se zaregistrovat na jinĆ©m skrz odkaz nĆ­Å¾e." }, "link": { - "findOtherPod": "Hledat dalÅ”Ć­ pod", + "findOtherPod": "NajĆ­t jinĆ½ pod", "learnMore": "Dozvědět se vĆ­ce" }, "message": { @@ -113,7 +113,7 @@ "registrationsClosed": "Registrace na tomto podu jsou uzavřenĆ©. MÅÆžete se zaregistrovat na jinĆ©m skrz odkaz nĆ­Å¾e." }, "link": { - "findOtherPod": "Hledat dalÅ”Ć­ pody", + "findOtherPod": "NajĆ­t jinĆ½ pod", "funkwhale": "NavÅ”tĆ­vit funkwhale.audio", "learnMore": "Dozvědět se vĆ­ce", "mobileApps": { From 41dbf6235663ed64af4c509907edae139170f2e5 Mon Sep 17 00:00:00 2001 From: Transcriber allium <gia.xristo@gmail.com> Date: Sun, 23 Jul 2023 01:20:31 +0000 Subject: [PATCH 176/371] Translated using Weblate (Greek) Currently translated at 38.3% (836 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/el/ --- front/src/locales/el.json | 3960 +++++++++++++++++++------------------ 1 file changed, 2027 insertions(+), 1933 deletions(-) diff --git a/front/src/locales/el.json b/front/src/locales/el.json index 1c4d5f320..bc1b47c29 100644 --- a/front/src/locales/el.json +++ b/front/src/locales/el.json @@ -1,343 +1,272 @@ { + "App": { + "loading": "Ī¦ĪæĻĻ„ĻŽĪ½ĪµĻ„Ī±Ī¹..." + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "Ī¤Īæ { app } Ī¶Ī·Ļ„Ī¬ĪµĪ¹ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„ĪæĪ½ Funkwhale Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ ĻƒĪ±Ļ‚", - "authorize": "Ī•Ī¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĻŒĻ„Ī·ĻƒĪ· ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚ Ļ„ĻĪÆĻ„ĪæĻ…", - "allScopes": "Ī Ī»Ī®ĻĪ·Ļ‚ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·" - }, - "title": "ĪµĻ€Ī¹Ļ„ĻĪ­ĻˆĻ„Īµ Ļ„Ī·Ī½ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®", - "button": { - "authorize": "Ī•Ī¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĻŒĻ„Ī·ĻƒĪ· { app }" - }, - "help": { - "pasteCode": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ¬ĻˆĻ„Īµ ĪŗĪ±Ī¹ ĪµĻ€Ī¹ĪŗĪæĪ»Ī»Ī®ĻƒĻ„Īµ Ļ„ĪæĪ½ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæ ĪŗĻŽĪ“Ī¹ĪŗĪ± ĻƒĻ„Ī·Ī½ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·" - }, - "button": { - "confirmDisable": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚", - "disable": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚ ĻƒĻ„Īæ Subsonic" - }, - "modal": { - "disableSubsonic": { - "header": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚ ĻƒĻ„Īæ Subsonic API;" - } - }, - "link": { - "apps": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ Ļ€Ļ‰Ļ‚ Ī¼Ļ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹Ī®ĻƒĪµĻ„Īµ Ļ„Īæ Funkwhale Ī±Ļ€ĻŒ Ī¬Ī»Ī»ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚" - }, - "header": { - "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī±" - }, - "description": { - "subsonic": { - "paragraph1": "Ī¤Īæ Funkwhale ĪµĪÆĪ½Ī±Ī¹ ĻƒĻ…Ī¼Ī²Ī±Ļ„ĻŒ Ī¼Īµ Ī¬Ī»Ī»Ī± Ļ€ĻĪæĪ³ĻĪ¬Ī¼Ī¼Ī±Ļ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ Ļ€ĪæĻ… Ļ…Ļ€ĪæĻƒĻ„Ī·ĻĪÆĪ¶ĪæĻ…Ī½ Ļ„Īæ Subsonic API.", - "paragraph3": "Ī©ĻƒĻ„ĻŒĻƒĪæ, Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Īæ Funkwhale Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĪæĻĻ‚ Ļ„ĪæĻ…Ļ‚ clients Ī±Ļ€Ī±Ī¹Ļ„ĪµĪÆ Ī­Ī½Ī±Ī½ Ī¾ĪµĻ‡Ļ‰ĻĪ¹ĻƒĻ„ĻŒ ĪŗĻ‰Ī“Ī¹ĪŗĻŒ Ļ„ĪæĪ½ ĪæĻ€ĪæĪÆĪæ Ī¼Ļ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± ĪæĻĪÆĻƒĪµĻ„Īµ Ļ€Ī±ĻĪ±ĪŗĪ¬Ļ„Ļ‰." - } - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Access token", - "appId": "Ī‘Ī½Ī±Ī³Ī½Ļ‰ĻĪ¹ĻƒĻ„Ī¹ĪŗĻŒ Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚", - "appSecret": "ĪœĻ…ĻƒĻ„Ī¹ĪŗĻŒ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" - }, - "header": { - "appDetails": "Ī›ĪµĻ€Ļ„ĪæĪ¼Ī­ĻĪµĪ¹ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚", - "editApp": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" - }, - "help": { - "appDetails": "Ī¤Īæ Ī±Ī½Ī±Ī³Ī½Ļ‰ĻĪ¹ĻƒĻ„Ī¹ĪŗĻŒ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚ ĪŗĪ±Ī¹ Ļ„Īæ Ī¼Ļ…ĻƒĻ„Ī¹ĪŗĻŒ ĪµĪÆĪ½Ī±Ī¹ ĪµĻ…Ī±ĪÆĻƒĪøĪ·Ļ„ĪµĻ‚ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ ĪŗĪ±Ī¹ Ļ€ĻĪ­Ļ€ĪµĪ¹ Ī½Ī± Ļ„Ī± Ī±Ī½Ļ„Ī¹Ī¼ĪµĻ„Ļ‰Ļ€ĪÆĪ¶ĪµĻ„Ī±Ī¹ ĻƒĪ±Ī½ ĪŗĻ‰Ī“Ī¹ĪŗĪæĻĻ‚. ĪœĪ·Ī½ Ļ„Ī± Ī¼ĪæĪ¹ĻĪ±ĻƒĻ„ĪµĪÆĻ„Īµ Ī¼Īµ ĪŗĪ±Ī½Ī­Ī½Ī±Ī½." - }, - "link": { - "settings": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī¹Ļ‚ ĻĻ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚" - }, - "title": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" - }, - "Settings": { - "title": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚ Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", - "header": { - "accountSettings": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", - "authorizedApps": "Ī•Ī¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĪæĻ„Ī·Ī¼Ī­Ī½ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚", - "avatar": "Avatar", - "changeEmail": "Ī‘Ī»Ī»Ī±Ī³Ī® Ļ„Ī·Ļ‚ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚ e-mail Ī¼ĪæĻ…", - "changePassword": "Ī‘Ī»Ī»Ī±Ī³Ī® Ļ„ĪæĻ… ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ Ī¼ĪæĻ…", - "contentFilters": "Ī¦ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", - "deleteAccount": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ Ī¼ĪæĻ…", - "avatarFailure": "Ī¤Īæ avatar ĻƒĪ±Ļ‚ Ī“Īµ Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ī±Ļ€ĪæĪøĪ·ĪŗĪµĻ…Ļ„ĪµĪÆ" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī®" - } - }, - "yourApps": { - "header": { - "application": "Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī®", - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" - } - }, - "artists": { - "header": { - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Ī¤ĻĪ­Ļ‡Ļ‰Ī½ ĪŗĻ‰Ī“Ī¹ĪŗĻŒĻ‚" - }, - "button": { - "password": "Ī‘Ī»Ī»Ī±Ī³Ī® ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "deleteAccountConfirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ Ī¼ĪæĻ…", - "deleteAccount": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ Ī¼ĪæĻ…ā€¦", - "disableSubsonic": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "description": { - "changeEmail": "Ī‘Ī»Ī»Ī±Ī³Ī® Ļ„Ī·Ļ‚ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚ e-mail Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ ĻƒĪ±Ļ‚. Ī˜Ī± ĻƒĪ±Ļ‚ ĻƒĻ„Ī±Ī»ĪøĪµĪÆ e-mail ĪµĻ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ·Ļ‚ ĻƒĻ„Ī·Ī½ ĪŗĪ±Ī¹Ī½ĪæĻĻĪ¹Ī± Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·.", - "changePassword": { - "paragraph1": "Ī•Ī¬Ī½ Ī±Ī»Ī»Ī¬Ī¾ĪµĻ„Īµ Ļ„ĪæĪ½ ĪŗĻ‰Ī“Ī¹ĪŗĻŒ ĻƒĪ±Ļ‚ ĪøĪ± Ī±Ī»Ī»Ī¬Ī¾ĪµĪ¹ ĪŗĪ±Ī¹ Īæ ĪŗĻ‰Ī“Ī¹ĪŗĻŒĻ‚ Ļ„ĪæĻ… Subsonic API Ī±Ī½ Ī­Ļ‡ĪµĻ„Īµ Ī­Ī½Ī±Ī½." - }, - "contentFilters": "Ī¤Ī± Ļ†ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī²ĪæĪ·ĪøĪ¬Ī½Īµ ĻƒĻ„Īæ Ī½Ī± ĪŗĻĻĪ²ĪæĻ…Ī½ Ļ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ļ„Īæ ĪæĻ€ĪæĪÆĪæ Ī“ĪµĪ½ ĪøĪ­Ī»ĪµĻ„Īµ Ī½Ī± Ī²Ī»Ī­Ļ€ĪµĻ„Īµ ĻƒĻ„Ī·Ī½ Ļ…Ļ€Ī·ĻĪµĻƒĪÆĪ±." - }, - "modal": { - "changePassword": { - "header": "Ī‘Ī»Ī»Ī±Ī³Ī® ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ;", - "content": { - "warning": "Ī— Ī±Ī»Ī»Ī±Ī³Ī® Ļ„ĪæĻ… ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ ĻƒĪ±Ļ‚ ĪøĪ± Ī­Ļ‡ĪµĪ¹ Ļ„Ī¹Ļ‚ ĪµĪ¾Ī®Ļ‚ ĻƒĻ…Ī½Ī­Ļ€ĪµĪ¹ĪµĻ‚:" - } - }, - "deleteAccount": { - "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī“Ī¹Ī±Ī³ĻĪ¬ĻˆĪµĻ„Īµ Ļ„ĪæĪ½ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ ĻƒĪ±Ļ‚;" - } - }, - "help": { - "noApps": "Ī•Ī¬Ī½ ĪµĪ¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĪæĻ„Ī®ĻƒĪµĻ„Īµ Ļ„ĻĪÆĻ„ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ī½Ī± Ī­Ļ‡ĪæĻ…Ī½ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī± Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ī± ĻƒĪ±Ļ‚, Ī±Ļ…Ļ„Ī­Ļ‚ ĪæĪ¹ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ ĪøĪ± ĪµĪÆĪ½Ī±Ī¹ ĪŗĪ±Ļ„Ī±Ī³ĪµĪ³ĻĪ±Ī¼Ī¼Ī­Ī½ĪµĻ‚ ĪµĪ“ĻŽ." - }, - "message": { - "currentEmail": "Ī— Ļ„ĻĪ­Ļ‡ĪæĻ…ĻƒĪ± Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚ ĪµĪÆĪ½Ī±Ī¹ { email }.", - "confirmDelete": "Ī¤Īæ Ī±ĪÆĻ„Ī·Ī¼Ī± Ī“Ī¹Ī±Ī³ĻĪ±Ļ†Ī®Ļ‚ ĻƒĪ±Ļ‚ Ļ…Ļ€ĪæĪ²Ī»Ī®ĪøĪ·ĪŗĪµ, Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±Ī¼ĻŒĻ‚ ĻƒĪ±Ļ‚ ĪŗĪ±Ī¹ Ļ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½ĻŒ Ļ„ĪæĻ… ĪøĪ± Ī“Ī¹Ī±Ī³ĻĪ±Ļ†ĪæĻĪ½ ĻƒĻĪ½Ļ„ĪæĪ¼Ī±." - } - }, - "Logout": { - "header": { - "confirm": "Ī•ĪÆĻƒĻ„Īµ ĻƒĪÆĪ³ĪæĻ…ĻĪæĻ‚ Ļ€Ļ‰Ļ‚ ĪøĪ­Ī»ĪµĻ„Īµ Ī½Ī± Ī±Ļ€ĪæĻƒĻ…Ī½Ī“ĪµĪøĪµĪÆĻ„Īµ;" - } - }, - "ApplicationNew": { - "link": { - "settings": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī¹Ļ‚ ĻĻ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚" - }, - "title": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī½Ī­Ī±Ļ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" - }, - "LoginForm": { - "link": { - "createAccount": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" - }, - "placeholder": { - "username": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ Ļ„Īæ ĻŒĪ½ĪæĪ¼Ī± Ļ‡ĻĪ®ĻƒĻ„Ī· Ī® Ļ„Ī· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚" - }, - "help": { - "approvalRequired": "Ī•Ī¬Ī½ Ī³ĻĪ±Ļ†Ļ„Ī®ĪŗĪ±Ļ„Īµ Ļ€ĻĻŒĻƒĻ†Ī±Ļ„Ī±, Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ļ‡ĻĪµĪ¹Ī±ĻƒĻ„ĪµĪÆ Ī½Ī± Ļ€ĪµĻĪ¹Ī¼Ī­Ī½ĪµĻ„Īµ Ī¼Ī­Ļ‡ĻĪ¹ ĪæĪ¹ Ī“Ī¹Ī±Ļ‡ĪµĪ¹ĻĪ¹ĻƒĻ„Ī­Ļ‚ Ī½Ī± ĪµĪ»Ī­Ī³Ī¾ĪæĻ…Ī½ Ļ„Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ ĻƒĪ±Ļ‚, Ī® Ī½Ī± ĪµĻ€Ī±Ī»Ī·ĪøĪµĻĻƒĪæĻ…Ī½ Ļ„Ī· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚." - } - }, - "ApplicationForm": { - "button": { - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" - } - }, - "SignupForm": { - "button": { - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ ĻƒĪ±Ļ‚" - }, - "label": { - "email": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail" - }, - "placeholder": { - "username": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ Ļ„Īæ ĻŒĪ½ĪæĪ¼Ī± Ļ‡ĻĪ®ĻƒĻ„Ī· ĻƒĪ±Ļ‚" - } - }, - "Plugin": { - "link": { - "documentation": "Ī¤ĪµĻ‡Ī½Ī¹ĪŗĪ¬ ĪˆĪ³Ī³ĻĪ±Ļ†Ī±" - }, - "label": { - "pluginEnabled": "Ī•Ī½ĪµĻĪ³ĻŒ" - }, - "header": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· Ļ€ĻĻŒĻƒĪøĪµĻ„ĪæĻ…" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", - "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚" - }, - "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ", "header": { "aboutPod": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", + "findApp": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod", "publicContent": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī“Ī·Ī¼ĻŒĻƒĪ¹Ļ‰Ī½ Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ļ‰Ī½", - "findApp": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod" + "signup": "Ī•Ī³Ī³ĻĪ±Ļ†Ī®" }, "link": { - "findOtherPod": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod" - } - }, - "Home": { + "findOtherPod": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod", + "learnMore": "ĪœĪ¬ĪøĪµĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĪæĻ„ĪµĻĪ±" + }, + "placeholder": { + "noDescription": "Ī”ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪµĪ¹ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī· Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + }, "stat": { "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚" }, + "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ" + }, + "AboutPod": { + "feature": { + "allowList": "Ī›ĪÆĻƒĻ„Ī± Ī•Ļ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½", + "anonymousAccess": "Ī‘Ī½ĻŽĪ½Ļ…Ī¼Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·", + "status": { + "closed": "ĪšĪ»ĪµĪ¹ĻƒĻ„ĻŒ", + "disabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", + "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ" + }, + "version": "ĪˆĪŗĪ“ĪæĻƒĪ· Funkwhale" + }, "header": { - "aboutFunkwhale": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ļ„Īæ Funkwhale", - "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ Funkwhale pod", - "contact": "Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±" + "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", + "contact": "Ī•Ļ€Ī±Ļ†Ī­Ļ‚Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±", + "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚", + "terms": "ĪŒĻĪæĪ¹ ĪŗĪ±Ī¹ Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ® Ī±Ļ€ĪæĻĻĪ®Ļ„ĪæĻ…" }, "link": { - "publicContent": { - "label": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī“Ī·Ī¼ĻŒĻƒĪ¹Ļ‰Ī½ Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ļ‰Ī½" - }, - "userGuides": { - "description": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ ĻŒĻ„Ī¹ Ļ‡ĻĪµĪ¹Ī¬Ī¶ĪµĻ„Ī±Ī¹ Ī½Ī± Ī³Ī½Ļ‰ĻĪÆĪ¶ĪµĻ„Īµ Ī³Ī¹Ī± Ļ„Īæ Funkwhale ĪŗĪ±Ī¹ Ļ„Ī¹Ļ‚ Ī“Ļ…Ī½Ī±Ļ„ĻŒĻ„Ī·Ļ„ĪµĻ‚ Ļ„ĪæĻ…" - }, - "findOtherPod": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod" + "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", + "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚" }, + "stat": { + "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", + "albumsCount": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ | Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artistsCount": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ | ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚", + "listeningsCount": "{ n } Ī±ĪŗĻĻŒĪ±ĻƒĪ· | { n } Ī±ĪŗĻĪæĪ¬ĻƒĪµĪ¹Ļ‚", + "tracksCount": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ | Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" + }, + "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ" + }, + "Home": { "description": { "funkwhale": { "paragraph2": "Ī¤Īæ Funkwhale ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ‰ĻĪµĪ¬Ī½ ĪŗĪ±Ī¹ Ī±Ī½Ī±Ļ€Ļ„ĻĻƒĻƒĪµĻ„Ī±Ī¹ Ī±Ļ€ĻŒ Ī¼Ī¹Ī± Ļ†Ī¹Ī»Ī¹ĪŗĪ® ĪŗĪæĪ¹Ī½ĻŒĻ„Ī·Ļ„Ī± Ī±Ļ€ĻŒ ĪµĪøĪµĪ»ĪæĪ½Ļ„Ī­Ļ‚." } }, + "header": { + "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ Funkwhale pod", + "aboutFunkwhale": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ļ„Īæ Funkwhale", + "contact": "Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±", + "links": "Ī§ĻĪ®ĻƒĪ¹Ī¼ĪæĪ¹ ĻƒĻĪ½Ī“ĪµĻƒĪ¼ĪæĪ¹", + "login": "Ī£ĻĪ½Ī“ĪµĻƒĪ·", + "newChannels": "ĪĪ­Ī± ĪŗĪ±Ī½Ī¬Ī»Ī¹Ī±" + }, + "link": { + "findOtherPod": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod", + "funkwhale": "Ī•Ļ€Ī¹ĻƒĪŗĪµĻ†ĪøĪµĪÆĻ„Īµ Ļ„Īæ funkwhale.audio", + "learnMore": "ĪœĪ¬ĪøĪµĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪ±", + "mobileApps": { + "label": "Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ī³Ī¹Ī± ĪŗĪ¹Ī½Ī·Ļ„Ī¬" + }, + "publicContent": { + "label": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī“Ī·Ī¼ĻŒĻƒĪ¹Ļ‰Ī½ Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ļ‰Ī½" + }, + "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚ Ļ„ĪæĻ… ĻƒĪ­ĻĪ²ĪµĻ", + "userGuides": { + "description": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ ĻŒĻ„Ī¹ Ļ‡ĻĪµĪ¹Ī¬Ī¶ĪµĻ„Ī±Ī¹ Ī½Ī± Ī³Ī½Ļ‰ĻĪÆĪ¶ĪµĻ„Īµ Ī³Ī¹Ī± Ļ„Īæ Funkwhale ĪŗĪ±Ī¹ Ļ„Ī¹Ļ‚ Ī“Ļ…Ī½Ī±Ļ„ĻŒĻ„Ī·Ļ„ĪµĻ‚ Ļ„ĪæĻ…", + "label": "ĪŸĪ“Ī·Ī³ĪæĪÆ Ļ‡ĻĪ®ĻƒĪ·Ļ‚" + }, + "viewMore": "Ī”ĪµĪÆĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĪæĻŒĻ„ĪµĻĪ±ā€¦" + }, + "stat": { + "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", + "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚" + }, "title": "Ī‘ĻĻ‡Ī¹ĪŗĪ®" }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } + "PageNotFound": { + "header": { + "pageNotFound": "Ī— ĻƒĪµĪ»ĪÆĪ“Ī± Ī“ĪµĪ½ Ī²ĻĪ­ĪøĪ·ĪŗĪµ!" + }, + "link": { + "home": "Ī Ī·Ī³Ī±ĪÆĪ½ĪµĻ„Īµ ĻƒĻ„Ī·Ī½ Ī±ĻĻ‡Ī¹ĪŗĪ® ĻƒĪµĪ»ĪÆĪ“Ī±" + }, + "title": "Ī— ĻƒĪµĪ»ĪÆĪ“Ī± Ī“ĪµĪ½ Ī²ĻĪ­ĪøĪ·ĪŗĪµ" + }, + "Queue": { + "button": { + "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±", + "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" + }, + "label": { + "addArtistContentFilter": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·ā€¦", + "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±", + "enterFullscreen": "Ī Ī»Ī®ĻĪ·Ļ‚ ĪæĪøĻŒĪ½Ī·", + "exitFullscreen": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ Ļ€Ī»Ī®ĻĪæĻ…Ļ‚ ĪæĪøĻŒĪ½Ī·Ļ‚", + "favorite": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹", + "next": "Ī•Ļ€ĻŒĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹", + "pause": "Ī Ī±ĻĻƒĪ·", + "play": "ĪˆĪ½Ī±ĻĪ¾Ī·", + "previous": "Ī ĻĪæĪ·Ī³ĪæĻĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹", + "remove": "Ī‘Ļ†Ī±ĪÆĻĪµĻƒĪ·", + "selectTrack": "Ī•Ļ€Ī¹Ī»ĪæĪ³Ī® ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" + }, + "message": { + "automaticPlay": "Ī¤Īæ ĪµĻ€ĻŒĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ ĪøĪ± Ī¾ĪµĪŗĪ¹Ī½Ī®ĻƒĪµĪ¹ ĻƒĪµ Ī¼ĪµĻĪ¹ĪŗĪ¬ Ī“ĪµĻ…Ļ„ĪµĻĻŒĪ»ĪµĻ€Ļ„Ī±ā€¦", + "radio": "Ī¤Ī± Ī½Ī­Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± ĪøĪ± Ļ€ĻĪæĻƒĻ„ĪÆĪøĪµĪ½Ļ„Ī±Ī¹ ĪµĪ“ĻŽ Ī±Ļ…Ļ„ĻŒĪ¼Ī±Ļ„Ī±." + }, + "meta": { + "end": "Ī¤Ī­Ī»ĪæĻ‚", + "queuePosition": "ĪšĪæĪ¼Ī¼Ī¬Ļ„Ī¹ {index} Ī±Ļ€ĻŒ {length}", + "startTime": "00:00", + "unknownAlbum": "Ī†Ī³Ī½Ļ‰ĻƒĻ„Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "unknownArtist": "Ī†Ī³Ļ‰ĻƒĻ„ĪæĻ‚ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Ī‘Ī½Ī±Ī¶Ī®Ļ„Ī·ĻƒĪ·" + }, + "label": { + "rss": { + "fieldPlaceholder": "https://website.example.com/rss.xml" + } + } + }, + "SetInstanceModal": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "submit": "Ī„Ļ€ĪæĪ²ĪæĪ»Ī®" + }, + "header": { + "chooseInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚" + } + }, + "ShortcutsModal": { + "button": { + "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" + }, + "shortcut": { + "audio": { + "clearQueue": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± ĪæĻ…ĻĪ¬Ļ‚", + "decreaseVolume": "ĪœĪµĪÆĻ‰ĻƒĪ· Ī­Ī½Ļ„Ī±ĻƒĪ·Ļ‚", + "label": "Ī£Ļ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", + "shuffleQueue": "Ī¤Ļ…Ļ‡Ī±ĪÆĪ± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®", + "toggleMute": "Ī£ĪÆĪ³Ī±ĻƒĪ·" + }, + "general": { + "label": "Ī“ĪµĪ½Ī¹ĪŗĪ­Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚" + } + } + }, + "Sidebar": { + "header": { + "administration": "Ī”Ī¹Ī±Ļ‡ĪµĪÆĻĪ¹ĻƒĪ·", + "explore": "Ī‘Ī½Ī±ĪŗĪ¬Ī»Ļ…ĻˆĪµ", + "library": "Ī’Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·", + "more": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½" + }, + "label": { + "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", + "administration": "Ī”Ī¹Ī±Ļ‡ĪµĪÆĻĪ¹ĻƒĪ·", + "language": "Ī‘Ī»Ī»Ī±Ī³Ī® Ī³Ī»ĻŽĻƒĻƒĪ±Ļ‚" + }, + "link": { + "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ·", + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±", + "createAccount": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", + "favorites": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", + "home": "Ī‘ĻĻ‡Ī¹ĪŗĪ®", + "library": "Ī’Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·", + "login": "Ī£ĻĪ½Ī“ĪµĻƒĪ·", + "podcasts": "Podcasts", + "radios": "Ī”Ī¬Ī“Ī¹Īæ", + "search": "Ī‘Ī½Ī±Ī¶Ī®Ļ„Ī·ĻƒĪ·", + "settings": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚", + "switchInstance": "Ī‘Ī»Ī»Ī±Ī³Ī® pod", + "users": "Ī§ĻĪ®ĻƒĻ„ĪµĻ‚" + } + }, + "admin": { + "SettingsGroup": { + "header": { + "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· ĻĻ…ĪøĪ¼ĪÆĻƒĪµĻ‰Ī½", + "image": "Ī¤ĻĪ­Ļ‡Ļ‰Ī½ ĪµĪ¹ĪŗĻŒĪ½Ī±" } }, + "SignupFormBuilder": { + "button": { + "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĪ“ĪÆĪæĻ…", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± Ļ†ĻŒĻĪ¼Ī±Ļ‚" + }, + "help": { + "additionalFields": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€ĪµĪ“ĪÆĪ± Ļ€ĪæĻ… ĪøĪ± ĪµĪ¼Ļ†Ī±Ī½Ī¹ĻƒĻ„ĪæĻĪ½ ĻƒĻ„Ī·Ī½ Ļ†ĻŒĻĪ¼Ī±. Ī•Ī¼Ļ†Ī±Ī½ĪÆĪ¶ĪæĪ½Ļ„Ī±Ī¹ Ī¼ĻŒĪ½Īæ Ī±Ī½ ĪµĪÆĪ½Ī±Ī¹ ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Ī· Ī· Ļ‡ĪµĪ¹ĻĪæĪŗĪÆĪ½Ī·Ļ„Ī· Ī±Ļ€ĪæĪ“ĪæĻ‡Ī® ĪµĪ³Ī³ĻĪ±Ļ†ĻŽĪ½.", + "helpText": "Ī ĻĪæĪ±Ī¹ĻĪµĻ„Ī¹ĪŗĻŒ ĪŗĪµĪÆĪ¼ĪµĪ½Īæ Ļ€ĪæĻ… ĪøĪ± ĪµĪ¼Ļ†Ī±Ī½ĪÆĪ¶ĪµĻ„Ī±Ī¹ ĻƒĻ„Ī·Ī½ Ī±ĻĻ‡Ī® Ļ„Ī·Ļ‚ Ļ†ĻŒĻĪ¼Ī±Ļ‚ ĪµĪ³Ī³ĻĪ±Ļ†Ī®Ļ‚." + }, + "label": { + "additionalField": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€ĪµĪ“ĪÆĪæ", + "additionalFields": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€ĪµĪ“ĪÆĪ±", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚", + "type": "Ī¤ĻĻ€ĪæĻ‚ Ļ€ĪµĪ“ĪÆĪæĻ…" + }, + "required": { + "false": "Ī›Ī¬ĪøĪæĻ‚" + } + } + } + } + }, + "audio": { "ChannelCard": { "meta": { "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" } }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - } - }, - "Player": { - "meta": { - "position": "{ index } Ī±Ļ€Īæ { length }" - }, - "header": { - "player": "Ī‘Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī® Ī®Ļ‡ĪæĻ… ĪŗĪ±Ī¹ Ļ‡ĪµĪ¹ĻĪ¹ĻƒĪ¼ĻŒĻ‚" - }, - "label": { - "clearQueue": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± Ļ„Ī·Ļ‚ ĪæĻ…ĻĪ¬Ļ‚ ĻƒĪ±Ļ‚", - "addArtistContentFilter": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·ā€¦" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ļ„ĻĪ­Ļ‡ĪæĻ…ĻƒĪ± ĪæĻ…ĻĪ¬", - "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦", - "episodeDetails": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", - "hideArtist": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī± Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", - "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦", - "addToQueue": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ ĪæĻ…ĻĪ¬", - "episodeDetails": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", - "startRadio": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻĪ¬Ī“Ī¹Īæ", - "artistDetails": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "channelDetails": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī± Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", - "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦", - "addToQueue": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ ĪæĻ…ĻĪ¬", - "episodeDetails": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", - "startRadio": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻĪ¬Ī“Ī¹Īæ", - "artistDetails": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "channelDetails": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - } - }, - "Table": { - "table": { - "header": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" - } - } - } - }, - "VolumeControl": { - "label": { - "slider": "Ī”ĻĪøĪ¼Ī¹ĻƒĪ· Ī­Ī½Ļ„Ī±ĻƒĪ·Ļ‚" - } - }, - "SearchBar": { - "label": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" - } - }, - "Search": { - "header": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" - }, - "placeholder": { - "search": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚, Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼, ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ā€¦" + "ChannelEntries": { + "help": { + "subscribe": "Ī•Ī³Ī³ĻĪ±Ļ†ĪµĪÆĻ„Īµ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ ĪŗĪ±Ī½Ī¬Ī»Ī¹ Ī³Ī¹Ī± Ī½Ī± Ī“ĪµĪÆĻ„Īµ Ļ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½ĻŒ Ļ„ĪæĻ…." } }, "ChannelForm": { + "header": { + "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· Ļ„ĪæĻ… ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" + }, "label": { - "discography": "Ī”Ī¹ĻƒĪŗĪæĪ³ĻĪ±Ļ†ĪÆĪ± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", + "discography": "Ī”Ī¹ĻƒĪŗĪæĪ³ĻĪ±Ļ†ĪÆĪ± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", "image": "Ī¦Ļ‰Ļ„ĪæĪ³ĻĪ±Ļ†ĪÆĪ± ĪšĪ±Ī½Ī±Ī»Ī¹ĪæĻ", - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + "language": "Ī“Ī»ĻŽĻƒĻƒĪ±", + "name": "ĪŒĪ½ĪæĪ¼Ī±", + "podcast": "Podcasts", + "subcategory": "Ī„Ļ€ĪæĪŗĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" }, "placeholder": { "name": "Ļ†ĪæĪ²ĪµĻĻŒ ĻŒĪ½ĪæĪ¼Ī± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ", "username": "Ļ†ĪæĪ²ĪµĻĪæĪæĪ½ĪæĪ¼Ī±ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ…" - }, - "header": { - "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· Ļ„ĪæĻ… ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" } }, - "LibraryFollowButton": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ· Ī±Ī¹Ļ„Ī®Ī¼Ī±Ļ„ĪæĻ‚ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæĻ…", - "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ" + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±" } }, "EmbedWizard": { @@ -350,234 +279,509 @@ "label": { "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· ĪŗĻŽĪ“Ī¹ĪŗĪ±" } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ· Ī±Ī¹Ļ„Ī®Ī¼Ī±Ļ„ĪæĻ‚ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæĻ…", + "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦", + "addToQueue": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ļ„ĻĪ­Ļ‡ĪæĻ…ĻƒĪ± ĪæĻ…ĻĪ¬", + "discretePlay": "ĪˆĪ½Ī±ĻĪ¾Ī·", + "episodeDetails": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", + "hideArtist": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", + "report": "Ī‘Ī½Ī±Ļ†ĪæĻĪ¬ā€¦", + "trackDetails": "Ī›ĪµĻ€Ļ„ĪæĪ¼Ī­ĻĪµĪ¹ĪµĻ‚ ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" + } + }, + "Player": { + "header": { + "player": "Ī‘Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī® Ī®Ļ‡ĪæĻ… ĪŗĪ±Ī¹ Ļ‡ĪµĪ¹ĻĪ¹ĻƒĪ¼ĻŒĻ‚" + }, + "label": { + "addArtistContentFilter": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·ā€¦", + "clearQueue": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± Ļ„Ī·Ļ‚ ĪæĻ…ĻĪ¬Ļ‚ ĻƒĪ±Ļ‚", + "mute": "Ī£ĪÆĪ³Ī±ĻƒĪ·", + "pause": "Ī Ī±ĻĻƒĪ·", + "unmute": "Ī‘Ī½Ī±ĪÆĻĪµĻƒĪ· ĻƒĪÆĪ³Ī±ĻƒĪ·Ļ‚" + }, + "meta": { + "position": "{ index } Ī±Ļ€Īæ { length }", + "unknownAlbum": "Ī†Ī³Ī½Ļ‰ĻƒĻ„Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "unknownArtist": "Ī†Ī³Ī½Ļ‰ĻƒĻ„ĪæĻ‚ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" + } + }, + "Search": { + "header": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "search": "Ī‘Ī½Ī±Ī¶Ī®Ļ„Ī·ĻƒĪ· Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚" + }, + "placeholder": { + "search": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚, Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼, ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ā€¦" + } + }, + "SearchBar": { + "label": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "category": { + "podcasts": "Podcasts" + }, + "track": "ĪšĪæĪ¼Ī¼Ī¬Ļ„Ī¹" + }, + "link": { + "fediverse": "Ī‘Ī½Ī±Ī¶Ī®Ļ„Ī·ĻƒĪ· ĻƒĻ„Īæ fediverse", + "more": "Ī ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪ± Ī±Ļ€ĪæĻ„ĪµĪ»Ī­ĻƒĪ¼Ī±Ļ„Ī± šŸ”’" + } + }, + "VolumeControl": { + "button": { + "mute": "Ī£ĪÆĪ³Ī±ĻƒĪ·", + "unmute": "Ī‘Ī½Ī±ĪÆĻĪµĻƒĪ· ĻƒĪÆĪ³Ī±ĻƒĪ·Ļ‚" + }, + "label": { + "slider": "Ī”ĻĪøĪ¼Ī¹ĻƒĪ· Ī­Ī½Ļ„Ī±ĻƒĪ·Ļ‚" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + } + } + }, + "podcast": { + "Modal": { + "button": { + "addToFavorites": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī± Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", + "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦", + "addToQueue": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ ĪæĻ…ĻĪ¬", + "artistDetails": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "channelDetails": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", + "episodeDetails": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", + "startRadio": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻĪ¬Ī“Ī¹Īæ" + } + } + }, + "track": { + "Modal": { + "button": { + "addToFavorites": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī± Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", + "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦", + "addToQueue": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ ĪæĻ…ĻĪ¬", + "artistDetails": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "channelDetails": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", + "episodeDetails": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", + "startRadio": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻĪ¬Ī“Ī¹Īæ" + } + }, + "Table": { + "table": { + "header": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" + } + } + } + } + }, + "auth": { + "ApplicationEdit": { + "header": { + "appDetails": "Ī›ĪµĻ€Ļ„ĪæĪ¼Ī­ĻĪµĪ¹ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚", + "editApp": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" + }, + "help": { + "appDetails": "Ī¤Īæ Ī±Ī½Ī±Ī³Ī½Ļ‰ĻĪ¹ĻƒĻ„Ī¹ĪŗĻŒ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚ ĪŗĪ±Ī¹ Ļ„Īæ Ī¼Ļ…ĻƒĻ„Ī¹ĪŗĻŒ ĪµĪÆĪ½Ī±Ī¹ ĪµĻ…Ī±ĪÆĻƒĪøĪ·Ļ„ĪµĻ‚ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ ĪŗĪ±Ī¹ Ļ€ĻĪ­Ļ€ĪµĪ¹ Ī½Ī± Ļ„Ī± Ī±Ī½Ļ„Ī¹Ī¼ĪµĻ„Ļ‰Ļ€ĪÆĪ¶ĪµĻ„Ī±Ī¹ ĻƒĪ±Ī½ ĪŗĻ‰Ī“Ī¹ĪŗĪæĻĻ‚. ĪœĪ·Ī½ Ļ„Ī± Ī¼ĪæĪ¹ĻĪ±ĻƒĻ„ĪµĪÆĻ„Īµ Ī¼Īµ ĪŗĪ±Ī½Ī­Ī½Ī±Ī½." + }, + "label": { + "accessToken": "Access token", + "appId": "Ī‘Ī½Ī±Ī³Ī½Ļ‰ĻĪ¹ĻƒĻ„Ī¹ĪŗĻŒ Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚", + "appSecret": "ĪœĻ…ĻƒĻ„Ī¹ĪŗĻŒ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" + }, + "link": { + "settings": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī¹Ļ‚ ĻĻ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚" + }, + "title": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" + }, + "ApplicationForm": { + "button": { + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" + } + }, + "ApplicationNew": { + "link": { + "settings": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī¹Ļ‚ ĻĻ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚" + }, + "title": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī½Ī­Ī±Ļ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚" + }, + "Authorize": { + "button": { + "authorize": "Ī•Ī¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĻŒĻ„Ī·ĻƒĪ· { app }" + }, + "header": { + "access": "Ī¤Īæ { app } Ī¶Ī·Ļ„Ī¬ĪµĪ¹ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„ĪæĪ½ Funkwhale Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ ĻƒĪ±Ļ‚", + "allScopes": "Ī Ī»Ī®ĻĪ·Ļ‚ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·", + "authorize": "Ī•Ī¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĻŒĻ„Ī·ĻƒĪ· ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚ Ļ„ĻĪÆĻ„ĪæĻ…" + }, + "help": { + "pasteCode": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ¬ĻˆĻ„Īµ ĪŗĪ±Ī¹ ĪµĻ€Ī¹ĪŗĪæĪ»Ī»Ī®ĻƒĻ„Īµ Ļ„ĪæĪ½ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæ ĪŗĻŽĪ“Ī¹ĪŗĪ± ĻƒĻ„Ī·Ī½ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®:" + }, + "title": "ĪµĻ€Ī¹Ļ„ĻĪ­ĻˆĻ„Īµ Ļ„Ī·Ī½ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®" + }, + "LoginForm": { + "help": { + "approvalRequired": "Ī•Ī¬Ī½ Ī³ĻĪ±Ļ†Ļ„Ī®ĪŗĪ±Ļ„Īµ Ļ€ĻĻŒĻƒĻ†Ī±Ļ„Ī±, Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ļ‡ĻĪµĪ¹Ī±ĻƒĻ„ĪµĪÆ Ī½Ī± Ļ€ĪµĻĪ¹Ī¼Ī­Ī½ĪµĻ„Īµ Ī¼Ī­Ļ‡ĻĪ¹ ĪæĪ¹ Ī“Ī¹Ī±Ļ‡ĪµĪ¹ĻĪ¹ĻƒĻ„Ī­Ļ‚ Ī½Ī± ĪµĪ»Ī­Ī³Ī¾ĪæĻ…Ī½ Ļ„Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ ĻƒĪ±Ļ‚, Ī® Ī½Ī± ĪµĻ€Ī±Ī»Ī·ĪøĪµĻĻƒĪæĻ…Ī½ Ļ„Ī· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚." + }, + "link": { + "createAccount": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" + }, + "placeholder": { + "username": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ Ļ„Īæ ĻŒĪ½ĪæĪ¼Ī± Ļ‡ĻĪ®ĻƒĻ„Ī· Ī® Ļ„Ī· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚" + } + }, + "Logout": { + "header": { + "confirm": "Ī•ĪÆĻƒĻ„Īµ ĻƒĪÆĪ³ĪæĻ…ĻĪæĻ‚ Ļ€Ļ‰Ļ‚ ĪøĪ­Ī»ĪµĻ„Īµ Ī½Ī± Ī±Ļ€ĪæĻƒĻ…Ī½Ī“ĪµĪøĪµĪÆĻ„Īµ;" + } + }, + "Plugin": { + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· Ļ€ĻĻŒĻƒĪøĪµĻ„ĪæĻ…" + }, + "label": { + "pluginEnabled": "Ī•Ī½ĪµĻĪ³ĻŒ" + }, + "link": { + "documentation": "Ī¤ĪµĻ‡Ī½Ī¹ĪŗĪ¬ ĪˆĪ³Ī³ĻĪ±Ļ†Ī±" + } + }, + "Settings": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "deleteAccount": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ Ī¼ĪæĻ…ā€¦", + "deleteAccountConfirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ Ī¼ĪæĻ…", + "disableSubsonic": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±", + "password": "Ī‘Ī»Ī»Ī±Ī³Ī® ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ" + }, + "description": { + "changeEmail": "Ī‘Ī»Ī»Ī±Ī³Ī® Ļ„Ī·Ļ‚ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚ e-mail Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ ĻƒĪ±Ļ‚. Ī˜Ī± ĻƒĪ±Ļ‚ ĻƒĻ„Ī±Ī»ĪøĪµĪÆ e-mail ĪµĻ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ·Ļ‚ ĻƒĻ„Ī·Ī½ ĪŗĪ±Ī¹Ī½ĪæĻĻĪ¹Ī± Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·.", + "changePassword": { + "paragraph1": "Ī•Ī¬Ī½ Ī±Ī»Ī»Ī¬Ī¾ĪµĻ„Īµ Ļ„ĪæĪ½ ĪŗĻ‰Ī“Ī¹ĪŗĻŒ ĻƒĪ±Ļ‚ ĪøĪ± Ī±Ī»Ī»Ī¬Ī¾ĪµĪ¹ ĪŗĪ±Ī¹ Īæ ĪŗĻ‰Ī“Ī¹ĪŗĻŒĻ‚ Ļ„ĪæĻ… Subsonic API Ī±Ī½ Ī­Ļ‡ĪµĻ„Īµ Ī­Ī½Ī±Ī½." + }, + "contentFilters": "Ī¤Ī± Ļ†ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī²ĪæĪ·ĪøĪ¬Ī½Īµ ĻƒĻ„Īæ Ī½Ī± ĪŗĻĻĪ²ĪæĻ…Ī½ Ļ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ļ„Īæ ĪæĻ€ĪæĪÆĪæ Ī“ĪµĪ½ ĪøĪ­Ī»ĪµĻ„Īµ Ī½Ī± Ī²Ī»Ī­Ļ€ĪµĻ„Īµ ĻƒĻ„Ī·Ī½ Ļ…Ļ€Ī·ĻĪµĻƒĪÆĪ±." + }, + "header": { + "accountSettings": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", + "authorizedApps": "Ī•Ī¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĪæĻ„Ī·Ī¼Ī­Ī½ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚", + "avatar": "Avatar", + "avatarFailure": "Ī¤Īæ avatar ĻƒĪ±Ļ‚ Ī“Īµ Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ī±Ļ€ĪæĪøĪ·ĪŗĪµĻ…Ļ„ĪµĪÆ", + "changeEmail": "Ī‘Ī»Ī»Ī±Ī³Ī® Ļ„Ī·Ļ‚ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚ e-mail Ī¼ĪæĻ…", + "changePassword": "Ī‘Ī»Ī»Ī±Ī³Ī® Ļ„ĪæĻ… ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ Ī¼ĪæĻ…", + "contentFilters": "Ī¦ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", + "deleteAccount": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ Ī¼ĪæĻ…" + }, + "help": { + "noApps": "Ī•Ī¬Ī½ ĪµĪ¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĪæĻ„Ī®ĻƒĪµĻ„Īµ Ļ„ĻĪÆĻ„ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ī½Ī± Ī­Ļ‡ĪæĻ…Ī½ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī± Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ī± ĻƒĪ±Ļ‚, Ī±Ļ…Ļ„Ī­Ļ‚ ĪæĪ¹ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ ĪøĪ± ĪµĪÆĪ½Ī±Ī¹ ĪŗĪ±Ļ„Ī±Ī³ĪµĪ³ĻĪ±Ī¼Ī¼Ī­Ī½ĪµĻ‚ ĪµĪ“ĻŽ." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Ī¤ĻĪ­Ļ‡Ļ‰Ī½ ĪŗĻ‰Ī“Ī¹ĪŗĻŒĻ‚" + }, + "message": { + "confirmDelete": "Ī¤Īæ Ī±ĪÆĻ„Ī·Ī¼Ī± Ī“Ī¹Ī±Ī³ĻĪ±Ļ†Ī®Ļ‚ ĻƒĪ±Ļ‚ Ļ…Ļ€ĪæĪ²Ī»Ī®ĪøĪ·ĪŗĪµ, Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±Ī¼ĻŒĻ‚ ĻƒĪ±Ļ‚ ĪŗĪ±Ī¹ Ļ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½ĻŒ Ļ„ĪæĻ… ĪøĪ± Ī“Ī¹Ī±Ī³ĻĪ±Ļ†ĪæĻĪ½ ĻƒĻĪ½Ļ„ĪæĪ¼Ī±.", + "currentEmail": "Ī— Ļ„ĻĪ­Ļ‡ĪæĻ…ĻƒĪ± Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚ ĪµĪÆĪ½Ī±Ī¹ { email }." + }, + "modal": { + "changePassword": { + "content": { + "warning": "Ī— Ī±Ī»Ī»Ī±Ī³Ī® Ļ„ĪæĻ… ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ ĻƒĪ±Ļ‚ ĪøĪ± Ī­Ļ‡ĪµĪ¹ Ļ„Ī¹Ļ‚ ĪµĪ¾Ī®Ļ‚ ĻƒĻ…Ī½Ī­Ļ€ĪµĪ¹ĪµĻ‚:" + }, + "header": "Ī‘Ī»Ī»Ī±Ī³Ī® ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ;" + }, + "deleteAccount": { + "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī“Ī¹Ī±Ī³ĻĪ¬ĻˆĪµĻ„Īµ Ļ„ĪæĪ½ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ ĻƒĪ±Ļ‚;" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + } + }, + "authorizedApps": { + "header": { + "application": "Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī®" + } + }, + "yourApps": { + "header": { + "application": "Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī®", + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + } + } + }, + "title": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚ Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" + }, + "SignupForm": { + "button": { + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ļ„ĪæĻ… Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ ĻƒĪ±Ļ‚" + }, + "label": { + "email": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail" + }, + "placeholder": { + "username": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ Ļ„Īæ ĻŒĪ½ĪæĪ¼Ī± Ļ‡ĻĪ®ĻƒĻ„Ī· ĻƒĪ±Ļ‚" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚", + "disable": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚ ĻƒĻ„Īæ Subsonic" + }, + "description": { + "subsonic": { + "paragraph1": "Ī¤Īæ Funkwhale ĪµĪÆĪ½Ī±Ī¹ ĻƒĻ…Ī¼Ī²Ī±Ļ„ĻŒ Ī¼Īµ Ī¬Ī»Ī»Ī± Ļ€ĻĪæĪ³ĻĪ¬Ī¼Ī¼Ī±Ļ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ Ļ€ĪæĻ… Ļ…Ļ€ĪæĻƒĻ„Ī·ĻĪÆĪ¶ĪæĻ…Ī½ Ļ„Īæ Subsonic API.", + "paragraph3": "Ī©ĻƒĻ„ĻŒĻƒĪæ, Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Īæ Funkwhale Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĪæĻĻ‚ Ļ„ĪæĻ…Ļ‚ clients Ī±Ļ€Ī±Ī¹Ļ„ĪµĪÆ Ī­Ī½Ī±Ī½ Ī¾ĪµĻ‡Ļ‰ĻĪ¹ĻƒĻ„ĻŒ ĪŗĻ‰Ī“Ī¹ĪŗĻŒ Ļ„ĪæĪ½ ĪæĻ€ĪæĪÆĪæ Ī¼Ļ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± ĪæĻĪÆĻƒĪµĻ„Īµ Ļ€Ī±ĻĪ±ĪŗĪ¬Ļ„Ļ‰." + } + }, + "header": { + "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī±" + }, + "link": { + "apps": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ Ļ€Ļ‰Ļ‚ Ī¼Ļ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹Ī®ĻƒĪµĻ„Īµ Ļ„Īæ Funkwhale Ī±Ļ€ĻŒ Ī¬Ī»Ī»ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚" + }, + "message": { + "accessDisabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·" + }, + "modal": { + "disableSubsonic": { + "header": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪÆĪ·ĻƒĪ· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚ ĻƒĻ„Īæ Subsonic API;" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±" + } + }, + "AlbumModal": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±" + } + }, + "AlbumSelect": { + "label": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" + }, + "meta": { + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + } + }, + "LicenseSelect": { + "link": { + "license": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī¬Ī“ĪµĪ¹Ī±" + } + }, + "UploadForm": { + "button": { + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "header": { + "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼ĪæĻƒĪÆĪµĻ…ĻƒĪ·" + }, + "help": { + "license": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ī¼Ī¹Ī± Ī¬Ī“ĪµĪ¹Ī± ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ€ĪæĻ… Ī±Ī½ĪµĪ²Ī¬ĻƒĪ±Ļ„Īµ Ī³Ī¹Ī± Ī½Ī± ĪµĪ¾Ī±ĻƒĻ†Ī±Ī»ĪÆĻƒĪµĻ„Īµ Ī¼ĪµĻĪ¹ĪŗĪ­Ļ‚ ĪµĪ»ĪµĻ…ĪøĪµĻĪÆĪµĻ‚ ĻƒĻ„Īæ ĪŗĪæĪ¹Ī½ĻŒ ĻƒĪ±Ļ‚." + }, + "label": { + "channel": "ĪšĪ±Ī½Ī¬Ī»Ī¹", + "openBrowser": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ·ā€¦" + }, + "message": { + "dragAndDrop": "ĪšĪ¬Ī½Ļ„Īµ drag and drop Ļ„Ī± Ī±ĻĻ‡ĪµĪÆĪ± ĻƒĪ±Ļ‚ ĪµĪ“ĻŽ Ī® Ī±Ī½ĪæĪÆĻ‡Ļ„Īµ Ļ„ĪæĪ½ Ļ€ĪµĻĪ¹Ī·Ī³Ī·Ļ„Ī® Ī³Ī¹Ī± Ī½Ī± Ī±Ī½ĪµĪ²Ī¬ĻƒĪµĻ„Īµ Ļ„Ī± Ī±ĻĻ‡ĪµĪÆĪ± ĻƒĪ±Ļ‚" + } + }, + "UploadMetadataForm": { + "label": { + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + } + }, + "UploadModal": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" + }, + "header": { + "uploadFiles": "Ī‘ĻĻ‡ĪµĪÆĪ± Ļ€ĻĪæĻ‚ Ī±Ī½Ī­Ī²Ī±ĻƒĪ¼Ī±" + }, + "meta": { + "files": "{ n } Ī±ĻĻ‡ĪµĪÆĪæ | { n } Ī±ĻĻ‡ĪµĪÆĪ±" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{ n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Īæ | { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪ± ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Ī±", + "go": "ĪžĪµĪŗĪ¹Ī½Ī®ĻƒĻ„Īµ", + "selected": "{ n } Ī±Ļ€Īæ Ļ„Ī± { total } ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Īæ | { n } Ī±Ļ€Īæ Ļ„Ī± { total } ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Ī±" + }, + "label": { + "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" + }, + "message": { + "needsRefresh": "Ī¤Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī­Ļ‡ĪµĪ¹ Ī±Ī½Ī±Ī½ĪµĻ‰ĪøĪµĪÆ, ĪŗĪ¬Ī½Ļ„Īµ Ī±Ī½Ī±Ī½Ī­Ļ‰ĻƒĪ· Ī³Ī¹Ī± Ī½Ī± Ī“ĪµĪÆĻ„Īµ Ļ„Īæ ĪµĪ½Ī·Ī¼ĪµĻĻ‰Ī¼Ī­Ī½Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ", + "success": "Ī— ĪµĪ½Ī­ĻĪ³ĪµĪ¹Ī± { action } Ļ€ĻĪ±Ī³Ī¼Ī±Ļ„ĪæĻ€ĪæĪ¹Ī®ĪøĪ·ĪŗĪµ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚ ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ | Ī— ĪµĪ½Ī­ĻĪ³ĪµĪ¹Ī± { action } Ļ€ĻĪ±Ī³Ī¼Ī±Ļ„ĪæĻ€ĪæĪ¹Ī®ĪøĪ·ĪŗĪµ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚ ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪ±" + }, + "modal": { + "performAction": { + "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪµĪŗĪŗĪ¹Ī½Ī®ĻƒĪµĻ„Īµ Ļ„Ī·Ī½ Ī“ĻĪ¬ĻƒĪ· { action } ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪ±; | Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪµĪŗĪŗĪ¹Ī½Ī®ĻƒĪµĻ„Īµ Ļ„Ī·Ī½ Ī“ĻĪ¬ĻƒĪ· { action } ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ;" + } + } + }, + "CopyInput": { + "button": { + "copy": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ±Ļ†Ī®" + } + }, + "DangerousButton": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "confirm": "Ī•Ļ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ·" + }, + "header": { + "confirm": "Ī•Ļ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ· Ī“ĻĪ¬ĻƒĪ·Ļ‚;" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } ĻŽĻĪµĻ‚ { minutes } Ī»ĪµĻ€Ļ„Ī¬", + "minutes": "{ minutes } Ī»ĪµĻ€Ļ„Ī¬" + } + }, + "InlineSearchBar": { + "button": { + "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ ĪµĪ½Ī·Ī¼Ī­ĻĻ‰ĻƒĪ· Ļ„Ī·Ļ‚ Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®Ļ‚" + } + }, + "UserMenu": { + "label": { + "language": "Ī‘Ī»Ī»Ī±Ī³Ī® Ī³Ī»ĻŽĻƒĻƒĪ±Ļ‚" + }, + "link": { + "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ", + "chat": "Ī”Ļ‰Ī¼Ī¬Ļ„Ī¹Īæ ĻƒĻ…Ī½ĪæĪ¼Ī¹Ī»Ī¹ĻŽĪ½", + "docs": "Ī¤ĪµĻ‡Ī½Ī¹ĪŗĪ¬ ĪˆĪ³Ī³ĻĪ±Ļ†Ī±" + } + }, + "UserModal": { + "button": { + "switchInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚" + }, + "header": { + "options": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" + }, + "label": { + "language": "Ī‘Ī»Ī»Ī±Ī³Ī® Ī³Ī»ĻŽĻƒĻƒĪ±Ļ‚" + }, + "link": { + "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ", + "chat": "Ī”Ļ‰Ī¼Ī¬Ļ„Ī¹Īæ ĻƒĻ…Ī½ĪæĪ¼Ī¹Ī»Ī¹ĻŽĪ½" + } + } + }, + "favorites": { + "List": { + "header": { + "favorites": "{ n } Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Īæ | { n } Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" + }, + "link": { + "library": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + } + }, + "TrackFavoriteIcon": { + "button": { + "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī± Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ", + "reload": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ ĪŗĪ±Ī¹ Ī±Ī½Ī±Ī½Ī­Ļ‰ĻƒĪ· ĻƒĪµĪ»ĪÆĪ“Ī±Ļ‚" + }, + "description": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ī½Ī±Ī½Ī­Ļ‰ĻƒĪ· Ļ„Ļ‰Ī½ ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĻ‰Ī½:", + "success": "Ī¤Ī± Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ī± Ī±Ļ€ĻŒ Ļ„ĪæĪ½ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Īæ server Ī±Ī½Ī±Ī½ĪµĻŽĪøĪ·ĪŗĪ±Ī½ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚." + }, + "header": { + "saveFailure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· ĻĻ…ĪøĪ¼ĪÆĻƒĪµĻ‰Ī½" + }, + "table": { + "error": { + "label": { + "type": "Ī¤ĻĻ€ĪæĻ‚ ĻƒĻ†Ī¬Ī»Ī¼Ī±Ļ„ĪæĻ‚" + }, + "value": { + "httpError": "ĪˆĪ½Ī± ĻƒĻ†Ī¬Ī»Ī¼Ī± HTTP ĻƒĻ…Ī½Ī­Ī²Ī· ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ ĪµĻ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ± Ī¼Īµ Ļ„ĪæĪ½ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Īæ ĪµĪ¾Ļ…Ļ€Ī·ĻĪµĻ„Ī·Ļ„Ī®", + "invalidAttributesError": "Ī¤Ī± Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ī± Ļ€ĪæĻ… Ļ€Ī¬ĻĪøĪ·ĪŗĪ±Ī½ Ī±Ļ€ĻŒ Ļ„ĪæĪ½ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Īæ server ĪµĪÆĻ‡Ī±Ī½ Ī¼Ī· Ī­Ī³ĪŗĻ…ĻĪ± Ī® ĪµĪ»Ī»Ī¹Ļ€Ī®Ļ‚ Ļ‡Ī±ĻĪ±ĪŗĻ„Ī·ĻĪ¹ĻƒĻ„Ī¹ĪŗĪ¬" + } + } + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ±Ļ†Ī®" + } } }, "library": { "AlbumBase": { + "link": { + "addDescription": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®Ļ‚ā€¦" + }, "meta": { "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - }, - "link": { - "addDescription": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®Ļ‚ā€¦" } }, - "ArtistBase": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ ĻƒĪµ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± ĻƒĪµ", - "albums": "{ n } Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ | { n } Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼" - }, - "title": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±", - "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ·" - }, - "modal": { - "embed": { - "header": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· Ļ„ĪæĻ… ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī· ĻƒĻ„Ī·Ī½ Ī¹ĻƒĻ„ĪæĻƒĪµĪ»ĪÆĪ“Ī± ĻƒĪ±Ļ‚" - } - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ Ļ€ĪæĻ… Ļ„Ī±Ī¹ĻĪ¹Ī¬Ī¶ĪµĪ¹ ĻƒĻ„Ī± ĻƒĻ…Ī½Ī“Ļ…Ī±ĻƒĪ¼Ī­Ī½Ī± Ļ†ĪÆĪ»Ļ„ĻĪ± | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± Ļ€ĪæĻ… Ļ„Ī±Ī¹ĻĪ¹Ī¬Ī¶ĪæĻ…Ī½ ĻƒĻ„Ī± ĻƒĻ…Ī½Ī“Ļ…Ī±ĻƒĪ¼Ī­Ī½Ī± Ļ†ĪÆĪ»Ļ„ĻĪ±", - "builder": "ĪšĪ±Ļ„Ī±ĻƒĪŗĪµĻ…Ī±ĻƒĻ„Ī®Ļ‚" - }, - "table": { - "filter": { - "header": { - "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚", - "candidates": "Ī„Ļ€ĪæĻˆĪ®Ļ†Ī¹ĪæĪ¹", - "config": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚", - "name": "ĪŒĪ½ĪæĪ¼Ī± Ļ†ĪÆĪ»Ļ„ĻĪæĻ…" - } - } - }, - "button": { - "filter": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ†ĪÆĪ»Ļ„ĻĪæĻ…" - }, - "label": { - "filter": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ļ†ĪÆĪ»Ļ„ĻĪ± Ī³Ī¹Ī± Ī½Ī± Ļ€ĻĪæĻƒĪ±ĻĪ¼ĻŒĻƒĪµĻ„Īµ Ļ„Īæ ĻĪ¬Ī“Ī¹Īæ ĻƒĪ±Ļ‚", - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", - "public": "Ī•Ī¼Ļ†Ī¬Ī½Ī¹ĻƒĪ· Ī“Ī·Ī¼ĪæĻƒĪÆĻ‰Ļ‚" - } - }, - "Filter": { - "cancelButton": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" - } - }, - "FileUpload": { - "tooltip": { - "network": "Ī£Ļ†Ī¬Ī»Ī¼Ī± Ī“Ī¹ĪŗĻ„ĻĪæĻ… ĪŗĪ±Ļ„Ī¬ Ļ„Īæ Ī±Ī½Ī­Ī²Ī±ĻƒĪ¼Ī± Ļ„ĪæĻ… Ī±ĻĻ‡ĪµĪÆĪæĻ…", - "size": "Ī”ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ…Ī½Ī±Ļ„Ī® Ī· Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ· Ļ„ĪæĻ… Ī±ĻĻ‡ĪµĪÆĪæĻ…, ĻƒĪ¹Ī³ĪæĻ…ĻĪµĻ…Ļ„ĪµĪÆĻ„Īµ ĻŒĻ„Ī¹ Ī“ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ļ€ĪæĪ»Ļ Ī¼ĪµĪ³Ī¬Ī»Īæ" - }, - "table": { - "upload": { - "header": { - "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚", - "filename": "ĪŒĪ½ĪæĪ¼Ī± Ī±ĻĻ‡ĪµĪÆĪæĻ…" - } - } - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" - }, - "label": { - "uploadWidget": "ĪšĪ¬Ī½Ļ„Īµ ĪŗĪ»Ī¹Īŗ Ī³Ī¹Ī± Ī½Ī± ĪµĻ€Ī¹Ī»Ī­Ī¾ĪµĻ„Īµ Ī±ĻĻ‡ĪµĪÆĪ± Ī³Ī¹Ī± Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ· Ī® ĪŗĪ¬Ī½Ļ„Īµ drag and drop Ī±ĻĻ‡ĪµĪÆĪ± Ī® Ļ†Ī±ĪŗĪ­Ī»ĪæĻ…Ļ‚" - } - }, - "EditForm": { - "placeholder": { - "summary": "ĪœĪ¹Ī± Ļ€ĪµĻĪÆĪ»Ī·ĻˆĪ· Ļ„Ļ‰Ī½ Ī±Ī»Ī»Ī±Ī³ĻŽĪ½ ĻƒĪ±Ļ‚." - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±" - }, + "AlbumDetail": { "header": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ļ…Ļ€ĪæĪ²ĪæĪ»Ī® Ī±Ī»Ī»Ī±Ī³ĻŽĪ½" - } - }, - "Albums": { - "link": { - "addMusic": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®" - }, - "title": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "header": { - "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" - }, - "placeholder": { - "search": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ Ļ„ĪÆĻ„Ī»Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ā€¦" - } - }, - "Artists": { - "button": { - "upload": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®" - }, - "label": { - "search": "ĪŒĪ½ĪæĪ¼Ī± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - }, - "title": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "header": { - "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„ĪæĻ…Ļ‚ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", - "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Ī›Ī®ĻˆĪµĪ¹Ļ‚", - "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±" - } - } - }, - "TagDetail": { - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" - }, - "header": { - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" - } - }, - "ArtistDetail": { - "header": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ Ī±Ļ€ĻŒ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", - "track": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ Ī±Ļ€ĻŒ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ ĪµĻ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± Ļ„Ī·Ļ‚ Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ·Ļ‚. Ī˜Ī± Ī²ĻĪµĪÆĻ„Īµ ĪµĻ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ Ļ€Ī±ĻĪ±ĪŗĪ¬Ļ„Ļ‰.", - "unknownError": { - "message": "Ī£Ļ…Ī½Ī­Ī²Ī· ĪŗĪ¬Ļ€ĪæĪ¹Īæ Ī¬Ī³Ī½Ļ‰ĻƒĻ„Īæ ĻƒĻ†Ī¬Ī»Ī¼Ī±" - } - }, - "button": { - "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" - }, - "table": { - "error": { - "debug": "Ī Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ ĪµĪ½Ļ„ĪæĻ€Ī¹ĻƒĪ¼ĪæĻ ĻƒĻ†Ī±Ī»Ī¼Ī¬Ļ„Ļ‰Ī½", - "errorType": "Ī¤ĻĻ€ĪæĻ‚ ĻƒĻ†Ī¬Ī»Ī¼Ī±Ļ„ĪæĻ‚" - } - } - }, - "EditCard": { - "button": { - "approve": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - }, - "status": { - "approved": "EĪ³ĪŗĻĪÆĪøĪ·ĪŗĪµ", - "applied": "Ī•Ī³ĪŗĻĪÆĪøĪ·ĪŗĪµ ĪŗĪ±Ī¹ ĪµĻ†Ī±ĻĪ¼ĻŒĻƒĻ„Ī·ĪŗĪµ" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ļ…Ļ€ĻŒĪ“ĪµĪ¹Ī¾Ī·Ļ‚;" - } - }, - "table": { - "update": { - "header": { - "field": "Ī ĪµĪ“ĪÆĪæ" - } - } - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "header": { - "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī± podcast" - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "channel": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪšĪ±Ī½Ī±Ī»Ī¹ĪæĻ" - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "header": { - "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī± ĻĪ¬Ī“Ī¹Īæ" - }, - "button": { - "add": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĻĪ¬Ī“Ī¹Īæ", - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī“Ī¹ĪŗĪæĻ ĻƒĪ±Ļ‚ ĻĪ¬Ī“Ī¹Īæ" - }, - "placeholder": { - "search": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻŒĪ½ĪæĪ¼Ī± ĻĪ¬Ī“Ī¹Īæā€¦" + "episodes": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±" } }, "AlbumDropdown": { @@ -596,6 +800,188 @@ } } }, + "AlbumEdit": { + "header": { + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼" + } + }, + "Albums": { + "header": { + "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" + }, + "link": { + "addMusic": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "placeholder": { + "search": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ Ļ„ĪÆĻ„Ī»Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ā€¦" + }, + "title": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" + }, + "ArtistBase": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±", + "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ·" + }, + "meta": { + "albums": "{ n } Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ | { n } Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ ĻƒĪµ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± ĻƒĪµ" + }, + "modal": { + "embed": { + "header": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· Ļ„ĪæĻ… ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī· ĻƒĻ„Ī·Ī½ Ī¹ĻƒĻ„ĪæĻƒĪµĪ»ĪÆĪ“Ī± ĻƒĪ±Ļ‚" + } + }, + "title": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" + }, + "ArtistDetail": { + "header": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ Ī±Ļ€ĻŒ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", + "track": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ Ī±Ļ€ĻŒ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" + } + }, + "ArtistEdit": { + "header": { + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" + } + }, + "Artists": { + "button": { + "upload": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®" + }, + "header": { + "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„ĪæĻ…Ļ‚ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" + }, + "label": { + "search": "ĪŒĪ½ĪæĪ¼Ī± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "title": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" + }, + "EditCard": { + "button": { + "approve": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ļ…Ļ€ĻŒĪ“ĪµĪ¹Ī¾Ī·Ļ‚;" + } + }, + "status": { + "applied": "Ī•Ī³ĪŗĻĪÆĪøĪ·ĪŗĪµ ĪŗĪ±Ī¹ ĪµĻ†Ī±ĻĪ¼ĻŒĻƒĻ„Ī·ĪŗĪµ", + "approved": "EĪ³ĪŗĻĪÆĪøĪ·ĪŗĪµ" + }, + "table": { + "update": { + "header": { + "field": "Ī ĪµĪ“ĪÆĪæ" + } + } + } + }, + "EditForm": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±" + }, + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ļ…Ļ€ĪæĪ²ĪæĪ»Ī® Ī±Ī»Ī»Ī±Ī³ĻŽĪ½" + }, + "placeholder": { + "summary": "ĪœĪ¹Ī± Ļ€ĪµĻĪÆĪ»Ī·ĻˆĪ· Ļ„Ļ‰Ī½ Ī±Ī»Ī»Ī±Ī³ĻŽĪ½ ĻƒĪ±Ļ‚." + } + }, + "FileUpload": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" + }, + "label": { + "uploadWidget": "ĪšĪ¬Ī½Ļ„Īµ ĪŗĪ»Ī¹Īŗ Ī³Ī¹Ī± Ī½Ī± ĪµĻ€Ī¹Ī»Ī­Ī¾ĪµĻ„Īµ Ī±ĻĻ‡ĪµĪÆĪ± Ī³Ī¹Ī± Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ· Ī® ĪŗĪ¬Ī½Ļ„Īµ drag and drop Ī±ĻĻ‡ĪµĪÆĪ± Ī® Ļ†Ī±ĪŗĪ­Ī»ĪæĻ…Ļ‚" + }, + "table": { + "upload": { + "header": { + "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚", + "filename": "ĪŒĪ½ĪæĪ¼Ī± Ī±ĻĻ‡ĪµĪÆĪæĻ…" + } + } + }, + "tooltip": { + "network": "Ī£Ļ†Ī¬Ī»Ī¼Ī± Ī“Ī¹ĪŗĻ„ĻĪæĻ… ĪŗĪ±Ļ„Ī¬ Ļ„Īæ Ī±Ī½Ī­Ī²Ī±ĻƒĪ¼Ī± Ļ„ĪæĻ… Ī±ĻĻ‡ĪµĪÆĪæĻ…", + "size": "Ī”ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ…Ī½Ī±Ļ„Ī® Ī· Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ· Ļ„ĪæĻ… Ī±ĻĻ‡ĪµĪÆĪæĻ…, ĻƒĪ¹Ī³ĪæĻ…ĻĪµĻ…Ļ„ĪµĪÆĻ„Īµ ĻŒĻ„Ī¹ Ī“ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ļ€ĪæĪ»Ļ Ī¼ĪµĪ³Ī¬Ī»Īæ" + } + }, + "ImportStatusModal": { + "button": { + "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" + }, + "error": { + "importFailure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ ĪµĻ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± Ļ„Ī·Ļ‚ Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ·Ļ‚. Ī˜Ī± Ī²ĻĪµĪÆĻ„Īµ ĪµĻ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ Ļ€Ī±ĻĪ±ĪŗĪ¬Ļ„Ļ‰.", + "unknownError": { + "message": "Ī£Ļ…Ī½Ī­Ī²Ī· ĪŗĪ¬Ļ€ĪæĪ¹Īæ Ī¬Ī³Ī½Ļ‰ĻƒĻ„Īæ ĻƒĻ†Ī¬Ī»Ī¼Ī±" + } + }, + "table": { + "error": { + "debug": "Ī Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ ĪµĪ½Ļ„ĪæĻ€Ī¹ĻƒĪ¼ĪæĻ ĻƒĻ†Ī±Ī»Ī¼Ī¬Ļ„Ļ‰Ī½", + "errorType": "Ī¤ĻĻ€ĪæĻ‚ ĻƒĻ†Ī¬Ī»Ī¼Ī±Ļ„ĪæĻ‚" + } + } + }, + "Podcasts": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "channel": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪšĪ±Ī½Ī±Ī»Ī¹ĪæĻ" + }, + "header": { + "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī± podcast" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + } + }, + "Radios": { + "button": { + "add": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĻĪ¬Ī“Ī¹Īæ", + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī“Ī¹ĪŗĪæĻ ĻƒĪ±Ļ‚ ĻĪ¬Ī“Ī¹Īæ" + }, + "header": { + "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī± ĻĪ¬Ī“Ī¹Īæ" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "placeholder": { + "search": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻŒĪ½ĪæĪ¼Ī± ĻĪ¬Ī“Ī¹Īæā€¦" + } + }, + "TagDetail": { + "header": { + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" + }, + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" + } + }, "TrackBase": { "button": { "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", @@ -613,14 +999,21 @@ } } }, - "AlbumEdit": { - "header": { - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼" - } - }, - "ArtistEdit": { - "header": { - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" + "TrackDetail": { + "table": { + "release": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±" + }, + "track": { + "bitrate": { + "label": "Bitrate" + }, + "codec": "Codec", + "downloads": "Ī›Ī®ĻˆĪµĪ¹Ļ‚", + "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±" + } } }, "TrackEdit": { @@ -628,16 +1021,43 @@ "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" } }, - "AlbumDetail": { - "header": { - "episodes": "Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±" + "radios": { + "Builder": { + "button": { + "filter": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ†ĪÆĪ»Ļ„ĻĪæĻ…" + }, + "header": { + "builder": "ĪšĪ±Ļ„Ī±ĻƒĪŗĪµĻ…Ī±ĻƒĻ„Ī®Ļ‚", + "matches": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ Ļ€ĪæĻ… Ļ„Ī±Ī¹ĻĪ¹Ī¬Ī¶ĪµĪ¹ ĻƒĻ„Ī± ĻƒĻ…Ī½Ī“Ļ…Ī±ĻƒĪ¼Ī­Ī½Ī± Ļ†ĪÆĪ»Ļ„ĻĪ± | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± Ļ€ĪæĻ… Ļ„Ī±Ī¹ĻĪ¹Ī¬Ī¶ĪæĻ…Ī½ ĻƒĻ„Ī± ĻƒĻ…Ī½Ī“Ļ…Ī±ĻƒĪ¼Ī­Ī½Ī± Ļ†ĪÆĪ»Ļ„ĻĪ±" + }, + "label": { + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", + "filter": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ļ†ĪÆĪ»Ļ„ĻĪ± Ī³Ī¹Ī± Ī½Ī± Ļ€ĻĪæĻƒĪ±ĻĪ¼ĻŒĻƒĪµĻ„Īµ Ļ„Īæ ĻĪ¬Ī“Ī¹Īæ ĻƒĪ±Ļ‚", + "public": "Ī•Ī¼Ļ†Ī¬Ī½Ī¹ĻƒĪ· Ī“Ī·Ī¼ĪæĻƒĪÆĻ‰Ļ‚" + }, + "table": { + "filter": { + "header": { + "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚", + "candidates": "Ī„Ļ€ĪæĻˆĪ®Ļ†Ī¹ĪæĪ¹", + "config": "Ī”Ļ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚", + "name": "ĪŒĪ½ĪæĪ¼Ī± Ļ†ĪÆĪ»Ļ„ĻĪæĻ…" + } + } + } + }, + "Filter": { + "cancelButton": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" } } }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Īæ | { n } Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" + "manage": { + "ChannelsTable": { + "label": { + "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" + }, + "option": { + "all": "ĪŒĪ»Ī±" }, "ordering": { "direction": { @@ -645,357 +1065,51 @@ "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" } }, - "link": { - "library": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·" - } - }, - "TrackFavoriteIcon": { - "button": { - "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī± Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } Ī±ĻĻ‡ĪµĪÆĪæ | { n } Ī±ĻĻ‡ĪµĪÆĪ±" - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" - }, - "header": { - "uploadFiles": "Ī‘ĻĻ‡ĪµĪÆĪ± Ļ€ĻĪæĻ‚ Ī±Ī½Ī­Ī²Ī±ĻƒĪ¼Ī±" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - }, - "label": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" - } - }, - "LicenseSelect": { - "link": { - "license": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī¬Ī“ĪµĪ¹Ī±" - } - }, - "UploadForm": { - "help": { - "license": "Ī ĻĪæĻƒĪøĪ­ĻƒĻ„Īµ Ī¼Ī¹Ī± Ī¬Ī“ĪµĪ¹Ī± ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ€ĪæĻ… Ī±Ī½ĪµĪ²Ī¬ĻƒĪ±Ļ„Īµ Ī³Ī¹Ī± Ī½Ī± ĪµĪ¾Ī±ĻƒĻ†Ī±Ī»ĪÆĻƒĪµĻ„Īµ Ī¼ĪµĻĪ¹ĪŗĪ­Ļ‚ ĪµĪ»ĪµĻ…ĪøĪµĻĪÆĪµĻ‚ ĻƒĻ„Īæ ĪŗĪæĪ¹Ī½ĻŒ ĻƒĪ±Ļ‚." - }, - "label": { - "openBrowser": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ·ā€¦", - "channel": "ĪšĪ±Ī½Ī¬Ī»Ī¹" - }, - "message": { - "dragAndDrop": "ĪšĪ¬Ī½Ļ„Īµ drag and drop Ļ„Ī± Ī±ĻĻ‡ĪµĪÆĪ± ĻƒĪ±Ļ‚ ĪµĪ“ĻŽ Ī® Ī±Ī½ĪæĪÆĻ‡Ļ„Īµ Ļ„ĪæĪ½ Ļ€ĪµĻĪ¹Ī·Ī³Ī·Ļ„Ī® Ī³Ī¹Ī± Ī½Ī± Ī±Ī½ĪµĪ²Ī¬ĻƒĪµĻ„Īµ Ļ„Ī± Ī±ĻĻ‡ĪµĪÆĪ± ĻƒĪ±Ļ‚" - }, - "button": { - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "header": { - "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼ĪæĻƒĪÆĪµĻ…ĻƒĪ·" - } - }, - "AlbumModal": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" - } - }, - "AlbumForm": { - "header": { - "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±" - } - } - }, - "AboutPod": { - "stat": { - "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚", - "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", - "albumsCount": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ | Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artistsCount": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ | ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", - "listeningsCount": "{ n } Ī±ĪŗĻĻŒĪ±ĻƒĪ· | { n } Ī±ĪŗĻĪæĪ¬ĻƒĪµĪ¹Ļ‚", - "tracksCount": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ | Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" - }, - "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ", - "link": { - "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod" - }, - "header": { - "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", - "contact": "Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±" - }, - "feature": { - "allowList": "Ī›ĪÆĻƒĻ„Ī± Ī•Ļ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½", - "anonymousAccess": "Ī‘Ī½ĻŽĪ½Ļ…Ī¼Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·", - "status": { - "closed": "ĪšĪ»ĪµĪ¹ĻƒĻ„ĻŒ", - "disabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", - "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ" - }, - "version": "ĪˆĪŗĪ“ĪæĻƒĪ· Funkwhale" - } - }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } Ī±Ļ€Īæ Ļ„Ī± { total } ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Īæ | { n } Ī±Ļ€Īæ Ļ„Ī± { total } ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Ī±", - "allSelected": "{ n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Īæ | { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪ± ĪµĻ€Ī¹Ī»ĪµĪ³Ī¼Ī­Ī½Ī±", - "go": "ĪžĪµĪŗĪ¹Ī½Ī®ĻƒĻ„Īµ" - }, - "message": { - "success": "Ī— ĪµĪ½Ī­ĻĪ³ĪµĪ¹Ī± { action } Ļ€ĻĪ±Ī³Ī¼Ī±Ļ„ĪæĻ€ĪæĪ¹Ī®ĪøĪ·ĪŗĪµ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚ ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ | Ī— ĪµĪ½Ī­ĻĪ³ĪµĪ¹Ī± { action } Ļ€ĻĪ±Ī³Ī¼Ī±Ļ„ĪæĻ€ĪæĪ¹Ī®ĪøĪ·ĪŗĪµ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚ ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪ±", - "needsRefresh": "Ī¤Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī­Ļ‡ĪµĪ¹ Ī±Ī½Ī±Ī½ĪµĻ‰ĪøĪµĪÆ, ĪŗĪ¬Ī½Ļ„Īµ Ī±Ī½Ī±Ī½Ī­Ļ‰ĻƒĪ· Ī³Ī¹Ī± Ī½Ī± Ī“ĪµĪÆĻ„Īµ Ļ„Īæ ĪµĪ½Ī·Ī¼ĪµĻĻ‰Ī¼Ī­Ī½Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ" - }, - "label": { - "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" - }, - "modal": { - "performAction": { - "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪµĪŗĪŗĪ¹Ī½Ī®ĻƒĪµĻ„Īµ Ļ„Ī·Ī½ Ī“ĻĪ¬ĻƒĪ· { action } ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪ±; | Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪµĪŗĪŗĪ¹Ī½Ī®ĻƒĪµĻ„Īµ Ļ„Ī·Ī½ Ī“ĻĪ¬ĻƒĪ· { action } ĻƒĪµ { n } ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ;" - } - } - }, - "Duration": { - "meta": { - "hours": "{ hours } ĻŽĻĪµĻ‚ { minutes } Ī»ĪµĻ€Ļ„Ī¬", - "minutes": "{ minutes } Ī»ĪµĻ€Ļ„Ī¬" - } - }, - "UserMenu": { - "link": { - "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ", - "chat": "Ī”Ļ‰Ī¼Ī¬Ļ„Ī¹Īæ ĻƒĻ…Ī½ĪæĪ¼Ī¹Ī»Ī¹ĻŽĪ½", - "docs": "Ī¤ĪµĻ‡Ī½Ī¹ĪŗĪ¬ ĪˆĪ³Ī³ĻĪ±Ļ†Ī±" - }, - "label": { - "language": "Ī‘Ī»Ī»Ī±Ī³Ī® Ī³Ī»ĻŽĻƒĻƒĪ±Ļ‚" - } - }, - "UserModal": { - "link": { - "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ", - "chat": "Ī”Ļ‰Ī¼Ī¬Ļ„Ī¹Īæ ĻƒĻ…Ī½ĪæĪ¼Ī¹Ī»Ī¹ĻŽĪ½" - }, - "label": { - "language": "Ī‘Ī»Ī»Ī±Ī³Ī® Ī³Ī»ĻŽĻƒĻƒĪ±Ļ‚" - }, - "header": { - "options": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" - }, - "button": { - "switchInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚" - } - }, - "DangerousButton": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "confirm": "Ī•Ļ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ·" - }, - "header": { - "confirm": "Ī•Ļ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ· Ī“ĻĪ¬ĻƒĪ·Ļ‚;" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "header": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ ĪµĪ½Ī·Ī¼Ī­ĻĻ‰ĻƒĪ· Ļ„Ī·Ļ‚ Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®Ļ‚" - } - }, - "InlineSearchBar": { - "button": { - "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±" - } - }, - "CopyInput": { - "button": { - "copy": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ±Ļ†Ī®" - } - } - }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - }, - "PlaylistModal": { - "warning": { - "duplicate": "Ī¤Īæ { 0 } ĪµĪÆĪ½Ī±Ī¹ Ī®Ī“Ī· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± { 1 }." - }, - "button": { - "addDuplicate": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪæĻĻ„Ļ‰Ļ‚ Ī® Ī¬Ī»Ī»Ļ‰Ļ‚", - "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĪµ Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", - "addTrack": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ", - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "header": { - "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", - "available": "Ī”Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼ĪµĻ‚ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, "table": { - "edit": { + "channel": { "header": { - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" } } - }, - "placeholder": { - "filterPlaylist": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻŒĪ½ĪæĪ¼Ī± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, - "label": { - "filter": "Ī¦ĪÆĪ»Ļ„ĻĪæ" } }, - "Editor": { - "button": { - "addDuplicate": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪæĻĻ„Ļ‰Ļ‚ Ī® Ī¬Ī»Ī»Ļ‰Ļ‚", - "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", - "copy": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ļ„ĻĪ­Ļ‡ĪæĻ…ĻƒĪ±Ļ‚ ĪæĻ…ĻĪ¬Ļ‚ ĻƒĪµ Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, - "error": { - "sync": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· Ļ„Ļ‰Ī½ Ī±Ī»Ī»Ī±Ī³ĻŽĪ½ ĻƒĪ±Ļ‚" - }, - "message": { - "sync": "ĪŸĪ¹ Ī±Ī»Ī»Ī±Ī³Ī­Ļ‚ ĻƒĻ…Ī³Ļ‡ĻĪæĪ½ĪÆĻƒĻ„Ī·ĪŗĪ±Ī½ Ī¼Īµ Ļ„ĪæĪ½ Ī“Ī¹Ī±ĪŗĪæĪ¼Ī¹ĻƒĻ„Ī®" - }, - "modal": { - "clearPlaylist": { - "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪµĪŗĪŗĪ±ĪøĪ±ĻĪÆĻƒĪµĻ„Īµ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ \"{ playlist }\";" - } - }, - "help": { - "reorder": "ĪšĪ¬Ī½Ļ„Īµ drag and drop ĻƒĪµĪ¹ĻĪ­Ļ‚ Ī³Ī¹Ī± Ī½Ī± Ī±Ī½Ī±Ī“Ī¹Ī¬Ļ„Ī±Ī¾Ī· Ļ„Ļ‰Ī½ ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĻŽĪ½ ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦" - } - }, - "Form": { - "header": { - "createPlaylist": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī½Ī­Ī±Ļ‚ Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, - "button": { - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - } - }, - "Widget": { - "button": { - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī›ĪÆĻƒĻ„Ī±Ļ‚ Ī‘Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } Ī±Ļ€ĪæĪ“Ī­Ļ‡ĪøĪ·ĪŗĪµ Ļ„Ī·Ī½ Ī±ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪ· Ļ„Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚ \"{ library }\"", - "libraryFollow": "{ username } Ī±ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ Ļ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ· ĻƒĪ±Ļ‚ \"{ library }\"", - "libraryPendingFollow": "{ username } ĪøĪ­Ī»ĪµĪ¹ Ī½Ī± Ī±ĪŗĪæĪ»ĪæĻ…ĪøĪ®ĻƒĪµĪ¹ Ļ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ· ĻƒĪ±Ļ‚ \"{ library }\"" - }, - "button": { - "approve": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®" - } - } - }, - "Sidebar": { - "link": { - "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ·", - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±", - "createAccount": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", - "favorites": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", - "home": "Ī‘ĻĻ‡Ī¹ĪŗĪ®" - }, - "label": { - "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", - "administration": "Ī”Ī¹Ī±Ļ‡ĪµĪÆĻĪ¹ĻƒĪ·", - "language": "Ī‘Ī»Ī»Ī±Ī³Ī® Ī³Ī»ĻŽĻƒĻƒĪ±Ļ‚" - }, - "header": { - "administration": "Ī”Ī¹Ī±Ļ‡ĪµĪÆĻĪ¹ĻƒĪ·", - "explore": "Ī‘Ī½Ī±ĪŗĪ¬Ī»Ļ…ĻˆĪµ" - } - }, - "manage": { "library": { - "UploadsTable": { - "table": { - "upload": { - "header": { - "accessedDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚", - "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - } + "AlbumsTable": { + "action": { + "delete": { + "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" } }, - "option": { - "all": "ĪŒĪ»Ī±" - }, "ordering": { "direction": { "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" } }, - "action": { - "delete": { - "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - } - } - }, - "LibrariesTable": { "table": { - "library": { + "album": { "header": { - "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", - "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" - } - } - }, - "option": { - "all": "ĪŒĪ»Ī±" - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "action": { - "delete": { - "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - } - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" } } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + } + }, + "label": { + "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" + }, + "option": { + "all": "ĪŒĪ»Ī±" }, "ordering": { "direction": { @@ -1003,13 +1117,6 @@ "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" } }, - "action": { - "delete": { - "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - } - } - }, - "ArtistsTable": { "table": { "artist": { "header": { @@ -1018,45 +1125,6 @@ "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" } } - }, - "option": { - "all": "ĪŒĪ»Ī±" - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "label": { - "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" - }, - "action": { - "delete": { - "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - } - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "action": { - "delete": { - "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - } } }, "EditsCardList": { @@ -1071,15 +1139,37 @@ } } }, - "AlbumsTable": { + "LibrariesTable": { + "action": { + "delete": { + "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + } + }, + "option": { + "all": "ĪŒĪ»Ī±" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, "table": { - "album": { + "library": { "header": { - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", + "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" } } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + } }, "ordering": { "direction": { @@ -1087,96 +1177,82 @@ "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" } }, + "table": { + "tag": { + "header": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + } + } + } + }, + "TracksTable": { "action": { "delete": { "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" } + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "table": { + "track": { + "header": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + } + }, + "option": { + "all": "ĪŒĪ»Ī±" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "table": { + "upload": { + "header": { + "accessedDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚", + "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + } + } } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - }, - "status": { - "assignedTo": "Ī‘Ī½Ī±Ļ„ĪµĪøĪµĪÆ ĻƒĪµ" - }, - "report": { - "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + "AccountsTable": { + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" } }, - "header": { - "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" - }, - "button": { - "confirmDelete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæĻ… Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæĻ… Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚;" - } - } - }, - "UserRequestCard": { - "header": { - "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" - }, - "button": { - "approve": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®" - }, "table": { - "status": { - "approved": "EĪ³ĪŗĻĪÆĪøĪ·ĪŗĪµ", - "assignedTo": "Ī‘Ī½Ī±Ļ„ĪµĪøĪµĪÆ ĻƒĪµ" - }, - "request": { - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + "account": { + "header": { + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + } } } }, - "InstancePolicyForm": { - "header": { - "addRule": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", - "editRule": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪŗĪ±Ī½ĻŒĪ½Ī±" - }, - "label": { - "blockAll": "ĪœĻ€Ī»ĪæĪŗĪ¬ĻĪ¹ĻƒĪ¼Ī± ĻŒĪ»Ļ‰Ī½", - "policyDisabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", - "policyEnabled": "Ī•Ī½ĪµĻĪ³ĻŒ" - }, - "tooltip": { - "blockAll": "ĪœĻ€Ī»ĪæĪŗĪ¬ĻĪ¹ĻƒĪ¼Ī± ĻŒĪ»Ļ‰Ī½ Ī±Ļ€' Ļ„ĪæĪ½ ĻƒĻ…Ī³ĪŗĪµĪŗĻĪ¹Ī¼Ī­Ī½Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ Ī® Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·. Ī‘Ļ…Ļ„ĻŒ ĪøĪ± Ī±Ļ€ĪæĻ„ĻĪ­ĻˆĪµĪ¹ ĪæĻ€ĪæĪ¹Ī±Ī“Ī®Ļ€ĪæĻ„Īµ Ī±Ī»Ī»Ī·Ī»ĪµĻ€ĪÆĪ“ĻĪ±ĻƒĪ· Ī¼Īµ Ļ„Ī·Ī½ ĪæĪ½Ļ„ĻŒĻ„Ī·Ļ„Ī±, ĪŗĪ±Ī¹ ĪøĪ± ĪŗĪ±ĪøĪ±ĻĪÆĻƒĪµĪ¹ ĻŒĪ»Ī± Ļ„Ī± ĻƒĻ‡ĪµĻ„Ī¹ĪŗĻŒ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ (ĪœĪµĻ„Ī±Ļ†ĪæĻĻ„ĻŽĻƒĪµĪ¹Ļ‚, Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚, Ī±ĪŗĪæĪ»ĪæĻĪøĪæĻ…Ļ‚, ĪŗĻ„Ī».)", - "rejectMedia": "Ī‘Ļ€ĪæĻ„ĻĪæĻ€Ī® ĪŗĪ±Ļ„ĪµĪ²Ī¬ĻƒĪ¼Ī±Ļ„ĪæĻ‚ Ī±ĻĻ‡ĪµĪÆĻ‰Ī½ Ļ€ĪæĪ»Ļ…Ī¼Ī­ĻƒĻ‰Ī½ (Ī±ĻĻ‡ĪµĪÆĪ± Ī®Ļ‡ĪæĻ…, ĪµĪ¾ĻŽĻ†Ļ…Ī»Ī»Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼, avatar Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ...) Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ Ī® Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·. Ī˜Ī± Ī“Ī¹Ī±Ī³ĻĪ±Ļ†ĪµĪÆ ĪŗĪ±Ī¹ Ļ„Īæ Ī®Ī“Ī· Ļ…Ļ€Ī¬ĻĻ‡ĪæĪ½ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ." - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ;" - } - } - }, - "NoteForm": { - "button": { - "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĪ·Ī¼ĪµĪÆĻ‰ĻƒĪ·Ļ‚" - }, - "placeholder": { - "summary": "Ī ĪµĻĪ¹Ī³ĻĪ¬ĻˆĻ„Īµ Ļ„Ī¹Ļ‚ ĪµĪ½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚ ĻƒĪ±Ļ‚, Ī® Ī¬Ī»Ī»ĪµĻ‚ ĻƒĻ‡ĪµĻ„Ī¹ĪŗĪ­Ļ‚ ĪµĪ½Ī·Ī¼ĪµĻĻŽĻƒĪµĪ¹Ļ‚ā€¦" - }, - "header": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ļ…Ļ€ĪæĪ²ĪæĪ»Ī® ĻƒĪ·Ī¼ĪµĪÆĻ‰ĻƒĪ·Ļ‚" - } - }, "DomainsTable": { "action": { "add": { @@ -1193,37 +1269,60 @@ } } }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "table": { - "account": { - "header": { - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - } - } - } - }, "InstancePolicyCard": { - "label": { - "blockAll": "ĪœĻ€Ī»ĪæĪŗĪ¬ĻĪ¹ĻƒĪ¼Ī± ĻŒĪ»Ļ‰Ī½" - }, "button": { "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" }, + "label": { + "blockAll": "ĪœĻ€Ī»ĪæĪŗĪ¬ĻĪ¹ĻƒĪ¼Ī± ĻŒĪ»Ļ‰Ī½" + }, "status": { "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ" } }, + "InstancePolicyForm": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "header": { + "addRule": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", + "editRule": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪŗĪ±Ī½ĻŒĪ½Ī±" + }, + "label": { + "blockAll": "ĪœĻ€Ī»ĪæĪŗĪ¬ĻĪ¹ĻƒĪ¼Ī± ĻŒĪ»Ļ‰Ī½", + "policyDisabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", + "policyEnabled": "Ī•Ī½ĪµĻĪ³ĻŒ" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪ±Ī½ĻŒĪ½Ī± ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ;" + } + }, + "tooltip": { + "blockAll": "ĪœĻ€Ī»ĪæĪŗĪ¬ĻĪ¹ĻƒĪ¼Ī± ĻŒĪ»Ļ‰Ī½ Ī±Ļ€' Ļ„ĪæĪ½ ĻƒĻ…Ī³ĪŗĪµĪŗĻĪ¹Ī¼Ī­Ī½Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ Ī® Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·. Ī‘Ļ…Ļ„ĻŒ ĪøĪ± Ī±Ļ€ĪæĻ„ĻĪ­ĻˆĪµĪ¹ ĪæĻ€ĪæĪ¹Ī±Ī“Ī®Ļ€ĪæĻ„Īµ Ī±Ī»Ī»Ī·Ī»ĪµĻ€ĪÆĪ“ĻĪ±ĻƒĪ· Ī¼Īµ Ļ„Ī·Ī½ ĪæĪ½Ļ„ĻŒĻ„Ī·Ļ„Ī±, ĪŗĪ±Ī¹ ĪøĪ± ĪŗĪ±ĪøĪ±ĻĪÆĻƒĪµĪ¹ ĻŒĪ»Ī± Ļ„Ī± ĻƒĻ‡ĪµĻ„Ī¹ĪŗĻŒ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ (ĪœĪµĻ„Ī±Ļ†ĪæĻĻ„ĻŽĻƒĪµĪ¹Ļ‚, Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚, Ī±ĪŗĪæĪ»ĪæĻĪøĪæĻ…Ļ‚, ĪŗĻ„Ī».)", + "rejectMedia": "Ī‘Ļ€ĪæĻ„ĻĪæĻ€Ī® ĪŗĪ±Ļ„ĪµĪ²Ī¬ĻƒĪ¼Ī±Ļ„ĪæĻ‚ Ī±ĻĻ‡ĪµĪÆĻ‰Ī½ Ļ€ĪæĪ»Ļ…Ī¼Ī­ĻƒĻ‰Ī½ (Ī±ĻĻ‡ĪµĪÆĪ± Ī®Ļ‡ĪæĻ…, ĪµĪ¾ĻŽĻ†Ļ…Ī»Ī»Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼, avatar Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ...) Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ Ī® Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·. Ī˜Ī± Ī“Ī¹Ī±Ī³ĻĪ±Ļ†ĪµĪÆ ĪŗĪ±Ī¹ Ļ„Īæ Ī®Ī“Ī· Ļ…Ļ€Ī¬ĻĻ‡ĪæĪ½ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ." + } + }, "InstancePolicyModal": { "button": { "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" } }, + "NoteForm": { + "button": { + "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĪ·Ī¼ĪµĪÆĻ‰ĻƒĪ·Ļ‚" + }, + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ļ…Ļ€ĪæĪ²ĪæĪ»Ī® ĻƒĪ·Ī¼ĪµĪÆĻ‰ĻƒĪ·Ļ‚" + }, + "placeholder": { + "summary": "Ī ĪµĻĪ¹Ī³ĻĪ¬ĻˆĻ„Īµ Ļ„Ī¹Ļ‚ ĪµĪ½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚ ĻƒĪ±Ļ‚, Ī® Ī¬Ī»Ī»ĪµĻ‚ ĻƒĻ‡ĪµĻ„Ī¹ĪŗĪ­Ļ‚ ĪµĪ½Ī·Ī¼ĪµĻĻŽĻƒĪµĪ¹Ļ‚ā€¦" + } + }, "NotesThread": { "button": { "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" @@ -1233,56 +1332,73 @@ "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ ĻƒĪ·Ī¼ĪµĪÆĻ‰ĻƒĪ·Ļ‚;" } } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { + }, + "ReportCard": { + "button": { + "confirmDelete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæĻ… Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚" + }, + "header": { + "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæĻ… Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚;" + } + }, + "table": { + "object": { "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚", "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + }, + "report": { + "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + }, + "status": { + "assignedTo": "Ī‘Ī½Ī±Ļ„ĪµĪøĪµĪÆ ĻƒĪµ" } } }, - "option": { - "all": "ĪŒĪ»Ī±" - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + "UserRequestCard": { + "button": { + "approve": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®" + }, + "header": { + "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚" + }, + "table": { + "request": { + "creationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" + }, + "status": { + "approved": "EĪ³ĪŗĻĪÆĪøĪ·ĪŗĪµ", + "assignedTo": "Ī‘Ī½Ī±Ļ„ĪµĪøĪµĪÆ ĻƒĪµ" + } } - }, - "label": { - "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "ĪšĪ±Ļ„Ī¬ĻƒĻ„Ī±ĻƒĪ· Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", - "email": "Email" - }, - "accountStatus": { - "active": "Ī•Ī½ĪµĻĪ³ĻŒĻ‚" - }, - "status": { - "admin": "Ī”Ī¹Ī±Ļ‡ĪµĪ¹ĻĪ¹ĻƒĻ„Ī®Ļ‚" - } - } + "InvitationForm": { + "button": { + "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±", + "new": "Ī‘Ļ€ĪæĪŗĻ„Ī®ĻƒĻ„Īµ Ī¼Ī¹Ī± Ī½Ī­Ī± Ļ€ĻĻŒĻƒĪŗĪ»Ī·ĻƒĪ·" }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ļ€ĻĻŒĻƒĪŗĪ»Ī·ĻƒĪ·Ļ‚" + }, + "table": { + "invitation": { + "header": { + "code": "ĪšĻŽĪ“Ī¹ĪŗĪ±Ļ‚" + } } } }, "InvitationsTable": { + "action": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, "option": { "all": "ĪŒĪ»Ī±", "expired": "Ī›Ī·Ī³Ī¼Ī­Ī½Īæ/Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ" @@ -1295,163 +1411,156 @@ "expirationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī»Ī®Ī¾Ī·Ļ‚" } } - }, - "action": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" } }, - "InvitationForm": { - "button": { - "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±", - "new": "Ī‘Ļ€ĪæĪŗĻ„Ī®ĻƒĻ„Īµ Ī¼Ī¹Ī± Ī½Ī­Ī± Ļ€ĻĻŒĻƒĪŗĪ»Ī·ĻƒĪ·" + "UsersTable": { + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } }, "table": { - "invitation": { + "user": { + "accountStatus": { + "active": "Ī•Ī½ĪµĻĪ³ĻŒĻ‚" + }, "header": { - "code": "ĪšĻŽĪ“Ī¹ĪŗĪ±Ļ‚" + "accountStatus": "ĪšĪ±Ļ„Ī¬ĻƒĻ„Ī±ĻƒĪ· Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", + "email": "Email" + }, + "status": { + "admin": "Ī”Ī¹Ī±Ļ‡ĪµĪ¹ĻĪ¹ĻƒĻ„Ī®Ļ‚" } } - }, - "header": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ļ€ĻĻŒĻƒĪŗĪ»Ī·ĻƒĪ·Ļ‚" } } } }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Ī•Ī½Ī­ĻĪ³ĪµĪ¹ĪµĻ‚", - "type": "Ī¤ĻĻ€ĪæĻ‚ Ļ€ĪµĪ“ĪÆĪæĻ…" - } - } - }, - "button": { - "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĪ“ĪÆĪæĻ…", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ± Ļ†ĻŒĻĪ¼Ī±Ļ‚" - }, - "label": { - "additionalField": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€ĪµĪ“ĪÆĪæ", - "additionalFields": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€ĪµĪ“ĪÆĪ±", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - }, - "help": { - "additionalFields": "Ī•Ļ€Ī¹Ļ€Ī»Ī­ĪæĪ½ Ļ€ĪµĪ“ĪÆĪ± Ļ€ĪæĻ… ĪøĪ± ĪµĪ¼Ļ†Ī±Ī½Ī¹ĻƒĻ„ĪæĻĪ½ ĻƒĻ„Ī·Ī½ Ļ†ĻŒĻĪ¼Ī±. Ī•Ī¼Ļ†Ī±Ī½ĪÆĪ¶ĪæĪ½Ļ„Ī±Ī¹ Ī¼ĻŒĪ½Īæ Ī±Ī½ ĪµĪÆĪ½Ī±Ī¹ ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Ī· Ī· Ļ‡ĪµĪ¹ĻĪæĪŗĪÆĪ½Ī·Ļ„Ī· Ī±Ļ€ĪæĪ“ĪæĻ‡Ī® ĪµĪ³Ī³ĻĪ±Ļ†ĻŽĪ½.", - "helpText": "Ī ĻĪæĪ±Ī¹ĻĪµĻ„Ī¹ĪŗĻŒ ĪŗĪµĪÆĪ¼ĪµĪ½Īæ Ļ€ĪæĻ… ĪøĪ± ĪµĪ¼Ļ†Ī±Ī½ĪÆĪ¶ĪµĻ„Ī±Ī¹ ĻƒĻ„Ī·Ī½ Ī±ĻĻ‡Ī® Ļ„Ī·Ļ‚ Ļ†ĻŒĻĪ¼Ī±Ļ‚ ĪµĪ³Ī³ĻĪ±Ļ†Ī®Ļ‚." - } - }, - "SettingsGroup": { - "header": { - "image": "Ī¤ĻĪ­Ļ‡Ļ‰Ī½ ĪµĪ¹ĪŗĻŒĪ½Ī±", - "error": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· ĻĻ…ĪøĪ¼ĪÆĻƒĪµĻ‰Ī½" - } - } - }, "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "ĪŒĪ»Ī±" - }, - "label": { - "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" - } - }, - "ReportModal": { - "header": { - "disabled": "ĪŸĪ¹ Ī±Ī½ĻŽĪ½Ļ…Ī¼ĪµĻ‚ Ī±Ī½Ī±Ļ†ĪæĻĪ­Ļ‚ ĪµĪÆĪ½Ī±Ī¹ Ī±Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½ĪµĻ‚, Ļ€Ī±ĻĪ±ĪŗĪ±Ī»ĻŽ ĻƒĻ…Ī½Ī“ĪµĪøĪµĪÆĻ„Īµ Ī³Ī¹Ī± Ī½Ī± Ļ…Ļ€ĪæĪ²Ī¬Ī»Ī»ĪµĻ„Ī±Ī¹ Ī±Ī½Ī±Ļ†ĪæĻĪ¬.", - "modal": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī±Ī½Ī±Ļ†Ī­ĻĪµĻ„Ī±Ī¹ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ;", - "submissionFailure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ļ…Ļ€ĪæĪ²ĪæĪ»Ī® Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚" - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" - }, - "label": { - "email": "Email", - "forwardToDomain": "Ī ĻĪæĻŽĪøĪ·ĻƒĪ· ĻƒĻ„Īæ { domain}" - }, - "description": { - "forwardToDomain": "Ī ĻĪæĻ‰ĪøĪ®ĻƒĻ„Īµ Ī­Ī½Ī± Ī±Ī½Ļ‰Ī½Ļ…Ī¼ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ Ī±Ī½Ļ„ĪÆĪ³ĻĪ±Ļ†Īæ Ļ„Ī·Ļ‚ Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚ ĻƒĪ±Ļ‚ ĻƒĻ„ĪæĪ½ Ī“Ī¹Ī±ĪŗĪæĪ¼Ī¹ĻƒĻ„Ī® Ļ€ĪæĻ… Ļ†Ī¹Ī»ĪæĪ¾ĪµĪ½ĪµĪÆ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ." - } - }, "FilterModal": { "button": { "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", "hide": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" }, + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ļ†ĪÆĪ»Ļ„ĻĪæĻ…", + "modal": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪŗĻĻĻˆĪµĻ„Īµ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī±Ļ€' Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī· \"{ name }\";" + }, "message": { "success": "Ī ĻĪæĻƒĻ„Ī­ĪøĪ·ĪŗĪµ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚ Ļ„Īæ Ļ†ĪÆĪ»Ļ„ĻĪæ Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" + }, + "option": { + "all": "ĪŒĪ»Ī±" + } + }, + "ReportModal": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" + }, + "description": { + "forwardToDomain": "Ī ĻĪæĻ‰ĪøĪ®ĻƒĻ„Īµ Ī­Ī½Ī± Ī±Ī½Ļ‰Ī½Ļ…Ī¼ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ Ī±Ī½Ļ„ĪÆĪ³ĻĪ±Ļ†Īæ Ļ„Ī·Ļ‚ Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚ ĻƒĪ±Ļ‚ ĻƒĻ„ĪæĪ½ Ī“Ī¹Ī±ĪŗĪæĪ¼Ī¹ĻƒĻ„Ī® Ļ€ĪæĻ… Ļ†Ī¹Ī»ĪæĪ¾ĪµĪ½ĪµĪÆ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ." }, "header": { - "modal": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪŗĻĻĻˆĪµĻ„Īµ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī±Ļ€' Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī· \"{ name }\";", - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ļ†ĪÆĪ»Ļ„ĻĪæĻ…" + "disabled": "ĪŸĪ¹ Ī±Ī½ĻŽĪ½Ļ…Ī¼ĪµĻ‚ Ī±Ī½Ī±Ļ†ĪæĻĪ­Ļ‚ ĪµĪÆĪ½Ī±Ī¹ Ī±Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½ĪµĻ‚, Ļ€Ī±ĻĪ±ĪŗĪ±Ī»ĻŽ ĻƒĻ…Ī½Ī“ĪµĪøĪµĪÆĻ„Īµ Ī³Ī¹Ī± Ī½Ī± Ļ…Ļ€ĪæĪ²Ī¬Ī»Ī»ĪµĻ„Ī±Ī¹ Ī±Ī½Ī±Ļ†ĪæĻĪ¬.", + "modal": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī±Ī½Ī±Ļ†Ī­ĻĪµĻ„Ī±Ī¹ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĪæ;", + "submissionFailure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ļ…Ļ€ĪæĪ²ĪæĪ»Ī® Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚" + }, + "label": { + "email": "Email", + "forwardToDomain": "Ī ĻĪæĻŽĪøĪ·ĻƒĪ· ĻƒĻ„Īæ { domain}" } } }, - "federation": { - "FetchButton": { - "description": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ī½Ī±Ī½Ī­Ļ‰ĻƒĪ· Ļ„Ļ‰Ī½ ĻƒĻ„ĪæĪ¹Ļ‡ĪµĪÆĻ‰Ī½:", - "success": "Ī¤Ī± Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ī± Ī±Ļ€ĻŒ Ļ„ĪæĪ½ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Īæ server Ī±Ī½Ī±Ī½ĪµĻŽĪøĪ·ĪŗĪ±Ī½ ĪµĻ€Ī¹Ļ„Ļ…Ļ‡ĻŽĻ‚." + "notifications": { + "NotificationRow": { + "button": { + "approve": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®" + }, + "message": { + "libraryAcceptFollow": "{ username } Ī±Ļ€ĪæĪ“Ī­Ļ‡ĪøĪ·ĪŗĪµ Ļ„Ī·Ī½ Ī±ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪ· Ļ„Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚ \"{ library }\"", + "libraryFollow": "{ username } Ī±ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ Ļ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ· ĻƒĪ±Ļ‚ \"{ library }\"", + "libraryPendingFollow": "{ username } ĪøĪ­Ī»ĪµĪ¹ Ī½Ī± Ī±ĪŗĪæĪ»ĪæĻ…ĪøĪ®ĻƒĪµĪ¹ Ļ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ· ĻƒĪ±Ļ‚ \"{ library }\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + } + }, + "Editor": { + "button": { + "addDuplicate": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪæĻĻ„Ļ‰Ļ‚ Ī® Ī¬Ī»Ī»Ļ‰Ļ‚", + "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", + "copy": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ļ„ĻĪ­Ļ‡ĪæĻ…ĻƒĪ±Ļ‚ ĪæĻ…ĻĪ¬Ļ‚ ĻƒĪµ Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "error": { + "sync": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· Ļ„Ļ‰Ī½ Ī±Ī»Ī»Ī±Ī³ĻŽĪ½ ĻƒĪ±Ļ‚" + }, + "help": { + "reorder": "ĪšĪ¬Ī½Ļ„Īµ drag and drop ĻƒĪµĪ¹ĻĪ­Ļ‚ Ī³Ī¹Ī± Ī½Ī± Ī±Ī½Ī±Ī“Ī¹Ī¬Ļ„Ī±Ī¾Ī· Ļ„Ļ‰Ī½ ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĻŽĪ½ ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "message": { + "sync": "ĪŸĪ¹ Ī±Ī»Ī»Ī±Ī³Ī­Ļ‚ ĻƒĻ…Ī³Ļ‡ĻĪæĪ½ĪÆĻƒĻ„Ī·ĪŗĪ±Ī½ Ī¼Īµ Ļ„ĪæĪ½ Ī“Ī¹Ī±ĪŗĪæĪ¼Ī¹ĻƒĻ„Ī®" + }, + "modal": { + "clearPlaylist": { + "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± ĪµĪŗĪŗĪ±ĪøĪ±ĻĪÆĻƒĪµĻ„Īµ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ \"{ playlist }\";" + } + } + }, + "Form": { + "button": { + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "header": { + "createPlaylist": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī½Ī­Ī±Ļ‚ Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪæĻĻ„Ļ‰Ļ‚ Ī® Ī¬Ī»Ī»Ļ‰Ļ‚", + "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĪµ Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", + "addTrack": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ", + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "header": { + "addToPlaylist": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", + "available": "Ī”Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼ĪµĻ‚ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "label": { + "filter": "Ī¦ĪÆĪ»Ļ„ĻĪæ" + }, + "placeholder": { + "filterPlaylist": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻŒĪ½ĪæĪ¼Ī± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" }, "table": { - "error": { - "value": { - "httpError": "ĪˆĪ½Ī± ĻƒĻ†Ī¬Ī»Ī¼Ī± HTTP ĻƒĻ…Ī½Ī­Ī²Ī· ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ ĪµĻ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ± Ī¼Īµ Ļ„ĪæĪ½ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Īæ ĪµĪ¾Ļ…Ļ€Ī·ĻĪµĻ„Ī·Ļ„Ī®", - "invalidAttributesError": "Ī¤Ī± Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ī± Ļ€ĪæĻ… Ļ€Ī¬ĻĪøĪ·ĪŗĪ±Ī½ Ī±Ļ€ĻŒ Ļ„ĪæĪ½ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Īæ server ĪµĪÆĻ‡Ī±Ī½ Ī¼Ī· Ī­Ī³ĪŗĻ…ĻĪ± Ī® ĪµĪ»Ī»Ī¹Ļ€Ī®Ļ‚ Ļ‡Ī±ĻĪ±ĪŗĻ„Ī·ĻĪ¹ĻƒĻ„Ī¹ĪŗĪ¬" - }, - "label": { - "type": "Ī¤ĻĻ€ĪæĻ‚ ĻƒĻ†Ī¬Ī»Ī¼Ī±Ļ„ĪæĻ‚" + "edit": { + "header": { + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" } } }, - "button": { - "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ", - "reload": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ ĪŗĪ±Ī¹ Ī±Ī½Ī±Ī½Ī­Ļ‰ĻƒĪ· ĻƒĪµĪ»ĪÆĪ“Ī±Ļ‚" - }, - "header": { - "saveFailure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī·Ī½ Ī±Ļ€ĪæĪøĪ®ĪŗĪµĻ…ĻƒĪ· ĻĻ…ĪøĪ¼ĪÆĻƒĪµĻ‰Ī½" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Ī£Ļ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", - "clearQueue": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± ĪæĻ…ĻĪ¬Ļ‚", - "decreaseVolume": "ĪœĪµĪÆĻ‰ĻƒĪ· Ī­Ī½Ļ„Ī±ĻƒĪ·Ļ‚" - }, - "general": { - "label": "Ī“ĪµĪ½Ī¹ĪŗĪ­Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚" + "warning": { + "duplicate": "Ī¤Īæ { 0 } ĪµĪÆĪ½Ī±Ī¹ Ī®Ī“Ī· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± { 1 }." } }, - "button": { - "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" - }, - "header": { - "chooseInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚" - } - }, - "Queue": { - "button": { - "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±", - "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" - }, - "label": { - "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±", - "addArtistContentFilter": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·ā€¦" - } - }, - "forms": { - "PasswordInput": { + "TrackPlaylistIcon": { "button": { - "copy": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ±Ļ†Ī®" + "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦" + } + }, + "Widget": { + "button": { + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī›ĪÆĻƒĻ„Ī±Ļ‚ Ī‘Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" } } }, @@ -1461,704 +1570,6 @@ "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" } } - }, - "RemoteSearchForm": { - "button": { - "fediverse": "Fediverse" - }, - "label": { - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml" - } - } - }, - "PageNotFound": { - "link": { - "home": "Ī Ī·Ī³Ī±ĪÆĪ½ĪµĻ„Īµ ĻƒĻ„Ī·Ī½ Ī±ĻĻ‡Ī¹ĪŗĪ® ĻƒĪµĪ»ĪÆĪ“Ī±" - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", - "listenings": "{ n } Ī±ĪŗĻĻŒĪ±ĻƒĪ· | { n } Ī±ĪŗĻĪæĪ¬ĻƒĪµĪ¹Ļ‚", - "subscribers": "{ n } ĪµĪ³Ī³ĪµĪ³ĻĪ±Ī¼Ī¼Ī­Ī½ĪæĻ‚ | { n } ĪµĪ³Ī³ĪµĪ³ĻĪ±Ī¼Ī¼Ī­Ī½ĪæĪ¹", - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - }, - "link": { - "channelEpisodes": "ĪŒĪ»Ī± Ļ„Ī± Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±" - }, - "header": { - "artistChannel": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®ā€¦", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±ā€¦", - "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ·" - }, - "title": "ĪšĪ±Ī½Ī¬Ī»Ī¹", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ¬ĻˆĻ„Īµ ĪŗĪ±Ī¹ ĪµĻ€Ī¹ĪŗĪæĪ»Ī»Ī®ĻƒĻ„Īµ Ļ„ĪæĪ½ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæ ĻƒĻĪ½Ī“ĪµĻƒĪ¼Īæ ĻƒĻ„Īæ Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Īæ ĻƒĪ±Ļ‚ podcatcher:" - } - }, - "fediverse": { - "content": { - "help": "Ī•Ī¬Ī½ Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹ĪµĪÆĻ„Īµ Ļ„Īæ Mastodon Ī® Ī¬Ī»Ī»ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ļ„ĪæĻ… fediverse, Ī¼Ļ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± Ī³ĪÆĪ½ĪµĻ„Īµ ĻƒĻ…Ī½Ī“ĻĪæĪ¼Ī·Ļ„Ī­Ļ‚ ĻƒĪµ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ:" - } - } - }, - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī· Ļ„ĪæĻ… ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ;" - }, - "embed": { - "header": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· Ļ„ĪæĻ… ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī· ĻƒĻ„Ī·Ī½ Ī¹ĻƒĻ„ĪæĻƒĪµĪ»ĪÆĪ“Ī± ĻƒĪ±Ļ‚" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī½Ī­ĪæĻ…" - }, - "header": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī½Ī­ĪæĻ…" - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } ĻƒĪµ Ļ‡ĻĪ®ĻƒĪ· Ī±Ļ€Īæ Ļ„Ī± { max } Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī±" - }, - "header": { - "currentUsage": "Ī¤ĻĪ­Ļ‡ĪæĻ…ĻƒĪ± Ļ‡ĻĪ®ĻƒĪ·" - } - }, - "FilesTable": { - "table": { - "file": { - "header": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", - "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±" - } - } - }, - "option": { - "status": { - "all": "ĪŒĪ»Ī±", - "draft": "Ī ĻĪæĻƒĻ‡Ī­Ī“Ī¹Īæ" - } - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "action": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - } - }, - "Home": { - "link": { - "createLibrary": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī½Ī­Ī±Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" - } - }, - "Form": { - "button": { - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚;" - } - }, - "label": { - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" - }, - "header": { - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī±" - } - } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±", - "failedTracks": "Ī‘Ļ€ĪæĻ„Ļ…Ļ‡Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Ī‘Ī½ ĻƒĻ„Ī±Ī¼Ī±Ļ„Ī®ĻƒĪµĻ„Īµ Ī½Ī± Ī±ĪŗĪæĪ»ĪæĻ…ĪøĪµĪÆĻ„Īµ Ļ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·, ĪøĪ± ĻƒĻ„Ī±Ī¼Ī±Ļ„Ī®ĻƒĪµĻ„Īµ Ī½Ī± Ī­Ļ‡ĪµĻ„Īµ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ļ„Ī·Ļ‚." - } - } - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ· Ī±Ī¹Ļ„Ī®Ī¼Ī±Ļ„ĪæĻ‚ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæĻ…", - "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ" - }, - "link": { - "scanDetails": "Ī›ĪµĻ€Ļ„ĪæĪ¼Ī­ĻĪµĪ¹ĪµĻ‚" - } - }, - "ScanForm": { - "header": { - "failure": "Ī‘Ļ€ĪæĻ„Ļ…Ļ‡ĪÆĪ± Ī»Ī®ĻˆĪ·Ļ‚ Ļ„Ī·Ļ‚ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" - }, - "placeholder": { - "url": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻƒĻĪ½Ī“ĪµĻƒĪ¼Īæ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" - } - } - }, - "Home": { - "title": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪ±Ī¹ Ī“Ī¹Ī±Ļ‡ĪµĪÆĻĪ¹ĻƒĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", - "description": { - "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚ Ī±Ļ€ĻŒ Ī¬Ī»Ī»ĪæĻ…Ļ‚ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚ Ī³Ī¹Ī± Ī½Ī± Ī±Ļ€ĪæĪŗĻ„Ī®ĻƒĪµĪ¹Ļ‚ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī½Ī­Ī± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®. ĪŸĪ¹ Ī“Ī·Ī¼ĻŒĻƒĪ¹ĪµĻ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚ Ī¼Ļ€ĪæĻĪæĻĪ½ Ī½Ī± Ī±ĪŗĪæĪ»ĪæĻ…ĪøĪ·ĪøĪæĻĪ½ Ī¬Ī¼ĪµĻƒĪ±, ĪµĪ½ĻŽ ĻƒĪµ Ī¹Ī“Ī¹Ļ‰Ļ„Ī¹ĪŗĪ­Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚ Ī±Ļ€Ī±Ī¹Ļ„ĪµĪÆĻ„Ī±Ī¹ Ī­Ī³ĪŗĻĪ¹ĻƒĪ· Ī±Ļ€ĻŒ Ļ„ĪæĪ½ Ī¹Ī“Ī¹ĪæĪŗĻ„Ī®Ļ„Ī· Ļ„Ī·Ļ‚.", - "channel": { - "1": "Ī•Ī¬Ī½ ĪµĪÆĻƒĪ±Ī¹ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĻŒĻ‚ Ī® podcaster, Ļ„Ī± ĪŗĪ±Ī½Ī¬Ī»Ī¹Ī± ĻƒĻ‡ĪµĪ“Ī¹Ī¬ĻƒĻ„Ī·ĪŗĪ±Ī½ Ī³Ī¹Ī± 'ĻƒĪ­Ī½Ī±!" - } - }, - "header": { - "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½ĪµĻ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚" - }, - "button": { - "start": "ĪžĪµĪŗĪ¹Ī½Ī®ĻƒĻ„Īµ" - } - }, - "Base": { - "title": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" - } - }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - }, - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" - }, - "button": { - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - } - }, - "Edit": { - "button": { - "accept": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®" - }, - "table": { - "action": { - "status": { - "accepted": "Ī‘Ļ€ĪæĪ“ĪµĪŗĻ„ĻŒ" - }, - "header": { - "action": "ĪµĪ½Ī­ĻĪ³ĪµĪ¹Ī±", - "date": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ±" - } - } - }, - "header": { - "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" - } - } - }, - "auth": { - "ProfileBase": { - "title": "Ļ€ĻĪæĻ†ĪÆĪ» Ļ„ĪæĻ… { username }", - "link": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±" - } - }, - "PasswordReset": { - "label": { - "email": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" - }, - "button": { - "requestReset": "Ī•Ļ€Ī±Ī½Ī±Ļ†ĪæĻĪ¬ ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ" - }, - "link": { - "back": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī·Ī½ ĻƒĻĪ½Ī“ĪµĻƒĪ·" - } - }, - "ProfileOverview": { - "link": { - "addNew": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī½Ī­ĪæĻ…" - }, - "modal": { - "createChannel": { - "artist": { - "header": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" - }, - "header": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" - } - }, - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "createChannel": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" - }, - "header": { - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī·Ī½ ĻƒĻĪ½Ī“ĪµĻƒĪ·" - }, - "title": "Ī‘Ī»Ī»Ī±Ī³Ī® ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ", - "message": { - "requestSent": "Ī•Ī¬Ī½ Ī· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail Ļ€ĪæĻ… Ī“ĻŒĪøĪ·ĪŗĪµ ĻƒĻ„Īæ Ļ€ĻĪæĪ·Ī³ĪæĻĪ¼ĪµĪ½Īæ Ī²Ī®Ī¼Ī± ĪµĪÆĪ½Ī±Ī¹ Ī­Ī³ĪŗĻ…ĻĪ· ĪŗĪ±Ī¹ ĻƒĻ…Ī½Ī“ĪµĪ“ĪµĪ¼Ī­Ī½Ī· Ī¼Īµ Ī­Ī½Ī± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ Ļ‡ĻĪ®ĻƒĻ„Ī·, ĪøĪ± Ļ€ĻĪ­Ļ€ĪµĪ¹ Ī½Ī± Ļ€Ī±ĻĪ±Ī»Ī¬Ī²ĪµĻ„Īµ Ī­Ī½Ī± e-mail Ī¼Īµ ĪæĪ“Ī·Ī³ĪÆĪµĻ‚ ĪµĻ€Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚ ĻƒĻ„Ī± ĪµĻ€ĻŒĪ¼ĪµĪ½Ī± Ī»ĪµĻ€Ļ„Ī¬." - } - }, - "EmailConfirm": { - "title": "Ī•Ļ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ· Ļ„Ī·Ļ‚ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚ e-mail ĻƒĪ±Ļ‚", - "label": { - "confirmationCode": "ĪšĻ‰Ī“Ī¹ĪŗĻŒĻ‚ ĪµĻ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ·Ļ‚" - }, - "header": { - "failure": "Ī”ĪµĪ½ Ī¼Ļ€ĪæĻĪ­ĻƒĪ±Ī¼Īµ Ī½Ī± ĪµĻ€Ī¹Ī²ĪµĪ²Ī±Ī¹ĻŽĻƒĪæĻ…Ī¼Īµ Ļ„Ī·Ī½ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚", - "success": "Ī— Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĪµĻ€Ī¹Ī²ĪµĪ²Ī±Ī¹ĻŽĪøĪ·ĪŗĪµ" - } - }, - "Signup": { - "header": { - "createAccount": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Funkwhale Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" - } - } - }, - "Notifications": { - "option": { - "delay": { - "30": "30 Ī·Ī¼Ī­ĻĪµĻ‚", - "60": "60 Ī·Ī¼Ī­ĻĪµĻ‚", - "90": "90 Ī·Ī¼Ī­ĻĪµĻ‚" - } - }, - "link": { - "help": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ Ī¬Ī»Ī»ĪæĻ…Ļ‚ Ļ„ĻĻŒĻ€ĪæĻ…Ļ‚ Ī½Ī± Ī²ĪæĪ·ĪøĪ®ĻƒĪµĻ„Īµ", - "donate": "Ī”Ļ‰ĻĪµĪ¬" - }, - "header": { - "funkwhaleSupport": "Ī£Ī±Ļ‚ Ī±ĻĪ­ĻƒĪµĪ¹ Ļ„Īæ Funkwhale;" - } - }, - "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±", - "loginStatus": { - "disabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", - "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ" - }, - "displayName": "Ī•Ī¼Ļ†Ī±Ī½Ī¹Ī¶ĻŒĪ¼ĪµĪ½Īæ ĻŒĪ½ĪæĪ¼Ī±", - "email": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· Email" - }, - "audioContent": { - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - } - }, - "header": { - "accountData": "Ī£Ļ„ĪæĪ¹Ļ‡ĪµĪÆĪ± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "button": { - "addPolicy": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ®Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ" - }, - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - }, - "tooltip": { - "uploadQuota": "ĪšĪ±ĪøĪæĻĪÆĻƒĻ„Īµ Ļ€ĻŒĻƒĪæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ī±Ī½ĪµĪ²Ī¬ĻƒĪµĪ¹ Īæ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚. Ī‘Ļ†Ī®ĻƒĻ„Īµ Ļ„Īæ ĪŗĪµĪ½ĻŒ Ī³Ī¹Ī± Ī½Ī± Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹Ī·ĪøĪµĪÆ Ī· Ļ€ĻĪæĪŗĪ±ĪøĪæĻĪ¹ĻƒĪ¼Ī­Ī½Ī· Ļ„Ī¹Ī¼Ī®." - } - }, - "Base": { - "link": { - "accounts": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĪÆ", - "domains": "Ī”Ī¹ĪµĻ…ĪøĻĪ½ĻƒĪµĪ¹Ļ‚" - } - }, - "DomainsDetail": { - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "button": { - "addPolicy": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ®Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", - "addToAllowList": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± ĪµĻ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½" - }, - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" - }, - "table": { - "audioContent": { - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - } - } - }, - "DomainsList": { - "button": { - "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ·" - }, - "label": { - "addDomain": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚", - "addToAllowList": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± ĪµĻ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½" - }, - "title": "Ī”Ī¹ĪµĻ…ĪøĻĪ½ĻƒĪµĪ¹Ļ‚", - "header": { - "domains": "Ī”Ī¹ĪµĻ…ĪøĻĪ½ĻƒĪµĪ¹Ļ‚", - "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "ĪŒĪ»Ī±" - } - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - } - }, - "RequestsList": { - "option": { - "status": { - "all": "ĪŒĪ»Ī±", - "approved": "EĪ³ĪŗĻĪÆĪøĪ·ĪŗĪµ" - } - }, - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·", - "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±" - } - }, - "link": { - "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - }, - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "download": "Ī›Ī®ĻˆĪ·" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ·Ļ‚;" - } - } - }, - "LibraryDetail": { - "link": { - "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - }, - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "table": { - "audioContent": { - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - }, - "library": { - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" - }, - "activity": { - "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" - } - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚;" - } - } - }, - "AlbumDetail": { - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "albumData": "Ī£Ļ„ĪæĪ¹Ļ‡ĪµĪÆĪ± Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "link": { - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", - "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" - }, - "table": { - "audioContent": { - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - }, - "album": { - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" - }, - "activity": { - "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼;" - } - } - }, - "ArtistDetail": { - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "artistData": "Ī”ĪµĪ“ĪæĪ¼Ī­Ī½Ī± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", - "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" - }, - "table": { - "audioContent": { - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - }, - "artist": { - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" - }, - "activity": { - "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·;" - } - } - }, - "TagDetail": { - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" - }, - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ ĪµĻ„Ī¹ĪŗĪ­Ļ„Ī±Ļ‚;" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±" - }, - "link": { - "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "albumArtist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", - "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" - }, - "table": { - "trackData": { - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - }, - "track": { - "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±", - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", - "discNumber": "Ī‘ĻĪ¹ĪøĪ¼ĻŒĻ‚ Ī“ĪÆĻƒĪŗĪæĻ…" - }, - "activity": { - "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ;" - } - } - }, - "Base": { - "link": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±", - "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" - } - }, - "EditsList": { - "title": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" - } - }, - "ChannelDetail": { - "table": { - "channelData": { - "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", - "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", - "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", - "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" - }, - "audioContent": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" - }, - "activity": { - "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚", - "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" - } - }, - "header": { - "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", - "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…", - "channelData": "Ī£Ļ„ĪæĪ¹Ļ‡ĪµĪÆĪ± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" - }, - "button": { - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" - }, - "modal": { - "delete": { - "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ;" - } - } - }, - "CommonList": { - "title": { - "accounts": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĪÆ", - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" - } - }, - "Settings": { - "header": { - "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" - } - } - }, - "Search": { - "label": { - "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" - } - }, - "playlists": { - "List": { - "ordering": { - "direction": { - "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", - "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" - } - }, - "header": { - "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, - "button": { - "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, - "placeholder": { - "search": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻŒĪ½ĪæĪ¼Ī± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦" - } - }, - "Detail": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", - "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±", - "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ·" - }, - "modal": { - "delete": { - "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī“Ī¹Ī±Ī³ĻĪ¬ĻˆĪµĻ„Īµ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ \"{ playlist }\";" - }, - "embed": { - "header": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· Ļ„Ī·Ļ‚ Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ ĻƒĻ„Ī·Ī½ Ī¹ĻƒĻ„ĪæĻƒĪµĪ»ĪÆĪ“Ī± ĻƒĪ±Ļ‚" - } - } - } - }, - "radios": { - "Detail": { - "button": { - "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻĪ¬Ī“Ī¹Īæ", - "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±ā€¦" - }, - "modal": { - "delete": { - "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī“Ī¹Ī±Ī³ĻĪ¬ĻˆĪµĻ„Īµ Ļ„Īæ ĻĪ¬Ī“Ī¹Īæ \"{ radio }\";" - } - } - } } }, "composables": { @@ -2169,45 +1580,37 @@ }, "locale": { "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī±ĻĻ‡ĪµĪÆĪ± Ī®Ļ‡ĪæĻ…, Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚, ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚, Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ ĪŗĪ±Ī¹ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + "fields": { + "contentCategory": { + "label": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" }, - "filters": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ļ†ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", - "label": "Ī¦ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" + "importStatus": { + "choices": { + "draft": { + "label": "Ī ĻĪæĻƒĻ‡Ī­Ī“Ī¹Īæ" + } + }, + "label": "ĪšĪ¬Ī½Ļ„Īµ ĪŗĪ»Ī¹Īŗ Ī³Ī¹Ī± ĪµĪ¼Ļ†Ī±Ī½Ī¹ĻƒĻ„ĪæĻĪ½ Ļ€ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪµĻ‚ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ ĻƒĻ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ļ„Ī·Ī½ Ī“Ī¹Ī±Ī“Ī¹ĪŗĪ±ĻƒĪÆĪ± ĪµĪ¹ĻƒĪ±Ī³Ļ‰Ī³Ī®Ļ‚ Ī³Ī¹Ī± Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ·" }, - "profile": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ e-mail, ĻŒĪ½ĪæĪ¼Ī± Ļ‡ĻĪ®ĻƒĻ„Ī· ĪŗĪ±Ī¹ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ Ļ€ĻĪæĻ†ĪÆĪ»" + "privacyLevel": { + "choices": { + "instance": "ĪŒĪ»ĪæĪ¹ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ instance", + "public": "ĪŒĪ»ĪæĪ¹, Ī¼ĪµĻ„Ī±Ī¾Ļ ĻŒĪ»Ļ‰Ī½ Ļ„Ļ‰Ī½ instances" + }, + "help": "ĪšĪ±ĪøĪæĻĪÆĻƒĻ„Īµ Ļ„Īæ ĪµĻ€ĪÆĻ€ĪµĪ“Īæ ĪæĻĪ±Ļ„ĻŒĻ„Ī·Ļ„Ī±Ļ‚ Ļ„Ī·Ļ‚ Ī“ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±Ļ‚ ĻƒĪ±Ļ‚", + "label": "ĪŸĻĪ±Ļ„ĻŒĻ„Ī·Ļ„Ī± Ī“ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±Ļ‚", + "shortChoices": { + "public": "ĪŒĪ»ĪæĪ¹" + } }, - "edits": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ ĪµĻ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚", - "label": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" + "reportType": { + "choices": { + "illegalContent": "Ī Ī±ĻĪ¬Ī½ĪæĪ¼Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ" + }, + "label": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±" }, - "follows": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī±ĪŗĪæĪ»ĪæĻĪøĪæĻ…Ļ‚", - "label": "Ī‘ĪŗĪæĪ»ĪæĻ…ĪøĪæĻĪ½" - }, - "listenings": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Īæ Ī¹ĻƒĻ„ĪæĻĪ¹ĪŗĻŒ Ī±ĪŗĻĻŒĪ±ĻƒĪ·Ļ‚" - }, - "reports": { - "description": "Ī ĻĻŒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ Ī±Ī½Ī±Ļ†ĪæĻĪ­Ļ‚" - }, - "notifications": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ ĪµĪ¹Ī“ĪæĻ€ĪæĪ¹Ī®ĻƒĪµĪ¹Ļ‚" - }, - "playlists": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" - }, - "radios": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī± ĻĪ¬Ī“Ī¹Īæ" - }, - "security": { - "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ ĻĻ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚ Ī±ĻƒĻ†Ī±Ī»ĪµĪÆĪ±Ļ‚ ĻŒĻ€Ļ‰Ļ‚ ĪŗĻ‰Ī“Ī¹ĪŗĻŒĻ‚ ĪŗĪ±Ī¹ ĪµĪ¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĻŒĻ„Ī·ĻƒĪ·" - }, - "favorites": { - "label": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" + "summary": { + "label": "Ī’Ī¹ĪæĪ³ĻĪ±Ļ†ĪÆĪ±" } }, "filters": { @@ -2221,42 +1624,58 @@ "expirationDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī»Ī®Ī¾Ī·Ļ‚", "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" }, - "fields": { - "privacyLevel": { - "label": "ĪŸĻĪ±Ļ„ĻŒĻ„Ī·Ļ„Ī± Ī“ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±Ļ‚", - "help": "ĪšĪ±ĪøĪæĻĪÆĻƒĻ„Īµ Ļ„Īæ ĪµĻ€ĪÆĻ€ĪµĪ“Īæ ĪæĻĪ±Ļ„ĻŒĻ„Ī·Ļ„Ī±Ļ‚ Ļ„Ī·Ļ‚ Ī“ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±Ļ‚ ĻƒĪ±Ļ‚", - "shortChoices": { - "public": "ĪŒĪ»ĪæĪ¹" - }, - "choices": { - "instance": "ĪŒĪ»ĪæĪ¹ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ instance", - "public": "ĪŒĪ»ĪæĪ¹, Ī¼ĪµĻ„Ī±Ī¾Ļ ĻŒĪ»Ļ‰Ī½ Ļ„Ļ‰Ī½ instances" - } + "scopes": { + "edits": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ ĪµĻ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚", + "label": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" }, - "summary": { - "label": "Ī’Ī¹ĪæĪ³ĻĪ±Ļ†ĪÆĪ±" + "favorites": { + "label": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" }, - "reportType": { - "label": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", - "choices": { - "illegalContent": "Ī Ī±ĻĪ¬Ī½ĪæĪ¼Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ" - } + "filters": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ļ†ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…", + "label": "Ī¦ĪÆĪ»Ļ„ĻĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" }, - "importStatus": { - "label": "ĪšĪ¬Ī½Ļ„Īµ ĪŗĪ»Ī¹Īŗ Ī³Ī¹Ī± ĪµĪ¼Ļ†Ī±Ī½Ī¹ĻƒĻ„ĪæĻĪ½ Ļ€ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪµĻ‚ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ ĻƒĻ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ļ„Ī·Ī½ Ī“Ī¹Ī±Ī“Ī¹ĪŗĪ±ĻƒĪÆĪ± ĪµĪ¹ĻƒĪ±Ī³Ļ‰Ī³Ī®Ļ‚ Ī³Ī¹Ī± Ī±Ļ…Ļ„Ī®Ī½ Ļ„Ī·Ī½ Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ·", - "choices": { - "draft": { - "label": "Ī ĻĪæĻƒĻ‡Ī­Ī“Ī¹Īæ" - } - } + "follows": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī±ĪŗĪæĪ»ĪæĻĪøĪæĻ…Ļ‚", + "label": "Ī‘ĪŗĪæĪ»ĪæĻ…ĪøĪæĻĪ½" }, - "contentCategory": { - "label": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ± Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" + "libraries": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī±ĻĻ‡ĪµĪÆĪ± Ī®Ļ‡ĪæĻ…, Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚, ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚, Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ ĪŗĪ±Ī¹ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "listenings": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Īæ Ī¹ĻƒĻ„ĪæĻĪ¹ĪŗĻŒ Ī±ĪŗĻĻŒĪ±ĻƒĪ·Ļ‚" + }, + "notifications": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ ĪµĪ¹Ī“ĪæĻ€ĪæĪ¹Ī®ĻƒĪµĪ¹Ļ‚" + }, + "playlists": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "profile": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ e-mail, ĻŒĪ½ĪæĪ¼Ī± Ļ‡ĻĪ®ĻƒĻ„Ī· ĪŗĪ±Ī¹ Ļ€Ī»Ī·ĻĪæĻ†ĪæĻĪÆĪµĻ‚ Ļ€ĻĪæĻ†ĪÆĪ»" + }, + "radios": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī± ĻĪ¬Ī“Ī¹Īæ" + }, + "reports": { + "description": "Ī ĻĻŒĪ²Ī±ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ Ī±Ī½Ī±Ļ†ĪæĻĪ­Ļ‚" + }, + "security": { + "description": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ ĻĻ…ĪøĪ¼ĪÆĻƒĪµĪ¹Ļ‚ Ī±ĻƒĻ†Ī±Ī»ĪµĪÆĪ±Ļ‚ ĻŒĻ€Ļ‰Ļ‚ ĪŗĻ‰Ī“Ī¹ĪŗĻŒĻ‚ ĪŗĪ±Ī¹ ĪµĪ¾ĪæĻ…ĻƒĪ¹ĪæĪ“ĻŒĻ„Ī·ĻƒĪ·" } } } }, "moderation": { + "useEditConfigs": { + "description": { + "label": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + }, + "track": { + "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±" + } + }, "useReport": { "account": { "typeLabel": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚" @@ -2285,22 +1704,14 @@ "channel": { "label": "ĪšĪ±Ī½Ī¬Ī»Ī¹" }, - "track": { - "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±" - }, "creationDate": { "label": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ±Ļ‚" }, "library": { "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" - } - }, - "useEditConfigs": { + }, "track": { "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±" - }, - "description": { - "label": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" } } }, @@ -2312,5 +1723,688 @@ "serviceWorker": { "newAppVersion": "ĪœĪ¹Ī± Ī½Ī­Ī± Ī­ĪŗĪ“ĪæĻƒĪ· Ļ„Ī·Ļ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī®Ļ‚ ĪµĪÆĪ½Ī±Ī¹ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī·." } + }, + "views": { + "Notifications": { + "header": { + "funkwhaleSupport": "Ī£Ī±Ļ‚ Ī±ĻĪ­ĻƒĪµĪ¹ Ļ„Īæ Funkwhale;" + }, + "link": { + "donate": "Ī”Ļ‰ĻĪµĪ¬", + "help": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ Ī¬Ī»Ī»ĪæĻ…Ļ‚ Ļ„ĻĻŒĻ€ĪæĻ…Ļ‚ Ī½Ī± Ī²ĪæĪ·ĪøĪ®ĻƒĪµĻ„Īµ" + }, + "option": { + "delay": { + "30": "30 Ī·Ī¼Ī­ĻĪµĻ‚", + "60": "60 Ī·Ī¼Ī­ĻĪµĻ‚", + "90": "90 Ī·Ī¼Ī­ĻĪµĻ‚" + } + } + }, + "Search": { + "label": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…", + "channelData": "Ī£Ļ„ĪæĪ¹Ļ‡ĪµĪÆĪ± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ;" + } + }, + "table": { + "activity": { + "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚", + "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "audioContent": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + }, + "channelData": { + "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", + "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + } + } + }, + "CommonList": { + "title": { + "accounts": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĪÆ", + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" + } + }, + "Settings": { + "header": { + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "albumData": "Ī£Ļ„ĪæĪ¹Ļ‡ĪµĪÆĪ± Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", + "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼;" + } + }, + "table": { + "activity": { + "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "album": { + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + }, + "audioContent": { + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + } + } + }, + "ArtistDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "artistData": "Ī”ĪµĪ“ĪæĪ¼Ī­Ī½Ī± ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "category": "ĪšĪ±Ļ„Ī·Ī³ĪæĻĪÆĪ±", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", + "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·;" + } + }, + "table": { + "activity": { + "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "artist": { + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + }, + "audioContent": { + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + } + } + }, + "Base": { + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±", + "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" + } + }, + "EditsList": { + "title": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" + }, + "LibraryDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚;" + } + }, + "table": { + "activity": { + "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" + }, + "audioContent": { + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + }, + "library": { + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + } + } + }, + "TagDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ ĪµĻ„Ī¹ĪŗĪ­Ļ„Ī±Ļ‚;" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±" + }, + "link": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "albumArtist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·", + "edits": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪµĻ‚" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„ĪæĻ… ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ;" + } + }, + "table": { + "activity": { + "favorited": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "track": { + "copyright": "Ī Ī½ĪµĻ…Ī¼Ī±Ļ„Ī¹ĪŗĪ¬ Ī”Ī¹ĪŗĪ±Ī¹ĻŽĪ¼Ī±Ļ„Ī±", + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", + "discNumber": "Ī‘ĻĪ¹ĪøĪ¼ĻŒĻ‚ Ī“ĪÆĻƒĪŗĪæĻ…" + }, + "trackData": { + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + } + } + }, + "UploadDetail": { + "button": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "download": "Ī›Ī®ĻˆĪ·" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "account": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒĻ‚", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ī¼ĪµĻ„Ī±Ļ†ĻŒĻĻ„Ļ‰ĻƒĪ·Ļ‚;" + } + }, + "table": { + "activity": { + "accessedDate": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ± Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·Ļ‚" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate" + }, + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·", + "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ®Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ" + }, + "header": { + "accountData": "Ī£Ļ„ĪæĪ¹Ļ‡ĪµĪÆĪ± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ", + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±", + "domain": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·" + }, + "table": { + "accountData": { + "displayName": "Ī•Ī¼Ļ†Ī±Ī½Ī¹Ī¶ĻŒĪ¼ĪµĪ½Īæ ĻŒĪ½ĪæĪ¼Ī±", + "email": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· Email", + "loginStatus": { + "disabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", + "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ" + }, + "username": "Ī ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī±" + }, + "audioContent": { + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + } + }, + "tooltip": { + "uploadQuota": "ĪšĪ±ĪøĪæĻĪÆĻƒĻ„Īµ Ļ€ĻŒĻƒĪæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ī±Ī½ĪµĪ²Ī¬ĻƒĪµĪ¹ Īæ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚. Ī‘Ļ†Ī®ĻƒĻ„Īµ Ļ„Īæ ĪŗĪµĪ½ĻŒ Ī³Ī¹Ī± Ī½Ī± Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹Ī·ĪøĪµĪÆ Ī· Ļ€ĻĪæĪŗĪ±ĪøĪæĻĪ¹ĻƒĪ¼Ī­Ī½Ī· Ļ„Ī¹Ī¼Ī®." + } + }, + "Base": { + "link": { + "accounts": "Ī›ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĪÆ", + "domains": "Ī”Ī¹ĪµĻ…ĪøĻĪ½ĻƒĪµĪ¹Ļ‚" + } + }, + "DomainsDetail": { + "button": { + "addPolicy": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ®Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ½Ī¹ĻƒĪ¼ĪæĻ", + "addToAllowList": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± ĪµĻ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½" + }, + "header": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±", + "audioContent": "Ī ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ī®Ļ‡ĪæĻ…" + }, + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" + }, + "table": { + "audioContent": { + "cachedSize": "ĪœĪ­Ī³ĪµĪøĪæĻ‚ ĻƒĻ„Ī·Ī½ Ļ€ĻĪæĻƒĻ‰ĻĪ¹Ī½Ī® Ī¼Ī½Ī®Ī¼Ī·" + } + } + }, + "DomainsList": { + "button": { + "add": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ·" + }, + "header": { + "domains": "Ī”Ī¹ĪµĻ…ĪøĻĪ½ĻƒĪµĪ¹Ļ‚", + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī± ĪŗĪ±Ļ„Ī¬ Ļ„Ī· Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚" + }, + "label": { + "addDomain": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚", + "addToAllowList": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĻƒĻ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± ĪµĻ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½" + }, + "title": "Ī”Ī¹ĪµĻ…ĪøĻĪ½ĻƒĪµĪ¹Ļ‚" + }, + "ReportsList": { + "option": { + "status": { + "all": "ĪŒĪ»Ī±" + } + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + } + }, + "RequestsList": { + "option": { + "status": { + "all": "ĪŒĪ»Ī±", + "approved": "EĪ³ĪŗĻĪÆĪøĪ·ĪŗĪµ" + } + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + } + } + } + }, + "auth": { + "EmailConfirm": { + "header": { + "failure": "Ī”ĪµĪ½ Ī¼Ļ€ĪæĻĪ­ĻƒĪ±Ī¼Īµ Ī½Ī± ĪµĻ€Ī¹Ī²ĪµĪ²Ī±Ī¹ĻŽĻƒĪæĻ…Ī¼Īµ Ļ„Ī·Ī½ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĻƒĪ±Ļ‚", + "success": "Ī— Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail ĪµĻ€Ī¹Ī²ĪµĪ²Ī±Ī¹ĻŽĪøĪ·ĪŗĪµ" + }, + "label": { + "confirmationCode": "ĪšĻ‰Ī“Ī¹ĪŗĻŒĻ‚ ĪµĻ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ·Ļ‚" + }, + "title": "Ī•Ļ€Ī¹Ī²ĪµĪ²Ī±ĪÆĻ‰ĻƒĪ· Ļ„Ī·Ļ‚ Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ·Ļ‚ e-mail ĻƒĪ±Ļ‚" + }, + "PasswordReset": { + "button": { + "requestReset": "Ī•Ļ€Ī±Ī½Ī±Ļ†ĪæĻĪ¬ ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ" + }, + "label": { + "email": "Ī”Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" + }, + "link": { + "back": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī·Ī½ ĻƒĻĪ½Ī“ĪµĻƒĪ·" + } + }, + "PasswordResetConfirm": { + "link": { + "back": "Ī ĪÆĻƒĻ‰ ĻƒĻ„Ī·Ī½ ĻƒĻĪ½Ī“ĪµĻƒĪ·" + }, + "message": { + "requestSent": "Ī•Ī¬Ī½ Ī· Ī“Ī¹ĪµĻĪøĻ…Ī½ĻƒĪ· e-mail Ļ€ĪæĻ… Ī“ĻŒĪøĪ·ĪŗĪµ ĻƒĻ„Īæ Ļ€ĻĪæĪ·Ī³ĪæĻĪ¼ĪµĪ½Īæ Ī²Ī®Ī¼Ī± ĪµĪÆĪ½Ī±Ī¹ Ī­Ī³ĪŗĻ…ĻĪ· ĪŗĪ±Ī¹ ĻƒĻ…Ī½Ī“ĪµĪ“ĪµĪ¼Ī­Ī½Ī· Ī¼Īµ Ī­Ī½Ī± Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ Ļ‡ĻĪ®ĻƒĻ„Ī·, ĪøĪ± Ļ€ĻĪ­Ļ€ĪµĪ¹ Ī½Ī± Ļ€Ī±ĻĪ±Ī»Ī¬Ī²ĪµĻ„Īµ Ī­Ī½Ī± e-mail Ī¼Īµ ĪæĪ“Ī·Ī³ĪÆĪµĻ‚ ĪµĻ€Ī±Ī½Ī±Ļ†ĪæĻĪ¬Ļ‚ ĻƒĻ„Ī± ĪµĻ€ĻŒĪ¼ĪµĪ½Ī± Ī»ĪµĻ€Ļ„Ī¬." + }, + "title": "Ī‘Ī»Ī»Ī±Ī³Ī® ĪŗĻ‰Ī“Ī¹ĪŗĪæĻ" + }, + "ProfileBase": { + "link": { + "activity": "Ī”ĻĪ±ĻƒĻ„Ī·ĻĪ¹ĻŒĻ„Ī·Ļ„Ī±" + }, + "title": "Ļ€ĻĪæĻ†ĪÆĪ» Ļ„ĪæĻ… { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "createChannel": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" + }, + "header": { + "channels": "ĪšĪ±Ī½Ī¬Ī»Ī¹Ī±" + }, + "link": { + "addNew": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī½Ī­ĪæĻ…" + }, + "modal": { + "createChannel": { + "artist": { + "header": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" + }, + "header": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ" + } + } + }, + "Signup": { + "header": { + "createAccount": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Funkwhale Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĪæĻ" + } + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®ā€¦", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±ā€¦", + "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ·" + }, + "header": { + "artistChannel": "ĪšĪ±Ī½Ī¬Ī»Ī¹ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·" + }, + "link": { + "channelEpisodes": "ĪŒĪ»Ī± Ļ„Ī± Ī•Ļ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±" + }, + "meta": { + "episodes": "{ n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Īæ | { n } ĪµĻ€ĪµĪ¹ĻƒĻŒĪ“Ī¹Ī±", + "listenings": "{ n } Ī±ĪŗĻĻŒĪ±ĻƒĪ· | { n } Ī±ĪŗĻĪæĪ¬ĻƒĪµĪ¹Ļ‚", + "subscribers": "{ n } ĪµĪ³Ī³ĪµĪ³ĻĪ±Ī¼Ī¼Ī­Ī½ĪæĻ‚ | { n } ĪµĪ³Ī³ĪµĪ³ĻĪ±Ī¼Ī¼Ī­Ī½ĪæĪ¹", + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī· Ļ„ĪæĻ… ĪŗĪ±Ī½Ī±Ī»Ī¹ĪæĻ;" + }, + "embed": { + "header": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· Ļ„ĪæĻ… ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī· ĻƒĻ„Ī·Ī½ Ī¹ĻƒĻ„ĪæĻƒĪµĪ»ĪÆĪ“Ī± ĻƒĪ±Ļ‚" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Ī•Ī¬Ī½ Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹ĪµĪÆĻ„Īµ Ļ„Īæ Mastodon Ī® Ī¬Ī»Ī»ĪµĻ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ļ„ĪæĻ… fediverse, Ī¼Ļ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± Ī³ĪÆĪ½ĪµĻ„Īµ ĻƒĻ…Ī½Ī“ĻĪæĪ¼Ī·Ļ„Ī­Ļ‚ ĻƒĪµ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„Īæ Ī»ĪæĪ³Ī±ĻĪ¹Ī±ĻƒĪ¼ĻŒ:" + } + }, + "rss": { + "content": { + "help": "Ī‘Ī½Ļ„Ī¹Ī³ĻĪ¬ĻˆĻ„Īµ ĪŗĪ±Ī¹ ĪµĻ€Ī¹ĪŗĪæĪ»Ī»Ī®ĻƒĻ„Īµ Ļ„ĪæĪ½ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæ ĻƒĻĪ½Ī“ĪµĻƒĪ¼Īæ ĻƒĻ„Īæ Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Īæ ĻƒĪ±Ļ‚ podcatcher:" + } + } + } + }, + "title": "ĪšĪ±Ī½Ī¬Ī»Ī¹" + }, + "DetailOverview": { + "header": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼" + }, + "link": { + "addAlbum": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī½Ī­ĪæĻ…" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·" + }, + "link": { + "addNew": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ī½Ī­ĪæĻ…" + } + } + }, + "content": { + "Base": { + "title": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" + }, + "Home": { + "button": { + "start": "ĪžĪµĪŗĪ¹Ī½Ī®ĻƒĻ„Īµ" + }, + "description": { + "channel": { + "1": "Ī•Ī¬Ī½ ĪµĪÆĻƒĪ±Ī¹ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĻŒĻ‚ Ī® podcaster, Ļ„Ī± ĪŗĪ±Ī½Ī¬Ī»Ī¹Ī± ĻƒĻ‡ĪµĪ“Ī¹Ī¬ĻƒĻ„Ī·ĪŗĪ±Ī½ Ī³Ī¹Ī± 'ĻƒĪ­Ī½Ī±!" + }, + "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚ Ī±Ļ€ĻŒ Ī¬Ī»Ī»ĪæĻ…Ļ‚ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚ Ī³Ī¹Ī± Ī½Ī± Ī±Ļ€ĪæĪŗĻ„Ī®ĻƒĪµĪ¹Ļ‚ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĪµ Ī½Ī­Ī± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®. ĪŸĪ¹ Ī“Ī·Ī¼ĻŒĻƒĪ¹ĪµĻ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚ Ī¼Ļ€ĪæĻĪæĻĪ½ Ī½Ī± Ī±ĪŗĪæĪ»ĪæĻ…ĪøĪ·ĪøĪæĻĪ½ Ī¬Ī¼ĪµĻƒĪ±, ĪµĪ½ĻŽ ĻƒĪµ Ī¹Ī“Ī¹Ļ‰Ļ„Ī¹ĪŗĪ­Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚ Ī±Ļ€Ī±Ī¹Ļ„ĪµĪÆĻ„Ī±Ī¹ Ī­Ī³ĪŗĻĪ¹ĻƒĪ· Ī±Ļ€ĻŒ Ļ„ĪæĪ½ Ī¹Ī“Ī¹ĪæĪŗĻ„Ī®Ļ„Ī· Ļ„Ī·Ļ‚." + }, + "header": { + "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½ĪµĻ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪµĻ‚" + }, + "title": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪ±Ī¹ Ī“Ī¹Ī±Ļ‡ĪµĪÆĻĪ¹ĻƒĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ…" + }, + "libraries": { + "Card": { + "meta": { + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + } + }, + "FilesTable": { + "action": { + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "option": { + "status": { + "all": "ĪŒĪ»Ī±", + "draft": "Ī ĻĪæĻƒĻ‡Ī­Ī“Ī¹Īæ" + } + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "table": { + "file": { + "header": { + "album": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artist": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±" + } + } + } + }, + "Form": { + "button": { + "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚", + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®" + }, + "header": { + "failure": "Ī£Ļ†Ī¬Ī»Ī¼Ī±" + }, + "label": { + "description": "Ī ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" + }, + "modal": { + "delete": { + "header": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ļ„Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚;" + } + } + }, + "Home": { + "link": { + "createLibrary": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī½Ī­Ī±Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" + } + }, + "Quota": { + "header": { + "currentUsage": "Ī¤ĻĪ­Ļ‡ĪæĻ…ĻƒĪ± Ļ‡ĻĪ®ĻƒĪ·" + }, + "label": { + "currentUsage": "{ current } ĻƒĪµ Ļ‡ĻĪ®ĻƒĪ· Ī±Ļ€Īæ Ļ„Ī± { max } Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī±" + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ· Ī±Ī¹Ļ„Ī®Ī¼Ī±Ļ„ĪæĻ‚ Ī±ĪŗĻŒĪ»ĪæĻ…ĪøĪæĻ…", + "follow": "Ī‘ĪŗĪæĪ»ĪæĻĪøĪ·ĻƒĪµ" + }, + "link": { + "scanDetails": "Ī›ĪµĻ€Ļ„ĪæĪ¼Ī­ĻĪµĪ¹ĪµĻ‚" + }, + "meta": { + "failedTracks": "Ī‘Ļ€ĪæĻ„Ļ…Ļ‡Ī·Ī¼Ī­Ī½Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±:", + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Ī‘Ī½ ĻƒĻ„Ī±Ī¼Ī±Ļ„Ī®ĻƒĪµĻ„Īµ Ī½Ī± Ī±ĪŗĪæĪ»ĪæĻ…ĪøĪµĪÆĻ„Īµ Ļ„Ī·Ī½ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·, ĪøĪ± ĻƒĻ„Ī±Ī¼Ī±Ļ„Ī®ĻƒĪµĻ„Īµ Ī½Ī± Ī­Ļ‡ĪµĻ„Īµ Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ· ĻƒĻ„Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ Ļ„Ī·Ļ‚." + } + } + } + }, + "ScanForm": { + "header": { + "failure": "Ī‘Ļ€ĪæĻ„Ļ…Ļ‡ĪÆĪ± Ī»Ī®ĻˆĪ·Ļ‚ Ļ„Ī·Ļ‚ Ī±Ļ€ĪæĪ¼Ī±ĪŗĻĻ…ĻƒĪ¼Ī­Ī½Ī·Ļ‚ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" + }, + "placeholder": { + "url": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻƒĻĪ½Ī“ĪµĻƒĪ¼Īæ Ī²Ī¹Ī²Ī»Ī¹ĪæĪøĪ®ĪŗĪ·Ļ‚" + } + } + } + }, + "library": { + "Edit": { + "button": { + "accept": "Ī‘Ļ€ĪæĪ“ĪæĻ‡Ī®" + }, + "header": { + "followers": "Ī‘ĪŗĻŒĪ»ĪæĻ…ĪøĪæĪ¹" + }, + "table": { + "action": { + "header": { + "action": "ĪµĪ½Ī­ĻĪ³ĪµĪ¹Ī±", + "date": "Ī—Ī¼ĪµĻĪæĪ¼Ī·Ī½ĪÆĪ±" + }, + "status": { + "accepted": "Ī‘Ļ€ĪæĪ“ĪµĪŗĻ„ĻŒ" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±" + }, + "link": { + "albums": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artists": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚" + }, + "meta": { + "tracks": "{ n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | { n } ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", + "delete": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī®", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±", + "embed": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ·" + }, + "modal": { + "delete": { + "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī“Ī¹Ī±Ī³ĻĪ¬ĻˆĪµĻ„Īµ Ļ„Ī·Ī½ Ī»ĪÆĻƒĻ„Ī± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ \"{ playlist }\";" + }, + "embed": { + "header": "Ī•Ī½ĻƒĻ‰Ī¼Ī¬Ļ„Ļ‰ĻƒĪ· Ļ„Ī·Ļ‚ Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ ĻƒĻ„Ī·Ī½ Ī¹ĻƒĻ„ĪæĻƒĪµĪ»ĪÆĪ“Ī± ĻƒĪ±Ļ‚" + } + } + }, + "List": { + "button": { + "create": "Ī”Ī·Ī¼Ī¹ĪæĻ…ĻĪ³ĪÆĪ± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "header": { + "browse": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· ĻƒĻ„Ī¹Ļ‚ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚" + }, + "ordering": { + "direction": { + "ascending": "Ī‘ĻĪ¾ĪæĻ…ĻƒĪ±", + "descending": "Ī¦ĪøĪÆĪ½ĪæĻ…ĻƒĪ±" + } + }, + "placeholder": { + "search": "Ī•Ī¹ĻƒĪ¬Ī³ĪµĻ„Īµ ĻŒĪ½ĪæĪ¼Ī± Ī»ĪÆĻƒĻ„Ī±Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ā€¦" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "Ī”Ī¹Ī±Ī³ĻĪ±Ļ†Ī® ĻĪ¬Ī“Ī¹Īæ", + "edit": "Ī•Ļ€ĪµĪ¾ĪµĻĪ³Ī±ĻƒĪÆĪ±ā€¦" + }, + "modal": { + "delete": { + "header": "Ī˜Ī­Ī»ĪµĻ„Īµ Ī½Ī± Ī“Ī¹Ī±Ī³ĻĪ¬ĻˆĪµĻ„Īµ Ļ„Īæ ĻĪ¬Ī“Ī¹Īæ \"{ radio }\";" + } + } + } + } } } From 0b78affdcd32176174cf0a50aacfce8c1c30eff5 Mon Sep 17 00:00:00 2001 From: dignny <5Dd12Ck@protonmail.com> Date: Wed, 26 Jul 2023 13:10:29 +0000 Subject: [PATCH 177/371] Translated using Weblate (Japanese) Currently translated at 91.8% (2004 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ja/ --- front/src/locales/ja_JP.json | 92 +++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 17 deletions(-) diff --git a/front/src/locales/ja_JP.json b/front/src/locales/ja_JP.json index f8b2ae8ed..e12caedbf 100644 --- a/front/src/locales/ja_JP.json +++ b/front/src/locales/ja_JP.json @@ -31,7 +31,7 @@ }, "stat": { "activeUsers": "{ count } äŗŗć®ć‚¢ć‚Æćƒ†ć‚£ćƒ–ćƒ¦ćƒ¼ć‚¶ćƒ¼", - "hoursOfMusic": "ę™‚é–“ć®éŸ³ę„½" + "hoursOfMusic": "0 ę™‚é–“åˆ†ć®éŸ³ę„½ | {n} ę™‚é–“åˆ†ć®éŸ³ę„½ | {n} ę™‚é–“åˆ†ć®éŸ³ę„½" }, "title": "ć“ć®ćƒćƒƒćƒ‰ć«ć¤ć„ć¦" }, @@ -79,7 +79,7 @@ "activeUsers": "ć‚¢ć‚Æćƒ†ć‚£ćƒ–ćƒ¦ćƒ¼ć‚¶ćƒ¼", "albumsCount": "ć‚¢ćƒ«ćƒćƒ ", "artistsCount": "ć‚¢ćƒ¼ćƒ†ć‚£ć‚¹ćƒˆ", - "hoursOfMusic": "ę™‚é–“ć®éŸ³ę„½", + "hoursOfMusic": "0 ę™‚é–“åˆ†ć®éŸ³ę„½ | {n} ę™‚é–“åˆ†ć®éŸ³ę„½ | {n} ę™‚é–“åˆ†ć®éŸ³ę„½", "listeningsCount": "再ē”Ÿ", "tracksCount": "ę›²" }, @@ -130,7 +130,7 @@ }, "stat": { "activeUsers": "{ count } äŗŗć®ć‚¢ć‚Æćƒ†ć‚£ćƒ–ćƒ¦ćƒ¼ć‚¶ćƒ¼", - "hoursOfMusic": "{ count } ę™‚é–“åˆ†ć®éŸ³ę„½" + "hoursOfMusic": "0 ę™‚é–“åˆ†ć®éŸ³ę„½ | {n} ę™‚é–“åˆ†ć®éŸ³ę„½ | {n} ę™‚é–“åˆ†ć®éŸ³ę„½" }, "title": "ćƒ›ćƒ¼ćƒ " }, @@ -154,21 +154,30 @@ }, "header": { "failure": "ę›²ć‚’čŖ­ćæč¾¼ć‚€ć“ćØćŒć§ćć¾ć›ć‚“ć§ć—ćŸ", + "noSources": "ć“ć®ę›²ć«ćÆ利ē”ØåÆčƒ½ćŖęƒ…å ±ćŒć‚ć‚Šć¾ć›ć‚“ć€‚", "radio": "惩ć‚øć‚Ŗć‚’å†ē”Ÿäø­ć§ć™" }, "label": { "addArtistContentFilter": "ć“ć®ć‚¢ćƒ¼ćƒ†ć‚£ć‚¹ćƒˆć®ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’éš ć™ā€¦", "duration": "再ē”Ÿę™‚é–“", + "enterFullscreen": "ćƒ•ćƒ«ć‚¹ć‚ÆćƒŖćƒ¼ćƒ³ćƒ¢ćƒ¼ćƒ‰ć«ć™ć‚‹", + "exitFullscreen": "ćƒ•ćƒ«ć‚¹ć‚ÆćƒŖćƒ¼ćƒ³ćƒ¢ćƒ¼ćƒ‰ć‹ć‚‰é›¢ć‚Œć‚‹", + "favorite": "ę›²ć‚’ćŠę°—ć«å…„ć‚Šć«ć™ć‚‹", "next": "ę¬”ć®ę›²", "pause": "åœę­¢ć™ć‚‹", "play": "再ē”Ÿ", + "populatingRadio": "惩ć‚øć‚Ŗć®ę›²ć‚’å–å¾—ć—ć¦ć„ć¾ć™...", "previous": "å‰ć®ę›²", "queue": "再ē”Ÿć‚­ćƒ„ćƒ¼", - "remove": "除恏" + "remove": "除恏", + "restart": "ę›²ć®å†ē”Ÿć‚’再開", + "selectTrack": "ę›²ć‚’éø恶", + "showCoverArt": "ć‚«ćƒćƒ¼ć‚¢ćƒ¼ćƒˆć‚’č”Øē¤ŗ" }, "message": { "automaticPlay": "ę¬”ć®ę›²ć‚’ę•°ē§’ä»„å†…ć«č‡Ŗ動ēš„ć«å†ē”Ÿć—ć¾ć™ā€¦", - "radio": "ę–°ć—ć„ę›²ćÆč‡Ŗ動ēš„恫čæ½åŠ ć•ć‚Œć¾ć™ć€‚" + "radio": "ę–°ć—ć„ę›²ćÆč‡Ŗ動ēš„恫čæ½åŠ ć•ć‚Œć¾ć™ć€‚", + "webglUnsupported": "恂ćŖćŸć®ćƒ–ćƒ©ć‚¦ć‚¶ćƒ¼ćÆWebGL2ć‚’ć‚µćƒćƒ¼ćƒˆć—ć¦ć„ćŖ恄悈恆恧恙怂" }, "meta": { "queuePosition": "{ length } ę›²äø­ { index } ę›²ē›®", @@ -190,8 +199,11 @@ "fediverse": "ć“ć®ćƒ•ć‚©ćƒ¼ćƒ ć‚’åˆ©ē”Ø恗恦态Fediverseć®ć©ć“ć‹ć§ćƒ›ć‚¹ćƒˆć•ć‚Œć¦ć„ć‚‹ćƒćƒ£ćƒ³ćƒćƒ«ć‚’č³¼čŖ­ć—ć¾ć—ć‚‡ć†ć€‚", "rss": "ć“ć®ćƒ•ć‚©ćƒ¼ćƒ ć‚’åˆ©ē”Ø恗恦态URL恋悉RSSćƒ•ć‚£ćƒ¼ćƒ‰ć‚’č³¼čŖ­ć—ć¾ć—ć‚‡ć†ć€‚" }, + "error": { + "fetchFailed": "恓恮ć‚Ŗ惖ć‚ø悧ć‚Æ惈悒čŖ­ćæč¾¼ć‚€ć“ćØćŒć§ćć¾ć›ć‚“" + }, "header": { - "fetchFailed": "ć‚Ŗ惖ć‚ø悧ć‚Æ惈悒惕悧惃惁äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ" + "fetchFailed": "ć‚Ŗ惖ć‚ø悧ć‚Æćƒˆć‚’å–å¾—äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ" }, "label": { "fediverse": { @@ -296,6 +308,7 @@ "radios": "惩ć‚øć‚Ŗ", "search": "ꤜē“¢ć™ć‚‹", "settings": "čح定", + "switchInstance": "ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’åˆ‡ć‚Šę›æ恈悋", "users": "ćƒ¦ćƒ¼ć‚¶ćƒ¼" } }, @@ -365,6 +378,10 @@ "header": { "error": "ćƒćƒ£ćƒ³ćƒćƒ«ć®äæå­˜äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸć€‚" }, + "help": { + "discography": "恂ćŖćŸćŒä½œęˆć—ćŸéŸ³ę„½ć‚’ęŠ•ēØæć—ć¾ć™ć€‚ć‚¢ćƒ«ćƒćƒ ćØć‚·ćƒ³ć‚°ćƒ«ć®é­…åŠ›ēš„ćŖćƒ‡ć‚£ć‚¹ć‚³ć‚°ćƒ©ćƒ•ć‚£ćƒ¼ćØ恗恦怂", + "podcast": "恂ćŖćŸć®ć‚Øćƒ”ć‚½ćƒ¼ćƒ‰ć‚’ćƒ›ć‚¹ćƒˆć—ć€ć‚³ćƒŸćƒ„ćƒ‹ćƒ†ć‚£ć«ęœ€ę–°ęƒ…å ±ć‚’ęä¾›ć—ć¾ć—ć‚‡ć†ć€‚" + }, "label": { "category": "ć‚«ćƒ†ć‚“ćƒŖ", "description": "čŖ¬ę˜Ž", @@ -484,6 +501,14 @@ "unknownArtist": "äøę˜ŽćŖć‚¢ćƒ¼ćƒ†ć‚£ć‚¹ćƒˆ" } }, + "PlayerControls": { + "labels": { + "next": "ę¬”ć®ę›²", + "pause": "åœę­¢", + "play": "再ē”Ÿ", + "previous": "å‰ć®ę›²" + } + }, "Search": { "empty": { "noAlbums": "å…„åŠ›ć—ćŸå†…å®¹ć«ćƒžćƒƒćƒć™ć‚‹ć‚¢ćƒ«ćƒćƒ ćÆć‚ć‚Šć¾ć›ć‚“", @@ -655,6 +680,9 @@ "header": { "failure": "å¤‰ę›“ć‚’äæå­˜ć§ćć¾ć›ć‚“" }, + "help": { + "redirectUri": "悂恗恂ćŖćŸć®ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć‚’WebäøŠć§åˆ©ē”Ø恧恍ćŖć„å “åˆć€\"urn:ietf:wg:oauth:2.0:oob\"悒ćƒŖćƒ€ć‚¤ćƒ¬ć‚Æ惈URIćØć—ć¦åˆ©ē”Øć—ć¦ćć ć•ć„" + }, "label": { "name": "名前", "redirectUri": "ćƒŖćƒ€ć‚¤ćƒ¬ć‚Æ惈URL", @@ -686,8 +714,8 @@ "access": "{ app } 恌恂ćŖćŸć®Funkwhaleć‚¢ć‚«ć‚¦ćƒ³ćƒˆćøć®ć‚¢ć‚Æć‚»ć‚¹ć‚’č¦ę±‚ć—ć¦ć„ć¾ć™", "allScopes": "ćƒ•ćƒ«ć‚¢ć‚Æć‚»ć‚¹", "authorize": "ć‚µćƒ¼ćƒ‰ćƒ‘ćƒ¼ćƒ†ć‚£ć‚¢ćƒ—ćƒŖ悒čŖčؼ", - "authorizeFailure": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®čŖčؼäø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", - "fetchFailure": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®ćƒ‡ćƒ¼ć‚æ悒惕悧惃惁äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", + "authorizeFailure": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćƒ‡ćƒ¼ć‚æć‚’å–å¾—äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", + "fetchFailure": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćƒ‡ćƒ¼ć‚æć‚’å–å¾—äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", "readOnly": "čŖ­č¾¼å°‚ē”Ø", "writeOnly": "ę›øćč¾¼ćæ専ē”Ø" }, @@ -1020,6 +1048,7 @@ "label": { "description": "čŖ¬ę˜Ž", "image": "ę›²ē”»åƒ", + "position": "惈惩惃ć‚ÆćƒŠćƒ³ćƒćƒ¼", "tags": "ć‚æ悰", "title": "ę›²å" } @@ -1271,10 +1300,13 @@ }, "description": { "failure": "ćƒ‡ćƒ¼ć‚æ恮ꛓꖰäø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ:", + "pending": "ꛓꖰćƒŖć‚Æć‚Øć‚¹ćƒˆćŒć“ć®ć‚µćƒ¼ćƒćƒ¼ć§ćÆę™‚é–“å†…ć«å‡¦ē†ć•ć‚Œć¾ć›ć‚“ć§ć—ćŸć€‚å¾Œć»ć©å‡¦ē†ć•ć‚Œć¾ć™ć€‚", + "skipped": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰åæœē­”ćÆć‚ć‚Šć¾ć—ćŸćŒć€čæ”ć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æćÆFunkwhale恧ćÆć‚µćƒćƒ¼ćƒˆć•ć‚Œć¦ć„ć¾ć›ć‚“ć€‚", "success": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰ć®ćƒ‡ćƒ¼ć‚æćŒę­£åøøć«ę›“ę–°ć•ć‚Œć¾ć—ćŸć€‚" }, "header": { "failure": "ꛓꖰć‚Øćƒ©ćƒ¼", + "pending": "ꛓꖰäæē•™äø­", "refresh": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰ć®ć‚Ŗ惖ć‚ø悧ć‚Æćƒˆć‚’ę›“ę–°äø­ā€¦", "saveFailure": "čØ­å®šć®äæå­˜äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", "skipped": "ę›“ę–°ćŒć‚¹ć‚­ćƒƒćƒ—ć•ć‚Œć¾ć—ćŸ", @@ -1282,7 +1314,7 @@ }, "loader": { "awaitingResult": "ćƒ•ć‚§ćƒƒćƒć®ēµęžœć‚’å¾…ć£ć¦ć„ć¾ć™ā€¦", - "fetchRequest": "惕悧惃惁悒ćƒŖć‚Æć‚Øć‚¹ćƒˆć™ć‚‹ā€¦" + "fetchRequest": "惕悧惃惁悒ćƒŖć‚Æć‚Øć‚¹ćƒˆć—ć¦ć„ć¾ć™ā€¦" }, "table": { "error": { @@ -1293,8 +1325,10 @@ "value": { "connectionError": "ćƒŖćƒ¢ćƒ¼ćƒˆć®ć‚µćƒ¼ćƒćƒ¼ć«ęŽ„ē¶šć§ćć¾ć›ć‚“", "httpError": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ćØ恮通äæ”äø­ć«HTTPć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", - "invalidAttributesError": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰čæ”ć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æ恫ē„”効ćŖå±žę€§ćŒć‚ć‚‹ć‹ć€å±žę€§ćŒć‚ć‚Šć¾ć›ć‚“", + "httpStatus": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ćŒ HTTP {status} 悒čæ”ć—ć¾ć—ćŸ", + "invalidAttributesError": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰čæ”ć•ć‚ŒćŸćƒ‡ćƒ¼ć‚æ恫ē„”効ćŖå±žę€§ćŒć‚ć‚‹ć‹ć€å±žę€§č‡Ŗä½“ćŒć‚ć‚Šć¾ć›ć‚“", "invalidJsonError": "ćƒŖćƒ¢ćƒ¼ćƒˆć®ć‚µćƒ¼ćƒćƒ¼ćŒē„”効ćŖJSONć¾ćŸćÆJSON-LDćƒ‡ćƒ¼ć‚æ悒čæ”ć—ć¾ć—ćŸ", + "timeoutError": "ćƒŖćƒ¢ćƒ¼ćƒˆć‚µćƒ¼ćƒćƒ¼ćŒååˆ†ćŖć‚¹ćƒ”ćƒ¼ćƒ‰ć§åæœē­”ć—ć¾ć›ć‚“ć§ć—ćŸ", "unknownError": "äøę˜ŽćŖć‚Øćƒ©ćƒ¼" } } @@ -1505,7 +1539,13 @@ "header": { "modification": "äæ®ę­£ { id }" }, + "link": { + "track": "ę›² #{id} - {name}" + }, "modal": { + "content": { + "warning": "ć“ć®ęę”ˆćÆ完å…Øć«å‰Šé™¤ć•ć‚Œć€ć“ć®å‰Šé™¤ć‚¢ć‚Æć‚·ćƒ§ćƒ³ć‚’å–ć‚Šę¶ˆć™ć“ćØćÆć§ćć¾ć›ć‚“ć€‚" + }, "delete": { "header": "ć“ć®ęę”ˆć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" } @@ -1519,7 +1559,9 @@ "table": { "update": { "header": { - "field": "ćƒ•ć‚£ćƒ¼ćƒ«ćƒ‰" + "field": "ćƒ•ć‚£ćƒ¼ćƒ«ćƒ‰", + "newValue": "ę–°ć—ć„å€¤", + "oldValue": "å¤ć„å€¤" }, "notApplicable": "N/A" } @@ -1529,21 +1571,25 @@ "button": { "cancel": "ć‚­ćƒ£ćƒ³ć‚»ćƒ«", "clear": "ć‚ÆćƒŖć‚¢", + "new": "åˆ„ć®ē·Øé›†ć‚’ęę”ˆ", "reset": "åˆęœŸå€¤ć«ćƒŖć‚»ćƒƒćƒˆ", + "showAll": "ć™ć¹ć¦ć®ē·Ø集悒č”Øē¤ŗ", "suggest": "ęę”ˆć‚’ęå‡ŗ" }, "empty": { "suggestEdit": "äø‹čØ˜ć®ćƒ•ć‚©ćƒ¼ćƒ ć‚’åˆ©ē”Øć—ć¦å¤‰ę›“ć‚’ęę”ˆć™ć‚‹" }, "header": { + "failure": "ē·Øé›†ć®ęå‡ŗäø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ", "recentEdits": "꜀čæ‘恮ē·Ø集", + "success": "恂ćŖćŸć®ē·Ø集ćÆē„”äŗ‹ć«ęå‡ŗć•ć‚Œć¾ć—ćŸć€‚", "unreviewed": "惁悧惃ć‚Æå¾…ć”ć®ęœ€čæ‘恮ē·Ø集" }, "label": { "summary": "ꦂ要ļ¼ˆć‚Ŗćƒ—ć‚·ćƒ§ćƒ³ļ¼‰" }, "message": { - "noPermission": "恂ćŖćŸć«ćÆ恓恮ć‚Ŗ惖ć‚ø悧ć‚Æ惈悒ē·Ø集恙悋ęة限ćÆć‚ć‚Šć¾ć›ć‚“ćŒć€å¤‰ę›“ć‚’ęę”ˆć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚äø€åŗ¦ęę”ˆć™ć‚‹ćØ态čŖć‚ć‚‰ć‚Œć‚‹å‰ć«ćć®ęę”ˆćÆćƒ¬ćƒ“ćƒ„ćƒ¼ć•ć‚Œć¾ć™ć€‚" + "noPermission": "恂ćŖćŸć«ćÆ恓恮ć‚Ŗ惖ć‚ø悧ć‚Æ惈悒ē·Ø集恙悋ęة限ćÆć‚ć‚Šć¾ć›ć‚“ćŒć€å¤‰ę›“ć‚’ęę”ˆć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚äø€åŗ¦ęę”ˆć™ć‚‹ćØ态ę‰æčŖć•ć‚Œć‚‹å‰ć«ćć®ęę”ˆćÆćƒ¬ćƒ“ćƒ„ćƒ¼ć•ć‚Œć¾ć™ć€‚" }, "notApplicable": "N/A", "placeholder": { @@ -1810,7 +1856,8 @@ }, "TrackEdit": { "header": { - "edit": "ć“ć®ę›²ć‚’ē·Ø集恙悋" + "edit": "ć“ć®ę›²ć‚’ē·Ø集恙悋", + "suggest": "ć“ć®ć‚¢ćƒ«ćƒćƒ ć«ć¤ć„ć¦ć®ē·Øé›†ć‚’ęę”ˆ" }, "message": { "remote": " 恓恮ć‚Ŗ惖ć‚ø悧ć‚Æ惈ćÆåˆ„ć®ć‚µćƒ¼ćƒćƒ¼ć§ē®”ē†ć•ć‚Œć¦ćŠć‚Šć€ć‚ćŖ恟ćÆ恓悌悒ē·Øé›†ć§ćć¾ć›ć‚“ć€‚" @@ -2548,7 +2595,7 @@ "modal": "ć“ć®ćƒ•ć‚©ćƒ¼ćƒ ć‚’åˆ©ē”Øć—ć¦ćƒ¢ćƒ‡ćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ćƒćƒ¼ćƒ ć«é€šå ±ć®å±Šć‘å‡ŗć‚’ć—ć¦ćć ć•ć„" }, "error": { - "nodeinfoFetch": "ćƒŽćƒ¼ćƒ‰ć®ęƒ…å ±ć‚’ćƒ•ć‚§ćƒƒćƒć§ćć¾ć›ć‚“ć§ć—ćŸ: {error}" + "nodeinfoFetch": "Node infoć‚’å–å¾—ć§ćć¾ć›ć‚“ć§ć—ćŸ: {error}" }, "header": { "disabled": "åŒæåć§ć®é€šå ±ćÆē„”効ćØćŖć£ć¦ć„ć¾ć™ć€‚ćƒ­ć‚°ć‚¤ćƒ³ć—ć¦é€šå ±ć‚’ęå‡ŗć—ć¦ćć ć•ć„ć€‚", @@ -2802,9 +2849,11 @@ }, "scopes": { "edits": { + "description": "ē·Ø集ćøć®ć‚¢ć‚Æć‚»ć‚¹", "label": "ē·Ø集" }, "favorites": { + "description": "ćŠę°—ć«å…„ć‚Šćøć®ć‚¢ć‚Æć‚»ć‚¹", "label": "ćŠę°—ć«å…„ć‚Š" }, "filters": { @@ -2871,6 +2920,7 @@ "track": { "copyright": "ć‚³ćƒ”ćƒ¼ćƒ©ć‚¤ćƒˆ", "license": "ćƒ©ć‚¤ć‚»ćƒ³ć‚¹", + "position": "惈惩惃ć‚ÆćƒŠćƒ³ćƒćƒ¼", "title": "ę›²å" } }, @@ -2944,6 +2994,7 @@ "copyright": "ć‚³ćƒ”ćƒ¼ćƒ©ć‚¤ćƒˆ", "label": "ę›²", "license": "ćƒ©ć‚¤ć‚»ćƒ³ć‚¹", + "position": "惈惩惃ć‚ÆćƒŠćƒ³ćƒćƒ¼", "title": "ę›²å" }, "visibility": { @@ -2963,7 +3014,9 @@ }, "init": { "sentry": { - "funkwhaleInstance": "Funkwhaleć®å…¬å¼Glitchtipć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹" + "allow": "čرåÆ", + "funkwhaleInstance": "Funkwhaleć®å…¬å¼Glitchtipć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹", + "title": "ē§ćŸć”ć®ć‚µćƒ¼ćƒ“ć‚¹ć®č³Ŗć‚’é«˜ć‚ć‚‹ćŸć‚ć€ć‚ćŖćŸć®ć‚»ćƒƒć‚·ćƒ§ćƒ³äø­ć®ć‚Æćƒ©ćƒƒć‚·ćƒ„ć«é–¢ć™ć‚‹ęƒ…å ±ć‚’é›†ć‚ćŸć„ć€‚" }, "serviceWorker": { "actions": { @@ -2999,6 +3052,9 @@ "loading": { "notifications": "通ēŸ„悒čŖ­ćæč¾¼ć‚“ć§ć„ć¾ć™ā€¦" }, + "message": { + "funkwhaleSupport": "ć©ć†ć‚„ć‚‰ć€ć“ć®ć‚µćƒ¼ćƒćƒ¼ć«äø€å®šęœŸé–“ć„ć‚‰ć£ć—ć‚ƒć‚‹ć‚ˆć†ć§ć™ć­ć€‚ć‚‚ć—Funkwhale恌恂ćŖćŸć®ćŠå½¹ć«ē«‹ć¤ć®ć§ć‚ć‚Œć°ć€Funkwhale悒悈悊č‰Æć„ć‚‚ć®ć«ć™ć‚‹ćŸć‚ć«ć‚ćŖćŸć®åŠ©ć‘ćŒåæ…要恧恙ļ¼" + }, "option": { "delay": { "30": "30ę—„", @@ -3341,6 +3397,7 @@ "description": "čŖ¬ę˜Ž", "discNumber": "ćƒ‡ć‚£ć‚¹ć‚Æē•Ŗ号", "license": "ćƒ©ć‚¤ć‚»ćƒ³ć‚¹", + "position": "惈惩惃ć‚ÆćƒŠćƒ³ćƒćƒ¼", "title": "ę›²å" }, "trackData": { @@ -4054,6 +4111,7 @@ "remoteLibraries": "ćƒŖćƒ¢ćƒ¼ćƒˆć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆ态Funkwhale惍惃惈ćƒÆćƒ¼ć‚ÆäøŠć®ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒę‰€ęœ‰ć—ć¦ć„ć¾ć™ć€‚ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćŒå…¬é–‹ć•ć‚Œć¦ć„ć‚‹ć€ć¾ćŸćÆćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćøć®ć‚¢ć‚Æć‚»ć‚¹ęØ©ć‚’å¾—ć¦ć„ć‚‹é™ć‚ŠćÆć€ć‚¢ć‚Æć‚»ć‚¹ć§ćć¾ć™ć€‚" }, "header": { + "knownLibraries": "ę—¢ēŸ„ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ", "remoteLibraries": "ćƒŖćƒ¢ćƒ¼ćƒˆć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ" }, "loading": { @@ -4129,7 +4187,7 @@ "upload": "ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰" }, "description": { - "sharingLink": "仄äø‹ć®ćƒŖćƒ³ć‚Æć‚’ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćØć‚·ć‚§ć‚¢ć—ć¦ćæć¾ć—ć‚‡ć†ć€‚ćć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒå±žć™ć‚‹ćƒćƒƒćƒ‰ć®ę¤œē“¢ćƒćƒ¼ć«ä»„äø‹ć®ćƒŖćƒ³ć‚Æć‚’ć‚³ćƒ”ćƒ¼ļ¼†ćƒšćƒ¼ć‚¹ćƒˆć™ć‚‹ć“ćØć§ć€ć“ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć«ć‚¢ć‚Æć‚»ć‚¹ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚" + "sharingLink": "仄äø‹ć®ćƒŖćƒ³ć‚Æć‚’ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćØć‚·ć‚§ć‚¢ć—ć¦ćæć¾ć—ć‚‡ć†ć€‚ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒå±žć™ć‚‹ćƒćƒƒćƒ‰ć®ę¤œē“¢ćƒćƒ¼ć«ä»„äø‹ć®ćƒŖćƒ³ć‚Æć‚’ć‚³ćƒ”ćƒ¼ļ¼†ćƒšćƒ¼ć‚¹ćƒˆć™ć‚‹ć“ćØć§ć€ć“ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć«ć‚¢ć‚Æć‚»ć‚¹ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚" }, "label": { "private": "ćƒ—ćƒ©ć‚¤ćƒ™ćƒ¼ćƒˆ", @@ -4141,7 +4199,7 @@ "artists": "ć‚¢ćƒ¼ćƒ†ć‚£ć‚¹ćƒˆ", "domain": "{ domain }恧聞恏", "moderation": "ćƒ¢ćƒ‡ćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ē”»é¢ć§é–‹ć", - "owner": "{ username }ćŒę‰€ęœ‰ć—ć¦ć„ć¾ć™", + "owner": "{ username }恌ꉀ꜉", "tracks": "ę›²äø€č¦§" }, "meta": { From 630ba7262a8f722ed507c8e5f6df6fab8e1bd408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Azn=C3=B6rth=20Niryn?= <nathanael.barentin@disroot.org> Date: Thu, 10 Aug 2023 09:43:28 +0000 Subject: [PATCH 178/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index bb05f092d..ce64ed378 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -5,9 +5,9 @@ "components": { "About": { "description": { - "findApp": "Utiliser Funkwhale sur d'autres terminaux avec nos applications.", + "findApp": "Utiliser Funkwhale sur d'autres appareils avec nos applications.", "funkwhale": "Funkwhale est un projet communautaire qui vous permet d'Ć©couter et de partager de la musique et des fichiers audio au sein d'un rĆ©seau ouvert et dĆ©centralisĆ©.", - "publicContent": "Ɖcouter les albums publics et les listes de lecture partagĆ©s sur ce pod.", + "publicContent": "Ɖcouter les albums publics et les playlists disponibles sur ce pod.", "quota": "Les utilisateurĀ·ices de ce pod bĆ©nĆ©ficient Ć©galement de { quota } d'espace de stockage pour mettre en ligne leurs propres contenus !", "signup": "Inscrivez-vous maintenant pour conserver une trace de vos favoris, crĆ©er vos listes de lectures, dĆ©couvrir de nouveaux contenus et bien plus encore !" }, @@ -27,7 +27,7 @@ }, "message": { "greeting": "Bonjour {username}", - "loggedIn": "Vous ĆŖtes dĆ©jĆ  connectĆ© !" + "loggedIn": "Vous ĆŖtes dĆ©jĆ  connectĆ©Ā·e !" }, "placeholder": { "noDescription": "Pas de description disponible" @@ -59,7 +59,7 @@ "features": "FonctionnalitĆ©s", "rules": "RĆØgles", "statistics": "Statistiques", - "terms": "Condititions d'utilisation et politique de respect de la vie privĆ©e" + "terms": "Conditions d'utilisation et politique de respect de la vie privĆ©e" }, "link": { "about": "ƀ propos de ce pod", @@ -67,7 +67,7 @@ "introduction": "Introduction", "rules": "RĆØgles", "statistics": "Statistiques", - "terms": "Condititions d'utilisation et politique de respect de la vie privĆ©e" + "terms": "Conditions d'utilisation et politique de respect de la vie privĆ©e" }, "message": { "contact": "Envoyez-nous un courriel : {'{{'} contactEmail {'}}'}" @@ -75,7 +75,7 @@ "notApplicable": "ND", "placeholder": { "noDescription": "Pas de description disponible", - "noRules": "Aucune rĆØgle disponible", + "noRules": "Aucunes rĆØgles disponibles", "noTerms": "Aucune condition disponible" }, "stat": { From 233d17d2878051c7bdb176e8f8fa191311a27d8b Mon Sep 17 00:00:00 2001 From: dignny <5Dd12Ck@protonmail.com> Date: Sun, 10 Sep 2023 14:53:39 +0000 Subject: [PATCH 179/371] Translated using Weblate (Japanese) Currently translated at 92.9% (2029 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ja/ --- front/src/locales/ja_JP.json | 116 +++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 32 deletions(-) diff --git a/front/src/locales/ja_JP.json b/front/src/locales/ja_JP.json index e12caedbf..2ff804418 100644 --- a/front/src/locales/ja_JP.json +++ b/front/src/locales/ja_JP.json @@ -8,7 +8,7 @@ "findApp": "ćć®ä»–ć®ćƒ‡ćƒć‚¤ć‚¹ć§Funkwhaleć‚’å…¬å¼ć‚¢ćƒ—ćƒŖć‚’åˆ©ē”Øć—ć¦ę„½ć—ć‚€ć€‚", "funkwhale": "FunkwhalećÆć‚³ćƒŸćƒ„ćƒ‹ćƒ†ć‚£ć«ć‚ˆć‚‹ćƒ—ćƒ­ć‚ø悧ć‚Æćƒˆć§ć‚ć‚Šć€č„±äø­å¤®é›†ęØ©ēš„ćŖ開恋悌恟惍惃惈ćƒÆćƒ¼ć‚Æ恮äø­ć§éŸ³ę„½ć‚„éŸ³å£°ć‚’čžć„ćŸć‚Šć€ć‚·ć‚§ć‚¢ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚", "publicContent": "ć“ć®ćƒćƒƒćƒ‰ć§ć‚·ć‚§ć‚¢ć•ć‚Œć¦ć„ć‚‹ć€å…¬é–‹ć‚¢ćƒ«ćƒćƒ ć‚„ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚’čžćć€‚", - "quota": "ć¾ćŸć€ć“ć®ćƒćƒƒćƒ‰ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćÆč‡Ŗåˆ†ć®ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ćŸć‚ć®ć€{ quota }恮ē„”ę–™ć‚¹ćƒˆćƒ¬ćƒ¼ć‚ø悒ä½æćˆć¾ć™ļ¼", + "quota": "ć¾ćŸć€ć“ć®ćƒćƒƒćƒ‰ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćÆč‡Ŗåˆ†ć®ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ćŸć‚ć®ć€{quota}恮ē„”ę–™ć‚¹ćƒˆćƒ¬ćƒ¼ć‚ø悒ä½æ恆恓ćØćŒć§ćć¾ć™ļ¼", "signup": "ä»Šć™ćę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ć‚’恗恦态恂ćŖćŸć®å„½ćæć®ę›²ć‚’ćŠę°—ć«å…„ć‚Šć«čæ½åŠ ć™ć‚‹ć€ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚’ä½œęˆć™ć‚‹ć€ę–°ć—ć„ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’ęŽ¢ć™ē­‰ć€…悒恗恦ćæć¾ć—ć‚‡ć†ļ¼" }, "header": { @@ -18,6 +18,9 @@ "publicContent": "å…¬é–‹ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’ęŽ¢ć™", "signup": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²" }, + "help": { + "closedRegistrations": "ć“ć®ćƒćƒƒćƒ‰ć§ć®ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ćÆé–‹ę”¾ć•ć‚Œć¦ć„ć¾ć›ć‚“ć€‚ä»„äø‹ć®ćƒŖćƒ³ć‚Æć‹ć‚‰ć€ä»–ć®ćƒćƒƒćƒ‰ć«ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚" + }, "link": { "findOtherPod": "ä»–ć®ćƒćƒƒćƒ‰ć‚’ęŽ¢ć™", "learnMore": "ć•ć‚‰ć«č©³ć—ć" @@ -41,7 +44,7 @@ "anonymousAccess": "åŒæåć‚¢ć‚Æć‚»ć‚¹", "federation": "é€£åˆę©Ÿčƒ½", "quota": "ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰äøŠé™", - "registrations": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć®ē™»éŒ²", + "registrations": "ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²", "status": { "closed": "äøåÆčƒ½", "disabled": "ē„”効", @@ -104,7 +107,10 @@ "newChannels": "ę–°ć—ć„ćƒćƒ£ćƒ³ćƒćƒ«", "signup": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²", "statistics": "ēµ±č؈", - "welcome": "{ podName }ćø悈恆恓恝ļ¼" + "welcome": "{podName} ćø悈恆恓恝ļ¼" + }, + "help": { + "registrationsClosed": "ć“ć®ćƒćƒƒćƒ‰ć§ć®ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ćÆé–‹ę”¾ć•ć‚Œć¦ć„ć¾ć›ć‚“ć€‚ä»„äø‹ć®ćƒŖćƒ³ć‚Æć‹ć‚‰ć€ä»–ć®ćƒćƒƒćƒ‰ć«ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚" }, "link": { "findOtherPod": "ä»–ć®ćƒćƒƒćƒ‰ć‚’ęŽ¢ć™", @@ -169,7 +175,7 @@ "populatingRadio": "惩ć‚øć‚Ŗć®ę›²ć‚’å–å¾—ć—ć¦ć„ć¾ć™...", "previous": "å‰ć®ę›²", "queue": "再ē”Ÿć‚­ćƒ„ćƒ¼", - "remove": "除恏", + "remove": "削除", "restart": "ę›²ć®å†ē”Ÿć‚’再開", "selectTrack": "ę›²ć‚’éø恶", "showCoverArt": "ć‚«ćƒćƒ¼ć‚¢ćƒ¼ćƒˆć‚’č”Øē¤ŗ" @@ -180,7 +186,8 @@ "webglUnsupported": "恂ćŖćŸć®ćƒ–ćƒ©ć‚¦ć‚¶ćƒ¼ćÆWebGL2ć‚’ć‚µćƒćƒ¼ćƒˆć—ć¦ć„ćŖ恄悈恆恧恙怂" }, "meta": { - "queuePosition": "{ length } ę›²äø­ { index } ę›²ē›®", + "end": "再ē”Ÿäŗˆå®šę™‚é–“", + "queuePosition": "{length} ę›²äø­ {index} ę›²ē›®", "startTime": "00:00", "unknownAlbum": "äøę˜ŽćŖć‚¢ćƒ«ćƒćƒ ", "unknownArtist": "äøę˜ŽćŖć‚¢ćƒ¼ćƒ†ć‚£ć‚¹ćƒˆ" @@ -208,6 +215,7 @@ "label": { "fediverse": { "fieldLabel": "Fediverse恮ć‚Ŗ惖ć‚ø悧ć‚Æ惈", + "fieldPlaceholder": "{'@'}username{'@'}example.com", "title": "FediverseäøŠć§ćƒ›ć‚¹ćƒˆć•ć‚Œć¦ć„ć‚‹ć€ćƒćƒƒćƒ‰ć‚­ćƒ£ć‚¹ćƒˆć‚’ē™»éŒ²ć™ć‚‹" }, "rss": { @@ -237,7 +245,7 @@ "url": "Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć®URL" }, "message": { - "newUrl": "ē¾åœØ{ url }恮Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™" + "newUrl": "ē¾åœØ{url}恮Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™" } }, "ShortcutsModal": { @@ -245,7 +253,7 @@ "close": "閉恘悋" }, "header": { - "modal": "ć‚­ćƒ¼ćƒœćƒ¼ćƒ‰ć‚·ćƒ§ćƒ¼ćƒˆć‚«ćƒƒćƒˆäø€" + "modal": "ć‚­ćƒ¼ćƒœćƒ¼ćƒ‰ć‚·ćƒ§ćƒ¼ćƒˆć‚«ćƒƒćƒˆ" }, "shortcut": { "audio": { @@ -255,7 +263,7 @@ "increaseVolume": "éŸ³é‡ć‚’äøŠć’ć‚‹", "label": "ć‚Ŗćƒ¼ćƒ‡ć‚£ć‚Ŗćƒ—ćƒ¬ć‚¤ćƒ¤ćƒ¼ć®ć‚­ćƒ¼ćƒœćƒ¼ćƒ‰ć‚·ćƒ§ćƒ¼ćƒˆć‚«ćƒƒćƒˆ", "playNext": "ę¬”ć®ę›²ć‚’å†ē”Ÿ", - "playPause": "ę›²ć‚’ę­¢ć‚ć‚‹ćƒ»å†ē”Ÿć™ć‚‹", + "playPause": "ę›²ć‚’åœę­¢ć™ć‚‹ć€å†ē”Ÿć™ć‚‹", "playPrevious": "å‰ć®ę›²ć‚’å†ē”Ÿ", "seekBack30": "30ē§’ęˆ»ć‚‹", "seekBack5": "5ē§’ęˆ»ć‚‹", @@ -264,7 +272,7 @@ "shuffleQueue": "再ē”Ÿć‚­ćƒ„ćƒ¼ć‚’ć‚·ćƒ£ćƒƒćƒ•ćƒ«ć™ć‚‹", "toggleFavorite": "ćŠę°—ć«å…„ć‚Šć«ć™ć‚‹ćƒ»ćŠę°—ć«å…„ć‚Šć‹ć‚‰å¤–ć™", "toggleLoop": "再ē”Ÿć‚­ćƒ„ćƒ¼ć®ę›²ć‚’ćƒ«ćƒ¼ćƒ—å†ē”Ÿć™ć‚‹ćƒ»ćƒ«ćƒ¼ćƒ—再ē”Ÿć®åœę­¢", - "toggleMute": "ćƒŸćƒ„ćƒ¼ćƒˆćƒ»ćƒŸćƒ„ćƒ¼ćƒˆč§£é™¤" + "toggleMute": "ćƒŸćƒ„ćƒ¼ćƒˆć€ćƒŸćƒ„ćƒ¼ćƒˆč§£é™¤" }, "general": { "focus": "ꤜē“¢ēŖ“恫ē§»å‹•ć™ć‚‹", @@ -380,7 +388,7 @@ }, "help": { "discography": "恂ćŖćŸćŒä½œęˆć—ćŸéŸ³ę„½ć‚’ęŠ•ēØæć—ć¾ć™ć€‚ć‚¢ćƒ«ćƒćƒ ćØć‚·ćƒ³ć‚°ćƒ«ć®é­…åŠ›ēš„ćŖćƒ‡ć‚£ć‚¹ć‚³ć‚°ćƒ©ćƒ•ć‚£ćƒ¼ćØ恗恦怂", - "podcast": "恂ćŖćŸć®ć‚Øćƒ”ć‚½ćƒ¼ćƒ‰ć‚’ćƒ›ć‚¹ćƒˆć—ć€ć‚³ćƒŸćƒ„ćƒ‹ćƒ†ć‚£ć«ęœ€ę–°ęƒ…å ±ć‚’ęä¾›ć—ć¾ć—ć‚‡ć†ć€‚" + "podcast": "恂ćŖćŸć®ć‚Øćƒ”ć‚½ćƒ¼ćƒ‰ć‚’ćƒ›ć‚¹ćƒˆć—ć€ć‚³ćƒŸćƒ„ćƒ‹ćƒ†ć‚£ć«ęœ€ę–°ęƒ…å ±ć‚’å±Šć‘ć¾ć—ć‚‡ć†ć€‚" }, "label": { "category": "ć‚«ćƒ†ć‚“ćƒŖ", @@ -657,6 +665,7 @@ }, "header": { "appDetails": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®č©³ē“°", + "appSecretWarning": "ć“ć®ćƒˆćƒ¼ć‚Æćƒ³ć‚’å®‰å…ØćŖå “ę‰€ć«ć‚³ćƒ”ćƒ¼ć—ć¦ćć ć•ć„ć€‚", "editApp": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®ē·Ø集" }, "help": { @@ -670,6 +679,9 @@ "link": { "settings": "čØ­å®šć«ęˆ»ć‚‹" }, + "message": { + "appSecretWarning": "äø€åŗ¦ć“ć®ć‚¹ć‚ÆćƒŖćƒ¼ćƒ³ć‚’é›¢ć‚Œć‚‹ćØ态äŗŒåŗ¦ćØ見悋恓ćØćÆć§ćć¾ć›ć‚“ć€‚" + }, "title": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®ē·Ø集" }, "ApplicationForm": { @@ -795,7 +807,7 @@ "edit": "ē·Ø集恙悋", "password": "ćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’å¤‰ę›“", "refresh": "ꛓꖰ", - "remove": "除恏", + "remove": "削除", "removeApp": "ć‚¢ćƒ—ćƒŖć‚’å‰Šé™¤", "revoke": "å–ć‚Šę¶ˆć—", "revokeAccess": "ć‚¢ć‚Æć‚»ć‚¹ć®å–ć‚Šę¶ˆć—", @@ -810,6 +822,7 @@ "paragraph2": "ä»„å‰ć®Subsonic API ćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’ä½æć£ć¦ć„ć‚‹ć‚Æćƒ©ć‚¤ć‚¢ćƒ³ćƒˆć‚¢ćƒ—ćƒŖć®ćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’ę›“ę–°ć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚" }, "contentFilters": "ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ćƒ•ć‚£ćƒ«ć‚æćƒ¼ćÆč¦‹ćŸććŖć„ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’éš ć™ć®ć«å½¹ē«‹ć”ć¾ć™ć€‚", + "deleteAccount": "仄äø‹ć®ćƒ•ć‚©ćƒ¼ćƒ ć‚’利ē”Ø恙悋恓ćØ恧态恂ćŖćŸć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆćØé–¢é€£ć—ćŸå…Øć¦ć®ćƒ‡ćƒ¼ć‚æ悒ę°øä¹…ć«ć€ćć—ć¦å…ƒć«ęˆ»ć›ćŖć„ć‚ˆć†ć«å‰Šé™¤ć—ć¾ć™ć€‚å‰Šé™¤ć®éš›ć«ē¢ŗčŖć‚’ę±‚ć‚ć‚‰ć‚Œć¾ć™ć€‚", "plugins": "ćƒ—ćƒ©ć‚°ć‚¤ćƒ³ć‚’ä½æ恆恓ćØ恧Funkwhaleć‚’ę‹”å¼µć—ć€čæ½åŠ ć®ę©Ÿčƒ½ć‚’å°Žå…„ć—ć¾ć™ć€‚", "yourApps": "恂ćŖ恟恌ē™»éŒ²ć—ćŸć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®ćƒŖć‚¹ćƒˆć§ć™ć€‚" }, @@ -866,7 +879,10 @@ "header": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" }, "deleteApp": { - "header": "怌{ application }ć€ć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" + "content": { + "warning": "ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćØé–¢é€£ć—ćŸå…Øć¦ć®ćƒˆćƒ¼ć‚Æćƒ³ć‚’ę°øä¹…ć«å‰Šé™¤ć—ć¾ć™ć€‚" + }, + "header": "{app}ć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" }, "revokeApp": { "header": "\"{ application }\"ć®ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćøć®ć‚¢ć‚Æć‚»ć‚¹ć‚’å–ć‚Šę¶ˆć—ć¾ć™ć‹?" @@ -895,7 +911,7 @@ }, "title": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆčح定", "warning": { - "deleteAccount": "恂ćŖćŸć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆćÆę•°åˆ†ć§ć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰å‰Šé™¤ć•ć‚Œć¾ć™ć€‚ć¾ćŸć€ć‚ćŖćŸć®ćƒ‡ćƒ¼ć‚æć®ć‚³ćƒ”ćƒ¼ć‚’äæęŒć—ć¦ć„ć‚‹ć‹ć‚‚ć—ć‚ŒćŖć„ć€ä»–ć®ć‚µćƒ¼ćƒćƒ¼ć«é€šēŸ„ć•ć‚Œć¾ć™ć€‚ć“ć‚Œć«ć‚ˆć£ć¦ć€ä»–ć®ć‚µćƒ¼ćƒćƒ¼ć§ć‚ćŖćŸć®ćƒ‡ćƒ¼ć‚æć‚’å‰Šé™¤ć™ć‚‹ćŸć‚ć®å‡¦ē†ćŒć§ćć‚‹ć‚ˆć†ć«ćŖć‚Šć¾ć™ć€‚ć„ćć¤ć‹ć®ć‚µćƒ¼ćƒćƒ¼ćÆć‚Ŗćƒ•ćƒ©ć‚¤ćƒ³ēŠ¶ę…‹ć«ć‚ć‚‹ć€ć¾ćŸćÆ削除処ē†ć«ē©ę„µēš„恫ćÆåæœć˜ćŖć„ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ćŒć€ć”äŗ†ę‰æäø‹ć•ć„怂" + "deleteAccount": "恂ćŖćŸć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆćÆę•°åˆ†ä»„å†…ć«ć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰å‰Šé™¤ć•ć‚Œć¾ć™ć€‚ć¾ćŸć€ć“ć®ć‚µćƒ¼ćƒćƒ¼ć‹ć‚‰ć‚ćŖćŸć®ćƒ‡ćƒ¼ć‚æ恮äø€éƒØć®ć‚³ćƒ”ćƒ¼ć‚’äæęŒć—ć¦ć„ć‚‹ć‹ć‚‚ć—ć‚ŒćŖć„ć€ä»–ć®ć‚µćƒ¼ćƒćƒ¼ć«é€šēŸ„ć—ć¾ć™ć€‚ć“ć‚Œć«ć‚ˆć£ć¦ć€ć‚ćŖćŸć®ćƒ‡ćƒ¼ć‚æć‚’å‰Šé™¤ć™ć‚‹ćŸć‚ć®å‡¦ē†ćŒä»–ć®ć‚µćƒ¼ćƒćƒ¼ć§åÆčƒ½ć«ćŖć‚Šć¾ć™ć€‚ć„ćć¤ć‹ć®ć‚µćƒ¼ćƒćƒ¼ćÆć‚Ŗćƒ•ćƒ©ć‚¤ćƒ³ēŠ¶ę…‹ć«ć‚ć‚‹ć‹ć‚‚ć—ć‚ŒćŖć„ć€ć¾ćŸćÆ削除処ē†ć«ē©ę„µēš„恫ćÆåæœć˜ćŖć„ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ćŒć€ć”äŗ†ę‰æäø‹ć•ć„怂" } }, "SignupForm": { @@ -915,7 +931,7 @@ "message": { "accountCreated": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆć®ä½œęˆć«ęˆåŠŸć—ć¾ć—ćŸć€‚ćƒ­ć‚°ć‚¤ćƒ³ć‚’č©¦ćæć‚‹å‰ć«ć€ćƒ”ćƒ¼ćƒ«ć‚¢ćƒ‰ćƒ¬ć‚¹ć®čŖčØ¼ć‚’č”Œć£ć¦äø‹ć•ć„怂", "awaitingReview": "ć‚¢ć‚«ć‚¦ćƒ³ćƒˆćƒŖć‚Æć‚Øć‚¹ćƒˆć®é€äæ”ć«ęˆåŠŸć—ć¾ć—ćŸć€‚ć‚ćŖćŸć®ć‚¢ć‚«ć‚¦ćƒ³ćƒˆćƒŖć‚Æć‚Øć‚¹ćƒˆćøć®ćƒ¢ćƒ‡ćƒ¬ćƒ¼ć‚·ćƒ§ćƒ³ćƒćƒ¼ćƒ ć«ć‚ˆć‚‹åÆ©ęŸ»ćŒå®Œäŗ†ć—ćŸéš›ćÆć€ćƒ”ćƒ¼ćƒ«ć§ćŠēŸ„ć‚‰ć›ć—ć¾ć™ć€‚", - "registrationClosed": "ć“ć®ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć§ć®ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ćÆć§ćć¾ć›ć‚“ć€‚ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ć«ćÆę‹›å¾…ć‚³ćƒ¼ćƒ‰ćŒåæ…要恧恙怂", + "registrationClosed": "ć“ć®ćƒćƒƒćƒ‰ć§ć®ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ćÆć§ćć¾ć›ć‚“ć€‚ę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ć«ćÆę‹›å¾…ć‚³ćƒ¼ćƒ‰ćŒåæ…要恧恙怂", "requiresReview": "ć“ć®ćƒćƒƒćƒ‰ć§ćÆę–°č¦ć‚¢ć‚«ć‚¦ćƒ³ćƒˆē™»éŒ²ćÆé–‹ę”¾ć•ć‚Œć¦ć¾ć™ćŒć€ē™»éŒ²ćŒčŖć‚ć‚‰ć‚Œć‚‹å‰ć«ćƒ¢ćƒ‡ćƒ¬ćƒ¼ć‚æćƒ¼ć«ć‚ˆć£ć¦åÆ©ęŸ»ć•ć‚Œć¾ć™ć€‚" }, "placeholder": { @@ -961,6 +977,9 @@ "header": "Subsonic APIć‚¢ć‚Æć‚»ć‚¹ć‚’ē„”åŠ¹ć«ć—ć¾ć™ć‹ļ¼Ÿ" }, "newPassword": { + "content": { + "warning": "ć“ć‚Œć«ć‚ˆć£ć¦ć€ć‚ćŖ恟ćÆē¾åœØć®ćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’ä½æē”Øć—ć¦ć„ć‚‹ćƒ‡ćƒć‚¤ć‚¹ć‹ć‚‰ćƒ­ć‚°ć‚¢ć‚¦ćƒˆć•ć‚Œć¾ć™ć€‚" + }, "header": "ꖰ恗恄Subsonic APIć®ćƒ‘ć‚¹ćƒÆćƒ¼ćƒ‰ć‚’ćƒŖć‚Æć‚Øć‚¹ćƒˆć—ć¾ć™ć‹ļ¼Ÿ" } } @@ -1021,7 +1040,7 @@ "button": { "edit": "ē·Ø集恙悋", "ignore": "ē„”視恙悋", - "remove": "除恏", + "remove": "削除", "resume": "å†é–‹ć™ć‚‹", "retry": "再åŗ¦č©¦ć™" }, @@ -1098,7 +1117,7 @@ }, "AttachmentInput": { "button": { - "remove": "除恏" + "remove": "削除" }, "header": { "failure": "ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ćŸćƒ•ć‚”ć‚¤ćƒ«ć‚’äæå­˜ć§ćć¾ć›ć‚“ć§ć—ćŸ" @@ -1153,7 +1172,7 @@ }, "Duration": { "meta": { - "hours": "{ hours } Ꙃ間 { minutes } 分", + "hours": "{hours} Ꙃ間 {minutes} 分", "minutes": "{ minutes } 分" } }, @@ -1184,7 +1203,7 @@ }, "LoginModal": { "description": { - "noAccess": "" + "noAccess": "恂ćŖćŸć«ćÆć‚¢ć‚Æć‚»ć‚¹ęØ©é™ćŒć‚ć‚Šć¾ć›ć‚“" }, "header": { "unauthenticated": "čŖčØ¼ć•ć‚Œć¦ć„ć¾ć›ć‚“" @@ -1209,6 +1228,11 @@ "failure": "čŖ¬ę˜Žć®ę›“ꖰäø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ" } }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, "UserMenu": { "label": { "language": "č؀čŖž", @@ -1261,7 +1285,7 @@ "favorites": { "List": { "empty": { - "noFavorites": "ćŠę°—ć«å…„ć‚Šć«åŠ ćˆć‚‰ć‚ŒćŸę›²ćŒć¾ć ć‚ć‚Šć¾ć›ć‚“" + "noFavorites": "ć¾ć ćŠę°—ć«å…„ć‚Šć«čæ½åŠ ć•ć‚ŒćŸę›²ćÆć‚ć‚Šć¾ć›ć‚“" }, "header": { "favorites": "{ count } å€‹ć®ćŠę°—ć«å…„ć‚Š" @@ -1617,12 +1641,19 @@ "label": { "extensions": "ć‚µćƒćƒ¼ćƒˆć•ć‚Œć¦ć„ć‚‹ę‹”å¼µå­: { extensions }", "remainingSpace": "ę®‹ć‚Šć®ć‚¹ćƒˆćƒ¬ćƒ¼ć‚ø容量", - "uploadWidget": "ć‚ÆćƒŖ惃ć‚Æć—ć¦ćƒ•ć‚”ć‚¤ćƒ«ć‚’éøęŠžć™ć‚‹ć‹ć€ćƒ•ć‚”ć‚¤ćƒ«ć‚„ćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖć‚’ćƒ‰ćƒ©ćƒƒć‚°ć‚¢ćƒ³ćƒ‰ćƒ‰ćƒ­ćƒƒćƒ—ć—ć¦ćć ć•ć„" + "uploadWidget": "ć‚ÆćƒŖ惃ć‚Æć—ć¦ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć™ć‚‹ćƒ•ć‚”ć‚¤ćƒ«ć‚’éøęŠžć™ć‚‹ć‹ć€ćƒ•ć‚”ć‚¤ćƒ«ć¾ćŸćÆćƒ‡ć‚£ćƒ¬ć‚Æ惈ćƒŖć‚’ćƒ‰ćƒ©ćƒƒć‚°&ćƒ‰ćƒ­ćƒƒćƒ—ć—ć¦ćć ć•ć„" }, "link": { "processing": "処ē†äø­", "uploading": "ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰äø­" }, + "message": { + "local": { + "format": "ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ć‚ˆć†ćØć—ć¦ć„ć‚‹éŸ³ę„½ćƒ•ć‚”ć‚¤ćƒ«ć®ćƒ•ć‚©ćƒ¼ćƒžćƒƒćƒˆćÆ态怌OGG怍怌Flac怍怌MP3ć€ć¾ćŸćÆ怌AIFF怍ćŖć©ć«ć—ć¾ć—ć‚‡ć†", + "message": "恂ćŖ恟ćÆćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć«éŸ³ę„½ć‚’ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ć‚ˆć†ćØć—ć¦ć„ć¾ć™ć€‚å‡¦ē†ć‚’č”Œć†å‰ć«ē¢ŗčŖć—ć¦ćć ć•ć„:", + "tag": "ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ć‚ˆć†ćØć—ć¦ć„ć‚‹éŸ³ę„½ćƒ•ć‚”ć‚¤ćƒ«ć«é©åˆ‡ć«ć‚æć‚°ä»˜ć‘ć‚’ć—ć¾ć—ć‚‡ć†ć€‚" + } + }, "table": { "upload": { "header": { @@ -1816,6 +1847,9 @@ "header": "ć“ć®ę›²ć‚’Webć‚µć‚¤ćƒˆć«åŸ‹ć‚č¾¼ć‚€" } }, + "subtitle": { + "with-uploader": "{1} 恫态{0} ć«ć‚ˆć£ć¦ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć•ć‚Œć¾ć—ćŸ" + }, "title": "ę›²" }, "TrackDetail": { @@ -1907,7 +1941,7 @@ "Filter": { "cancelButton": "ć‚­ćƒ£ćƒ³ć‚»ćƒ«", "excludeLabel": "除恏", - "removeButton": "除恏" + "removeButton": "削除" } } }, @@ -2455,6 +2489,7 @@ "internalNotes": "ē®”ē†ē”ØćƒŽćƒ¼ćƒˆ", "pending": "äæē•™äø­", "refused": "ę‹’å¦", + "resolutionDate": "č§£ę±ŗę—„", "status": "ēŠ¶ę…‹" } } @@ -2621,7 +2656,7 @@ "reject": "ę‹’å¦" }, "message": { - "libraryAcceptFollow": "{ username } 恌 ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ\"{ library }\"ć®ćƒ•ć‚©ćƒ­ćƒ¼ć‚’čرåÆć—ć¾ć—ćŸ", + "libraryAcceptFollow": "{username} ćŒć€ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ\"{library}\"ćøć®ćƒ•ć‚©ćƒ­ćƒ¼ć‚’čرåÆć—ć¾ć—ćŸ", "libraryFollow": "{ username } 恌恂ćŖćŸć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ\"{ library }\"ć‚’ćƒ•ć‚©ćƒ­ćƒ¼ć—ć¾ć—ćŸ", "libraryPendingFollow": "{ username } 恌恂ćŖćŸć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ\"{ library }\"ć‚’ćƒ•ć‚©ćƒ­ćƒ¼ć—ćŸć„ć‚ˆć†ć§ć™" } @@ -2638,7 +2673,7 @@ "addDuplicate": "ćØć«ć‹ćčæ½åŠ ć™ć‚‹", "clear": "ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚’ć‚ÆćƒŖć‚¢", "copy": "ć‚­ćƒ„ćƒ¼ć®ę›²ć‚’ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆćøć‚³ćƒ”ćƒ¼", - "insertFromQueue": "再ē”Ÿć‚­ćƒ„ćƒ¼ć‹ć‚‰({ count } ę›²)ćŒåŠ ćˆć‚‰ć‚Œć¾ć™" + "insertFromQueue": "再ē”Ÿć‚­ćƒ„ćƒ¼ć‹ć‚‰({n} ę›²)恌čæ½åŠ ć•ć‚Œć¾ć™ | 再ē”Ÿć‚­ćƒ„ćƒ¼ć‹ć‚‰({n} ę›²)恌čæ½åŠ ć•ć‚Œć¾ć™" }, "error": { "sync": "å¤‰ę›“ć®äæå­˜äø­ć«ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ" @@ -2646,11 +2681,20 @@ "header": { "editor": "ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚Øćƒ‡ć‚£ć‚æćƒ¼" }, + "help": { + "reorder": "ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆå†…ć®ę›²ć‚’äø¦ć³ę›æćˆć‚‹ć«ćÆć€å„ę›²ć®č”Œć‚’ćƒ‰ćƒ©ćƒƒć‚°&ćƒ‰ćƒ­ćƒƒćƒ—ć—ć¦ćć ć•ć„" + }, + "loading": { + "sync": "å¤‰ę›“å†…å®¹ć‚’ć‚µćƒ¼ćƒćƒ¼ćØåŒęœŸäø­ā€¦" + }, "message": { - "sync": "ć‚µćƒ¼ćƒćƒ¼ćØåŒęœŸć•ć‚ŒćŸå¤‰ę›“" + "sync": "å¤‰ę›“å†…å®¹ć‚’ć‚µćƒ¼ćƒćƒ¼ćØåŒęœŸć—ć¾ć—ćŸ" }, "modal": { "clearPlaylist": { + "content": { + "warning": "ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‹ć‚‰å…Øć¦ć®ę›²ćŒå‰Šé™¤ć•ć‚Œć¾ć™ć€‚å…ƒć«ęˆ»ć™ć“ćØćÆć§ćć¾ć›ć‚“ć€‚" + }, "header": "ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć€Œ{ playlist }怍悒ć‚ÆćƒŖć‚¢ć—ć¾ć™ć‹ļ¼Ÿ" } }, @@ -2786,6 +2830,7 @@ "label": "完äŗ†" }, "pending": { + "help": "ć“ć®ę›²ćÆć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć•ć‚Œć¾ć—ćŸćŒć€ć¾ć ć‚µćƒ¼ćƒćƒ¼ć«ć‚ˆć£ć¦å‡¦ē†ć•ć‚Œć¦ć„ć¾ć›ć‚“", "label": "äæē•™äø­" }, "skipped": { @@ -3013,6 +3058,10 @@ } }, "init": { + "axios": { + "rateLimitDelay": "非åøøć«å¤šćć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’é€ć£ćŸćŸć‚ć€ćƒ¬ćƒ¼ćƒˆćƒŖćƒŸćƒƒćƒˆåˆ¶é™ć•ć‚Œć¾ć—ćŸć€‚{delay}å¾Œć«ć‚‚ć†äø€åŗ¦ćŠč©¦ć—ćć ć•ć„", + "rateLimitLater": "非åøøć«å¤šćć®ćƒŖć‚Æć‚Øć‚¹ćƒˆć‚’é€ć£ćŸćŸć‚ć€ćƒ¬ćƒ¼ćƒˆćƒŖćƒŸćƒƒćƒˆåˆ¶é™ć•ć‚Œć¾ć—ćŸć€‚å¾Œć»ć©ć€ć‚‚ć†äø€åŗ¦ćŠč©¦ć—ćć ć•ć„" + }, "sentry": { "allow": "čرåÆ", "funkwhaleInstance": "Funkwhaleć®å…¬å¼Glitchtipć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹", @@ -3898,9 +3947,11 @@ }, "description": { "channel": { - "1": "恂ćŖćŸćŒćƒŸćƒ„ćƒ¼ć‚øć‚·ćƒ£ćƒ³ć¾ćŸćÆćƒćƒƒćƒ‰ć‚­ćƒ£ć‚¹ć‚æćƒ¼ćŖć‚‰ć€å°‚ē”Øć®ćƒćƒ£ćƒ³ćƒćƒ«ćŒęä¾›ć•ć‚Œć¾ć™ļ¼" + "1": "恂ćŖćŸćŒćƒŸćƒ„ćƒ¼ć‚øć‚·ćƒ£ćƒ³ć¾ćŸćÆćƒćƒƒćƒ‰ć‚­ćƒ£ć‚¹ć‚æćƒ¼ćŖć‚‰ć€å°‚ē”Øć®ćƒćƒ£ćƒ³ćƒćƒ«ćŒä½œęˆć•ć‚Œć¾ć™ļ¼", + "2": "恂ćŖćŸć®ä½œå“ć‚’ćæćŖ恕悓ćØć‚·ć‚§ć‚¢ć—ć¦ć€Funkwhale态Fediverseć€ć¾ćŸćÆćć®ä»–ć®ćƒćƒƒćƒ‰ć‚­ćƒ£ć‚¹ćƒ†ć‚£ćƒ³ć‚°ćƒ»ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć®č³¼čŖ­č€…ć‚’ē²å¾—ć—ć¾ć—ć‚‡ć†ć€‚" }, - "follow": "ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć‚’ćƒ•ć‚©ćƒ­ćƒ¼ć—ć¦ć€ę–°ć—ć„éŸ³ę„½ć«å‡ŗä¼šć„ć¾ć—ć‚‡ć†ć€‚å…¬é–‹ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆć™ćć«ćƒ•ć‚©ćƒ­ćƒ¼ć§ćć¾ć™ćŒć€ćƒ—ćƒ©ć‚¤ćƒ™ćƒ¼ćƒˆćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćøć®ćƒ•ć‚©ćƒ­ćƒ¼ćÆćć®ę‰€ęœ‰č€…ć‹ć‚‰ć®ę‰æčŖćŒåæ…é ˆć§ć™ć€‚" + "follow": "ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć‚’ćƒ•ć‚©ćƒ­ćƒ¼ć—ć¦ć€ę–°ć—ć„éŸ³ę„½ć«å‡ŗä¼šć„ć¾ć—ć‚‡ć†ć€‚å…¬é–‹ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆć™ćć«ćƒ•ć‚©ćƒ­ćƒ¼ć§ćć¾ć™ćŒć€ćƒ—ćƒ©ć‚¤ćƒ™ćƒ¼ćƒˆćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćøć®ćƒ•ć‚©ćƒ­ćƒ¼ćÆćć®ę‰€ęœ‰č€…ć‹ć‚‰ć®ę‰æčŖćŒåæ…é ˆć§ć™ć€‚", + "upload": "恂ćŖćŸć®å€‹äŗŗēš„ćŖéŸ³ę„½ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖ悒Funkwhaleć«ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ć¦ć€ć©ć®ć‚ˆć†ćŖå “ę‰€ć«ć„ć¦ć‚‚éŸ³ę„½ć‚’ę„½ć—ć‚“ć ć‚Šć€å‹äŗŗć‚„å®¶ę—ćØć‚·ć‚§ć‚¢ć—ć¾ć—ć‚‡ć†ć€‚" }, "header": { "channel": "恂ćŖćŸć®ä½œå“ć‚’ćƒćƒ£ćƒ³ćƒćƒ«ć§å…¬é–‹", @@ -3908,7 +3959,7 @@ "upload": "ć‚µćƒ¼ćƒ‰ćƒ‘ćƒ¼ćƒ†ć‚£ćƒ¼ćƒ»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć‚’ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć«ć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰" }, "help": { - "uploadQuota": "ć“ć®ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ćÆå…Øć¦ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ć«{quota}ć®ć‚¹ćƒˆćƒ¬ćƒ¼ć‚øć‚’ęä¾›ć—ć¦ć„ć¾ć™ć€‚" + "uploadQuota": "ć“ć®ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ćÆå„ćƒ¦ćƒ¼ć‚¶ćƒ¼ć«{quota}ć¾ć§ć®ć‚¹ćƒˆćƒ¬ćƒ¼ć‚øć‚¹ćƒšćƒ¼ć‚¹ć‚’ęä¾›ć—ć¦ć„ć¾ć™ć€‚" }, "title": "ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ć®čæ½åŠ ćØē·Ø集" }, @@ -4190,6 +4241,7 @@ "sharingLink": "仄äø‹ć®ćƒŖćƒ³ć‚Æć‚’ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćØć‚·ć‚§ć‚¢ć—ć¦ćæć¾ć—ć‚‡ć†ć€‚ä»–ć®ćƒ¦ćƒ¼ć‚¶ćƒ¼ćŒå±žć™ć‚‹ćƒćƒƒćƒ‰ć®ę¤œē“¢ćƒćƒ¼ć«ä»„äø‹ć®ćƒŖćƒ³ć‚Æć‚’ć‚³ćƒ”ćƒ¼ļ¼†ćƒšćƒ¼ć‚¹ćƒˆć™ć‚‹ć“ćØć§ć€ć“ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć«ć‚¢ć‚Æć‚»ć‚¹ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚" }, "label": { + "instance": "限定公開", "private": "ćƒ—ćƒ©ć‚¤ćƒ™ćƒ¼ćƒˆ", "public": "公開", "sharingLink": "ćƒŖćƒ³ć‚Æć‚’ć‚·ć‚§ć‚¢" @@ -4221,7 +4273,7 @@ "edit": "ē·Ø集恙悋", "embed": "åŸ‹ć‚č¾¼ć‚€", "playAll": "å…Øę›²å†ē”Ÿ", - "stopEdit": "ē·Øé›†ć‚’ę­¢ć‚ć‚‹" + "stopEdit": "ē·Ø集悒悄悁悋" }, "empty": { "noTracks": "ć¾ć ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć«ćÆę›²ćŒć‚ć‚Šć¾ć›ć‚“" @@ -4230,14 +4282,14 @@ "tracks": "ę›²äø€č¦§" }, "meta": { - "tracks": "ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć«ćÆ{ count }ę›²ć‚ć‚Šć€{ username }ćŒć‚¢ćƒƒćƒ—ćƒ­ćƒ¼ćƒ‰ć—ć¾ć—ćŸ" + "tracks": "ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć«ćÆ{n}ę›²ćŒå­˜åœØ恗态{username}恌čæ½åŠ ć—ć¾ć—ćŸ | ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć«ćÆ{n}ę›²ćŒå­˜åœØ恗态{username}恌čæ½åŠ ć—ć¾ć—ćŸ" }, "modal": { "delete": { "content": { - "warning": "ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚’å®Œå…Øć«å‰Šé™¤ć—ć¾ć™ćŒć€å…ƒć«ęˆ»ć™ć“ćØćÆć§ćć¾ć›ć‚“ć€‚" + "warning": "ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚’å®Œå…Øć«å‰Šé™¤ć—ć¾ć™ć€‚å…ƒć«ęˆ»ć™ć“ćØćÆć§ćć¾ć›ć‚“ć€‚" }, - "header": "ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć€Œ{ playlist }ć€ć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" + "header": "ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆ{ playlist }ć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" }, "embed": { "header": "ć“ć®ćƒ—ćƒ¬ć‚¤ćƒŖć‚¹ćƒˆć‚’Webć‚µć‚¤ćƒˆć«åŸ‹ć‚č¾¼ć‚€" @@ -4295,7 +4347,7 @@ "content": { "warning": "惩ć‚øć‚Ŗć‚’å®Œå…Øć«å‰Šé™¤ć—ć¾ć™ćŒć€å…ƒć«ęˆ»ć™ć“ćØćÆć§ćć¾ć›ć‚“ć€‚" }, - "header": "惩ć‚øć‚Ŗ怌{ radio }ć€ć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" + "header": "惩ć‚øć‚Ŗ{radio}ć‚’å‰Šé™¤ć—ć¾ć™ć‹ļ¼Ÿ" } }, "title": "惩ć‚øć‚Ŗ" From 142a517b9323079adfa23f4e762c6f01544e8075 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Lorente?= <president@radioblv.com> Date: Tue, 12 Sep 2023 13:17:04 +0000 Subject: [PATCH 180/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index ce64ed378..eb1e482fb 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -70,7 +70,7 @@ "terms": "Conditions d'utilisation et politique de respect de la vie privĆ©e" }, "message": { - "contact": "Envoyez-nous un courriel : {'{{'} contactEmail {'}}'}" + "contact": "Envoyez-nous un courriel : { contactEmail }" }, "notApplicable": "ND", "placeholder": { From 864518062007f314d3f4e22ee5d77ad12825f2de Mon Sep 17 00:00:00 2001 From: rinenweb <rinenweb@gmail.com> Date: Fri, 22 Sep 2023 22:12:45 +0000 Subject: [PATCH 181/371] Translated using Weblate (Greek) Currently translated at 39.9% (872 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/el/ --- front/src/locales/el.json | 100 +++++++++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 22 deletions(-) diff --git a/front/src/locales/el.json b/front/src/locales/el.json index bc1b47c29..f7cd70abf 100644 --- a/front/src/locales/el.json +++ b/front/src/locales/el.json @@ -1,64 +1,92 @@ { "App": { - "loading": "Ī¦ĪæĻĻ„ĻŽĪ½ĪµĻ„Ī±Ī¹..." + "loading": "Ī¦ĪæĻĻ„ĻŽĪ½ĪµĪ¹..." }, "components": { "About": { "header": { "aboutPod": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", "findApp": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod", + "funkwhale": "ĪœĪ¹Ī± ĪŗĪæĪ¹Ī½Ļ‰Ī½Ī¹ĪŗĪ® Ļ€Ī»Ī±Ļ„Ļ†ĻŒĻĪ¼Ī± Ī³Ī¹Ī± Ī½Ī± Ī±Ļ€ĪæĪ»Ī±Ī¼Ī²Ī¬Ī½ĪµĻ„Īµ ĪŗĪ±Ī¹ Ī½Ī± Ī¼ĪæĪ¹ĻĪ¬Ī¶ĪµĻƒĻ„Īµ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®", "publicContent": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī“Ī·Ī¼ĻŒĻƒĪ¹Ļ‰Ī½ Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ļ‰Ī½", "signup": "Ī•Ī³Ī³ĻĪ±Ļ†Ī®" }, + "help": { + "closedRegistrations": "ĪŸĪ¹ ĪµĪ³Ī³ĻĪ±Ļ†Ī­Ļ‚ Ī­Ļ‡ĪæĻ…Ī½ ĪŗĪ»ĪµĪÆĻƒĪµĪ¹ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod. ĪœĻ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± ĪµĪ³Ī³ĻĪ±Ļ†ĪµĪÆĻ„Īµ ĻƒĪµ Ī¬Ī»Ī»Īæ pod Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹ĻŽĪ½Ļ„Ī±Ļ‚ Ļ„ĪæĪ½ Ļ€Ī±ĻĪ±ĪŗĪ¬Ļ„Ļ‰ ĻƒĻĪ½Ī“ĪµĻƒĪ¼Īæ." + }, "link": { "findOtherPod": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod", - "learnMore": "ĪœĪ¬ĪøĪµĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĪæĻ„ĪµĻĪ±" + "learnMore": "ĪœĪ¬ĪøĪµĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪ±" + }, + "message": { + "greeting": "Ī“ĪµĪ¹Ī¬ Ļ‡Ī±ĻĪ¬ {username}", + "loggedIn": "ĪˆĻ‡ĪµĪ¹Ļ‚ Ī®Ī“Ī· ĻƒĻ…Ī½Ī“ĪµĪøĪµĪÆ!" }, "placeholder": { "noDescription": "Ī”ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪµĪ¹ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī· Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" }, "stat": { - "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", + "activeUsers": "ĪšĪ±Ī½Ī­Ī½Ī±Ļ‚ ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚" }, - "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ" + "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬" }, "AboutPod": { "feature": { "allowList": "Ī›ĪÆĻƒĻ„Ī± Ī•Ļ€Ī¹Ļ„ĻĪµĻ€ĪæĪ¼Ī­Ī½Ļ‰Ī½", "anonymousAccess": "Ī‘Ī½ĻŽĪ½Ļ…Ī¼Ī· Ļ€ĻĻŒĻƒĪ²Ī±ĻƒĪ·", + "quota": "ĪŒĻĪ¹Īæ Ī±Ī½ĪµĪ²Ī¬ĻƒĪ¼Ī±Ļ„ĪæĻ‚", + "registrations": "Ī•Ī³Ī³ĻĪ±Ļ†Ī­Ļ‚", "status": { "closed": "ĪšĪ»ĪµĪ¹ĻƒĻ„ĻŒ", - "disabled": "Ī‘Ļ€ĪµĪ½ĪµĻĪ³ĪæĻ€ĪæĪ¹Ī·Ī¼Ī­Ī½Īæ", - "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ" + "disabled": "Ī‘Ī½ĪµĪ½ĪµĻĪ³ĻŒ", + "enabled": "Ī•Ī½ĪµĻĪ³ĻŒ", + "open": "Ī‘Ī½ĪæĪ¹ĪŗĻ„ĻŒ" }, "version": "ĪˆĪŗĪ“ĪæĻƒĪ· Funkwhale" }, "header": { "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", - "contact": "Ī•Ļ€Ī±Ļ†Ī­Ļ‚Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±", + "contact": "Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±", + "features": "Ī”Ļ…Ī½Ī±Ļ„ĻŒĻ„Ī·Ļ„ĪµĻ‚", "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚", + "statistics": "Ī£Ļ„Ī±Ļ„Ī¹ĻƒĻ„Ī¹ĪŗĪ¬", "terms": "ĪŒĻĪæĪ¹ ĪŗĪ±Ī¹ Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ® Ī±Ļ€ĪæĻĻĪ®Ļ„ĪæĻ…" }, "link": { "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod", - "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚" + "features": "Ī”Ļ…Ī½Ī±Ļ„ĻŒĻ„Ī·Ļ„ĪµĻ‚", + "introduction": "Ī•Ī¹ĻƒĪ±Ī³Ļ‰Ī³Ī®", + "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚", + "statistics": "Ī£Ļ„Ī±Ļ„Ī¹ĻƒĻ„Ī¹ĪŗĪ¬", + "terms": "ĪŒĻĪæĪ¹ ĪŗĪ±Ī¹ Ļ€ĪæĪ»Ī¹Ļ„Ī¹ĪŗĪ® Ī±Ļ€ĪæĻĻĪ®Ļ„ĪæĻ…" + }, + "message": { + "contact": "Ī£Ļ„ĪµĪÆĪ»Ļ„Īµ Ī¼Ī±Ļ‚ Ī­Ī½Ī± email: { contactEmail }" + }, + "placeholder": { + "noDescription": "Ī”ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪµĪ¹ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī· Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®", + "noRules": "Ī”ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪæĻ…Ī½ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼ĪæĪ¹ ĪŗĪ±Ī½ĻŒĪ½ĪµĻ‚", + "noTerms": "Ī”ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪæĻ…Ī½ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼ĪæĪ¹ ĻŒĻĪæĪ¹" }, "stat": { - "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", - "albumsCount": "Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼ | Ī†Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "artistsCount": "ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ | ĪšĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚", + "activeUsers": "ĪšĪ±Ī½Ī­Ī½Ī±Ļ‚ ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", + "albumsCount": "0 Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ | {n} Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ | {n} Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", + "artistsCount": "0 ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚ | {n} ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚ | {n} ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½ĪµĻ‚", "hoursOfMusic": "{ n } ĻŽĻĪ± Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚ | { n } ĻŽĻĪµĻ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®Ļ‚", "listeningsCount": "{ n } Ī±ĪŗĻĻŒĪ±ĻƒĪ· | { n } Ī±ĪŗĻĪæĪ¬ĻƒĪµĪ¹Ļ‚", - "tracksCount": "Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ | Ī ĻĪæĻƒĪøĪ®ĪŗĪ· ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" + "tracksCount": "0 ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± | {n} ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ | {n} ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī±" }, - "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ" + "title": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬" }, "Home": { "description": { "funkwhale": { + "paragraph1": "Ī‘Ļ…Ļ„ĻŒ Ļ„Īæ pod ĪµĪŗĻ„ĪµĪ»ĪµĪÆ Ļ„Īæ Funkwhale, Ī­Ī½Ī± Ī­ĻĪ³Īæ Ī²Ī±ĻƒĪ¹ĻƒĪ¼Ī­Ī½Īæ ĻƒĻ„Ī·Ī½ ĪŗĪæĪ¹Ī½ĻŒĻ„Ī·Ļ„Ī± Ļ€ĪæĻ… ĻƒĪ±Ļ‚ ĪµĻ€Ī¹Ļ„ĻĪ­Ļ€ĪµĪ¹ Ī½Ī± Ī±ĪŗĪæĻĻ„Īµ ĪŗĪ±Ī¹ Ī½Ī± Ī¼ĪæĪ¹ĻĪ¬Ī¶ĪµĻƒĻ„Īµ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ® ĪŗĪ±Ī¹ Ī®Ļ‡Īæ ĻƒĪµ Ī­Ī½Ī± Ī±Ļ€ĪæĪŗĪµĪ½Ļ„ĻĻ‰Ī¼Ī­Ī½Īæ, Ī±Ī½ĪæĪ¹Ļ‡Ļ„ĻŒ Ī“ĪÆĪŗĻ„Ļ…Īæ.", "paragraph2": "Ī¤Īæ Funkwhale ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ‰ĻĪµĪ¬Ī½ ĪŗĪ±Ī¹ Ī±Ī½Ī±Ļ€Ļ„ĻĻƒĻƒĪµĻ„Ī±Ī¹ Ī±Ļ€ĻŒ Ī¼Ī¹Ī± Ļ†Ī¹Ī»Ī¹ĪŗĪ® ĪŗĪæĪ¹Ī½ĻŒĻ„Ī·Ļ„Ī± Ī±Ļ€ĻŒ ĪµĪøĪµĪ»ĪæĪ½Ļ„Ī­Ļ‚." - } + }, + "quota": "ĪŸĪ¹ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod Ī»Ī±Ī¼Ī²Ī¬Ī½ĪæĻ…Ī½ ĪµĻ€ĪÆĻƒĪ·Ļ‚ {quota} Ī“Ļ‰ĻĪµĪ¬Ī½ Ī±Ļ€ĪæĪøĪ·ĪŗĪµĻ…Ļ„Ī¹ĪŗĪæĻ Ļ‡ĻŽĻĪæĻ… Ī³Ī¹Ī± Ī½Ī± Ī±Ī½ĪµĪ²Ī¬ĻƒĪæĻ…Ī½ Ļ„Īæ Ī“Ī¹ĪŗĻŒ Ļ„ĪæĻ…Ļ‚ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ!", + "signup": "Ī•Ī³Ī³ĻĪ±Ļ†ĪµĪÆĻ„Īµ Ļ„ĻŽĻĪ± Ī³Ī¹Ī± Ī½Ī± Ļ€Ī±ĻĪ±ĪŗĪæĪ»ĪæĻ…ĪøĪµĪÆĻ„Īµ Ļ„Ī·Ī½ Ī±Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Ī· ĻƒĪ±Ļ‚ Ī¼ĪæĻ…ĻƒĪ¹ĪŗĪ®, Ī½Ī± Ī“Ī·Ī¼Ī¹ĪæĻ…ĻĪ³Ī®ĻƒĪµĻ„Īµ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚, Ī½Ī± Ī±Ī½Ī±ĪŗĪ±Ī»ĻĻˆĪµĻ„Īµ Ī½Ī­Īæ Ļ€ĪµĻĪ¹ĪµĻ‡ĻŒĪ¼ĪµĪ½Īæ ĪŗĪ±Ī¹ Ļ€ĪæĪ»Ī»Ī¬ Ī¬Ī»Ī»Ī±!" }, "header": { "about": "Ī£Ļ‡ĪµĻ„Ī¹ĪŗĪ¬ Ī¼Īµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ Funkwhale pod", @@ -66,16 +94,24 @@ "contact": "Ī•Ļ€Ī¹ĪŗĪæĪ¹Ī½Ļ‰Ī½ĪÆĪ±", "links": "Ī§ĻĪ®ĻƒĪ¹Ī¼ĪæĪ¹ ĻƒĻĪ½Ī“ĪµĻƒĪ¼ĪæĪ¹", "login": "Ī£ĻĪ½Ī“ĪµĻƒĪ·", - "newChannels": "ĪĪ­Ī± ĪŗĪ±Ī½Ī¬Ī»Ī¹Ī±" + "newChannels": "ĪĪ­Ī± ĪŗĪ±Ī½Ī¬Ī»Ī¹Ī±", + "signup": "Ī•Ī³Ī³ĻĪ±Ļ†Ī®", + "statistics": "Ī£Ļ„Ī±Ļ„Ī¹ĻƒĻ„Ī¹ĪŗĪ¬", + "welcome": "ĪšĪ±Ī»ĻŽĻ‚ Ī®ĻĪøĪ±Ļ„Īµ ĻƒĻ„Īæ {podName}!" + }, + "help": { + "registrationsClosed": "ĪŸĪ¹ ĪµĪ³Ī³ĻĪ±Ļ†Ī­Ļ‚ Ī­Ļ‡ĪæĻ…Ī½ ĪŗĪ»ĪµĪÆĻƒĪµĪ¹ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod. ĪœĻ€ĪæĻĪµĪÆĻ„Īµ Ī½Ī± ĪµĪ³Ī³ĻĪ±Ļ†ĪµĪÆĻ„Īµ ĻƒĪµ Ī¬Ī»Ī»Īæ pod Ļ‡ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹ĻŽĪ½Ļ„Ī±Ļ‚ Ļ„ĪæĪ½ Ļ€Ī±ĻĪ±ĪŗĪ¬Ļ„Ļ‰ ĻƒĻĪ½Ī“ĪµĻƒĪ¼Īæ." }, "link": { "findOtherPod": "Ī’ĻĪµĪÆĻ„Īµ Ī¬Ī»Ī»Īæ pod", "funkwhale": "Ī•Ļ€Ī¹ĻƒĪŗĪµĻ†ĪøĪµĪÆĻ„Īµ Ļ„Īæ funkwhale.audio", "learnMore": "ĪœĪ¬ĪøĪµĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪ±", "mobileApps": { + "description": "Ī§ĻĪ·ĻƒĪ¹Ī¼ĪæĻ€ĪæĪ¹Ī®ĻƒĻ„Īµ Ļ„Īæ Funkwhale ĻƒĪµ Ī¬Ī»Ī»ĪµĻ‚ ĻƒĻ…ĻƒĪŗĪµĻ…Ī­Ļ‚ Ī¼Īµ Ļ„Ī¹Ļ‚ ĪµĻ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ī¼Ī±Ļ‚", "label": "Ī•Ļ†Ī±ĻĪ¼ĪæĪ³Ī­Ļ‚ Ī³Ī¹Ī± ĪŗĪ¹Ī½Ī·Ļ„Ī¬" }, "publicContent": { + "description": "Ī‘ĪŗĪæĻĻƒĻ„Īµ Ī“Ī·Ī¼ĻŒĻƒĪ¹Ī± Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼ ĪŗĪ±Ī¹ Ī»ĪÆĻƒĻ„ĪµĻ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚ Ļ€ĪæĻ… Ī“Ī¹Ī±Ī¼ĪæĪ¹ĻĪ¬Ī¶ĪæĪ½Ļ„Ī±Ī¹ ĻƒĪµ Ī±Ļ…Ļ„ĻŒ Ļ„Īæ pod.", "label": "Ī ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ· Ī“Ī·Ī¼ĻŒĻƒĪ¹Ļ‰Ī½ Ī“ĪµĪ“ĪæĪ¼Ī­Ī½Ļ‰Ī½" }, "rules": "ĪšĪ±Ī½ĻŒĪ½ĪµĻ‚ Ļ„ĪæĻ… ĻƒĪ­ĻĪ²ĪµĻ", @@ -83,7 +119,10 @@ "description": "Ī‘Ī½Ī±ĪŗĪ±Ī»ĻĻˆĻ„Īµ ĻŒĻ„Ī¹ Ļ‡ĻĪµĪ¹Ī¬Ī¶ĪµĻ„Ī±Ī¹ Ī½Ī± Ī³Ī½Ļ‰ĻĪÆĪ¶ĪµĻ„Īµ Ī³Ī¹Ī± Ļ„Īæ Funkwhale ĪŗĪ±Ī¹ Ļ„Ī¹Ļ‚ Ī“Ļ…Ī½Ī±Ļ„ĻŒĻ„Ī·Ļ„ĪµĻ‚ Ļ„ĪæĻ…", "label": "ĪŸĪ“Ī·Ī³ĪæĪÆ Ļ‡ĻĪ®ĻƒĪ·Ļ‚" }, - "viewMore": "Ī”ĪµĪÆĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĪæĻŒĻ„ĪµĻĪ±ā€¦" + "viewMore": "Ī”ĪµĪÆĻ„Īµ Ļ€ĪµĻĪ¹ĻƒĻƒĻŒĻ„ĪµĻĪ±ā€¦" + }, + "placeholder": { + "noDescription": "Ī”ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪµĪ¹ Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ī· Ļ€ĪµĻĪ¹Ī³ĻĪ±Ļ†Ī®" }, "stat": { "activeUsers": "{ n } ĪµĪ½ĪµĻĪ³ĻŒĻ‚ Ļ‡ĻĪ®ĻƒĻ„Ī·Ļ‚ | { n } ĪµĪ½ĪµĻĪ³ĪæĪÆ Ļ‡ĻĪ®ĻƒĻ„ĪµĻ‚", @@ -98,6 +137,9 @@ "link": { "home": "Ī Ī·Ī³Ī±ĪÆĪ½ĪµĻ„Īµ ĻƒĻ„Ī·Ī½ Ī±ĻĻ‡Ī¹ĪŗĪ® ĻƒĪµĪ»ĪÆĪ“Ī±" }, + "message": { + "pageNotFound": "Ī›Ļ…Ļ€ĪæĻĪ¼Ī±ĻƒĻ„Īµ, Ī· ĻƒĪµĪ»ĪÆĪ“Ī± Ļ€ĪæĻ… Ī¶Ī·Ļ„Ī®ĻƒĪ±Ļ„Īµ Ī“ĪµĪ½ Ļ…Ļ€Ī¬ĻĻ‡ĪµĪ¹:" + }, "title": "Ī— ĻƒĪµĪ»ĪÆĪ“Ī± Ī“ĪµĪ½ Ī²ĻĪ­ĪøĪ·ĪŗĪµ" }, "Queue": { @@ -105,29 +147,37 @@ "clear": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī±", "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" }, + "header": { + "failure": "Ī¤Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ Ī“ĪµĪ½ Ī¼Ļ€ĪæĻĪµĪÆ Ī½Ī± Ļ†ĪæĻĻ„ĻŽĻƒĪµĪ¹" + }, "label": { "addArtistContentFilter": "Ī‘Ļ€ĻŒĪŗĻĻ…ĻˆĪ· Ļ€ĪµĻĪ¹ĪµĻ‡ĪæĪ¼Ī­Ī½ĪæĻ… Ī±Ļ€ĻŒ Ī±Ļ…Ļ„ĻŒĪ½ Ļ„ĪæĪ½ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·ā€¦", "duration": "Ī”Ī¹Ī¬ĻĪŗĪµĪ¹Ī±", "enterFullscreen": "Ī Ī»Ī®ĻĪ·Ļ‚ ĪæĪøĻŒĪ½Ī·", "exitFullscreen": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ Ļ€Ī»Ī®ĻĪæĻ…Ļ‚ ĪæĪøĻŒĪ½Ī·Ļ‚", "favorite": "Ī‘Ī³Ī±Ļ€Ī·Ī¼Ī­Ī½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹", - "next": "Ī•Ļ€ĻŒĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹", + "next": "Ī•Ļ€ĻŒĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹", "pause": "Ī Ī±ĻĻƒĪ·", "play": "ĪˆĪ½Ī±ĻĪ¾Ī·", "previous": "Ī ĻĪæĪ·Ī³ĪæĻĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹", "remove": "Ī‘Ļ†Ī±ĪÆĻĪµĻƒĪ·", - "selectTrack": "Ī•Ļ€Ī¹Ī»ĪæĪ³Ī® ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ" + "selectTrack": "Ī•Ļ€Ī¹Ī»ĪæĪ³Ī® ĪŗĪæĪ¼Ī¼Ī±Ļ„Ī¹ĪæĻ", + "showCoverArt": "Ī ĻĪæĪ²ĪæĪ»Ī® Ī•Ī¾Ļ‰Ļ†ĻĪ»Ī»ĪæĻ…" }, "message": { "automaticPlay": "Ī¤Īæ ĪµĻ€ĻŒĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹ ĪøĪ± Ī¾ĪµĪŗĪ¹Ī½Ī®ĻƒĪµĪ¹ ĻƒĪµ Ī¼ĪµĻĪ¹ĪŗĪ¬ Ī“ĪµĻ…Ļ„ĪµĻĻŒĪ»ĪµĻ€Ļ„Ī±ā€¦", - "radio": "Ī¤Ī± Ī½Ī­Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± ĪøĪ± Ļ€ĻĪæĻƒĻ„ĪÆĪøĪµĪ½Ļ„Ī±Ī¹ ĪµĪ“ĻŽ Ī±Ļ…Ļ„ĻŒĪ¼Ī±Ļ„Ī±." + "radio": "Ī¤Ī± Ī½Ī­Ī± ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹Ī± ĪøĪ± Ļ€ĻĪæĻƒĻ„ĪÆĪøĪµĪ½Ļ„Ī±Ī¹ ĪµĪ“ĻŽ Ī±Ļ…Ļ„ĻŒĪ¼Ī±Ļ„Ī±.", + "webglUnsupported": "Ī¤Īæ Ļ€ĻĻŒĪ³ĻĪ±Ī¼Ī¼Ī± Ļ€ĪµĻĪ¹Ī®Ī³Ī·ĻƒĪ®Ļ‚ ĻƒĪ±Ļ‚ Ī“ĪµĪ½ Ļ†Ī±ĪÆĪ½ĪµĻ„Ī±Ī¹ Ī½Ī± Ļ…Ļ€ĪæĻƒĻ„Ī·ĻĪÆĪ¶ĪµĪ¹ Ļ„Īæ WebGL2." }, "meta": { "end": "Ī¤Ī­Ī»ĪæĻ‚", "queuePosition": "ĪšĪæĪ¼Ī¼Ī¬Ļ„Ī¹ {index} Ī±Ļ€ĻŒ {length}", "startTime": "00:00", "unknownAlbum": "Ī†Ī³Ī½Ļ‰ĻƒĻ„Īæ Ī¬Ī»Ī¼Ļ€ĪæĻ…Ī¼", - "unknownArtist": "Ī†Ī³Ļ‰ĻƒĻ„ĪæĻ‚ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" + "unknownArtist": "Ī†Ī³Ī½Ļ‰ĻƒĻ„ĪæĻ‚ ĪŗĪ±Ī»Ī»Ī¹Ļ„Ī­Ļ‡Ī½Ī·Ļ‚" + }, + "warning": { + "connectivity": "ĪœĻ€ĪæĻĪµĪÆ Ī½Ī± Ī­Ļ‡ĪµĻ„Īµ Ļ€ĻĻŒĪ²Ī»Ī·Ī¼Ī± ĻƒĻ…Ī½Ī“ĪµĻƒĪ¹Ī¼ĻŒĻ„Ī·Ļ„Ī±Ļ‚." } }, "RemoteSearchForm": { @@ -148,23 +198,29 @@ "submit": "Ī„Ļ€ĪæĪ²ĪæĪ»Ī®" }, "header": { - "chooseInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚" + "chooseInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚", + "failure": "Ī”ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ…Ī½Ī±Ļ„Ī® Ī· ĻƒĻĪ½Ī“ĪµĻƒĪ· ĻƒĻ„Īæ ĻƒĻ…Ī³ĪŗĪµĪŗĻĪ¹Ī¼Ī­Ī½Īæ URL" } }, "ShortcutsModal": { "button": { "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" }, + "header": { + "modal": "Ī£Ļ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚ Ļ€Ī»Ī·ĪŗĻ„ĻĪæĪ»ĪæĪ³ĪÆĪæĻ…" + }, "shortcut": { "audio": { "clearQueue": "ĪšĪ±ĪøĪ¬ĻĪ¹ĻƒĪ¼Ī± ĪæĻ…ĻĪ¬Ļ‚", "decreaseVolume": "ĪœĪµĪÆĻ‰ĻƒĪ· Ī­Ī½Ļ„Ī±ĻƒĪ·Ļ‚", "label": "Ī£Ļ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚ Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®Ļ‚", + "playPrevious": "Ī ĻĪæĪ·Ī³ĪæĻĪ¼ĪµĪ½Īæ ĪŗĪæĪ¼Ī¼Ī¬Ļ„Ī¹", "shuffleQueue": "Ī¤Ļ…Ļ‡Ī±ĪÆĪ± Ī±Ī½Ī±Ļ€Ī±ĻĪ±Ī³Ļ‰Ī³Ī®", "toggleMute": "Ī£ĪÆĪ³Ī±ĻƒĪ·" }, "general": { - "label": "Ī“ĪµĪ½Ī¹ĪŗĪ­Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚" + "label": "Ī“ĪµĪ½Ī¹ĪŗĪ­Ļ‚ ĻƒĻ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĪ¹Ļ‚", + "show": "Ī•Ī¼Ļ†Ī¬Ī½Ī¹ĻƒĪ· Ī“Ī¹Ī±ĪøĪ­ĻƒĪ¹Ī¼Ļ‰Ī½ ĻƒĻ…Ī½Ļ„ĪæĪ¼ĪµĻĻƒĪµĻ‰Ī½ Ļ€Ī»Ī·ĪŗĻ„ĻĪæĪ»ĪæĪ³ĪÆĪæĻ…" } } }, From 96d25ff25dde2d7cf6ad93561a5ad7a1693e0618 Mon Sep 17 00:00:00 2001 From: omarmaciasmolina <omarmaciasmolina@gmail.com> Date: Tue, 17 Oct 2023 12:55:25 +0000 Subject: [PATCH 182/371] Translated using Weblate (Catalan) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ca/ --- front/src/locales/ca.json | 169 +++++++++++++++++++++++++------------- 1 file changed, 112 insertions(+), 57 deletions(-) diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index a49a0f6ba..b450e8df1 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -5,9 +5,9 @@ "components": { "About": { "description": { - "findApp": "Utilitzeu Funkwhale en d'altres terminals amb les nostres aplicacions", + "findApp": "Utilitzeu Funkwhale en d'altres terminals amb les nostres aplicacions.", "funkwhale": "Aquest pod funciona amb Funkwhale, un projecte impulsat per la comunitat que us permet escoltar i compartir mĆŗsica i Ć udio en una xarxa oberta descentralitzada.", - "publicContent": "Escolteu els Ć lbums pĆŗblics i les llistes de reproducciĆ³ compartides en aquest pod", + "publicContent": "Escolteu els Ć lbums pĆŗblics i les llistes de reproducciĆ³ compartides en aquest pod.", "quota": "Els usuaris dā€™aquest pod tambĆ© aconsegueixen % {quota} dā€™emmagatzematge gratuĆÆt per penjar el seu propi contingut!", "signup": "Registra't ara per fer un seguiment dels teus favorits, crear llistes de reproducciĆ³, descobrir contingut nou i molt mĆ©s!" }, @@ -18,6 +18,9 @@ "publicContent": "Explorar el contingut pĆŗblic", "signup": "InscripciĆ³" }, + "help": { + "closedRegistrations": "Les inscripcions estan tancades en aquest pod. Podeu registrar-vos en un altre pod mitjanƧant l'enllaƧ segĆ¼ent." + }, "link": { "findOtherPod": "Trobar una altra instĆ ncies", "learnMore": "AprĆØn mĆ©s" @@ -27,7 +30,7 @@ "loggedIn": "Ja t'has registrat!" }, "placeholder": { - "noDescription": "DescripciĆ³ no disponible." + "noDescription": "DescripciĆ³ no disponible" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -71,9 +74,9 @@ }, "notApplicable": "No disponible", "placeholder": { - "noDescription": "DescripciĆ³ no disponible.", - "noRules": "Sense regles disponibles.", - "noTerms": "No hi ha termes disponibles." + "noDescription": "DescripciĆ³ no disponible", + "noRules": "Sense regles disponibles", + "noTerms": "No hi ha termes disponibles" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -106,6 +109,9 @@ "statistics": "EstadĆ­stiques", "welcome": "Benvinguts a { podName }!" }, + "help": { + "registrationsClosed": "Les inscripcions estan tancades en aquest pod. Podeu registrar-vos en un altre pod mitjanƧant l'enllaƧ segĆ¼ent." + }, "link": { "findOtherPod": "Trobar una altra instĆ ncies", "funkwhale": "Visitar funkwhale.audio", @@ -115,7 +121,7 @@ "label": "Aplicacions mĆ²bils" }, "publicContent": { - "description": "Escolteu els Ć lbums pĆŗblics i les llistes de reproducciĆ³ compartides en aquest pod", + "description": "Escolteu els Ć lbums pĆŗblics i les llistes de reproducciĆ³ compartides en aquest pod.", "label": "Explorar el contingut pĆŗblic" }, "rules": "Regles del servidor", @@ -126,7 +132,7 @@ "viewMore": "Veure mĆ©s ā€¦" }, "placeholder": { - "noDescription": "DescripciĆ³ no disponible." + "noDescription": "DescripciĆ³ no disponible" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -154,6 +160,7 @@ }, "header": { "failure": "La pista no s'ha pogut carregar", + "noSources": "La pista no tĆ© fonts disponibles.", "radio": "EstĆ s escoltant la rĆ dio" }, "label": { @@ -165,17 +172,22 @@ "next": "Pista segĆ¼ent", "pause": "Pausa", "play": "Reproduir", + "populatingRadio": "S'estĆ  recuperant la pista de rĆ dio...", "previous": "Pista anterior", "queue": "Cua de reproducciĆ³", "remove": "Retirar", "restart": "Pista segĆ¼ent", - "selectTrack": "Selecciona una pista" + "selectTrack": "Selecciona una pista", + "showCoverArt": "Mostra la portada", + "showVisualizer": "Mostra el visualitzador MoonDrop" }, "message": { "automaticPlay": "La segĆ¼ent pista serĆ  reproduĆÆda automĆ ticament en pocs segons ā€¦", - "radio": "Les noves pistes s'afegiran automĆ ticament aquĆ­." + "radio": "Les noves pistes s'afegiran automĆ ticament aquĆ­.", + "webglUnsupported": "Sembla que el vostre navegador no suporta WebGL2." }, "meta": { + "end": "Fi", "queuePosition": "Pista { index } de { length }", "startTime": "00:00", "unknownAlbum": "ƀlbum desconegut", @@ -192,7 +204,8 @@ "search": "Buscar" }, "description": { - "fediverse": "Utilitzeu aquest formulari per recuperar un objecte allotjat en algun altre lloc en la fediverse." + "fediverse": "Utilitzeu aquest formulari per recuperar un objecte allotjat en algun altre lloc en la fediverse.", + "rss": "Utilitzeu aquest formulari per subscriure's a un canal RSS des del seu URL." }, "error": { "fetchFailed": "No es pot recuperar aquest objecte" @@ -235,6 +248,7 @@ "url": "AdreƧa de la instĆ ncia" }, "message": { + "currentConnection": "Actualment esteu connectat a {0}. Si continueu, se us desconnectarĆ  de la vostra instĆ ncia actual i se suprimiran totes les vostres dades locals.", "newUrl": "Ara utilitzeu la instĆ ncia de Funkwhale a { url }" } }, @@ -288,6 +302,7 @@ "language": "Idioma", "main": "MenĆŗ principal", "play": "Reprodueix aquesta pista", + "reports": "Informes pendents de revisiĆ³", "theme": "Tema" }, "link": { @@ -317,7 +332,7 @@ "save": "Guardar" }, "header": { - "error": "Error guardant els canvis", + "error": "Error guardant els canvis.", "image": "Imatge actual" }, "message": { @@ -377,11 +392,12 @@ }, "ChannelForm": { "header": { - "error": "Error guardant el canal" + "error": "Error desant el canal." }, "help": { "discography": "Publiqueu mĆŗsica que feu com ara una bonica discografia d'Ć lbums o senzills.", "podcast": "Allotja els teus episodis i mantĆ©n la teva comunitat actualitzada.", + "podcastFields": "S'utilitza per als camps itunes:email i itunes:name requerits per certes plataformes com Spotify o iTunes.", "username": "S'utilitza en URLs i per seguir aquest canal a la federaciĆ³. No es pot canviar mĆ©s tard." }, "label": { @@ -395,7 +411,8 @@ "owner": "Propietari", "podcast": "Podcasts", "subcategory": "Subcategoria", - "tags": "Etiquetes" + "tags": "Etiquetes", + "username": "Identificador al Fedivers" }, "legend": { "purpose": "Per a quĆØ s'utilitzarĆ  aquest canal?" @@ -459,7 +476,7 @@ }, "PlayButton": { "button": { - "addToPlaylist": "Afegir a la llista de reproducciĆ³ ā€¦", + "addToPlaylist": "Afegir a la llista de reproducciĆ³", "addToQueue": "Afegir a la cua de reproducciĆ³ actual", "discretePlay": "Reproduir", "episodeDetails": "Detalls de l'episodi", @@ -510,7 +527,7 @@ "labels": { "next": "SegĆ¼ent pista", "pause": "Pausa", - "play": "Play", + "play": "ReproducciĆ³", "previous": "Pista anterior" } }, @@ -598,7 +615,7 @@ "Modal": { "button": { "addToFavorites": "Afegir a favorits", - "addToPlaylist": "Afegir a la llista de reproducciĆ³ ā€¦", + "addToPlaylist": "Afegir a la llista de reproducciĆ³", "addToQueue": "Afegir a la cua de reproducciĆ³", "albumDetails": "Nou Ć lbum", "artistDetails": "Artistes ocults", @@ -622,7 +639,7 @@ "Modal": { "button": { "addToFavorites": "Afegir a favorits", - "addToPlaylist": "Afegir a la llista de reproducciĆ³ ā€¦", + "addToPlaylist": "Afegir a la llista de reproducciĆ³", "addToQueue": "Afegir a la cua de reproducciĆ³", "albumDetails": "Nou Ć lbum", "artistDetails": "Artistes ocults", @@ -657,8 +674,12 @@ }, "auth": { "ApplicationEdit": { + "button": { + "regenerateToken": "Regenerar testimoni" + }, "header": { "appDetails": "Detalls de l'aplicaciĆ³", + "appSecretWarning": "Guardeu una cĆ²pia d'aquest testimoni en un lloc segur.", "editApp": "Editar l'aplicaciĆ³" }, "help": { @@ -693,6 +714,7 @@ "redirectUri": "URI de redirecciĆ³", "scopes": { "description": "Comprovar els Ć mbits pare ā€œLlegirā€ o ā€œEscriureā€ implica lā€™accĆ©s a tots els Ć mbits fill que en deriven.", + "label": "ƀmbits", "read": { "description": "AccĆ©s a llegir nomĆ©s les dades d'utilitzaciĆ³", "label": "Llegir" @@ -724,7 +746,7 @@ "writeOnly": "NomĆ©s d'escriptura" }, "help": { - "copyCode": "Se us mostrarĆ  un codi per copiar i enganxar a lā€™aplicaciĆ³.", + "copyCode": "Se us mostrarĆ  un codi per copiar i enganxar a lā€™aplicaciĆ³", "pasteCode": "Copia i enganxa el codi de seguiment a la vostra aplicaciĆ³:", "redirect": "Es redirigirĆ  a { 0 }" }, @@ -768,7 +790,7 @@ "unauthenticated": "Actualment esteu connectat com a { username }" }, "link": { - "login": "Iniciar sessiĆ³" + "login": "Iniciar sessiĆ³!" }, "message": { "loggedIn": "Actualment esteu connectat com a { username }" @@ -819,6 +841,7 @@ }, "contentFilters": "Els filtres de contingut us ajuden a amagar el contingut que no voleu veure al servei.", "deleteAccount": "Podeu suprimir de manera permanent i irreversible el vostre compte i totes les dades associades mitjanƧant el formulari segĆ¼ent. Se us demanarĆ  confirmaciĆ³.", + "plugins": "Utilitzeu connectors per ampliar Funkwhale i obtenir funcions addicionals.", "yourApps": "Aquesta Ć©s la llista d'aplicacions que has creat." }, "header": { @@ -866,7 +889,7 @@ "content": { "logout": "Es tancarĆ  la sessiĆ³ dā€™aquest compte i haurĆ s dā€™iniciar sessiĆ³ amb la nou", "subsonic": "La vostra contrasenya Subsonic es canviarĆ  a una altra nova i aleatĆ²ria, i us iniciarĆ  la sessiĆ³ des dels dispositius que utilitzen la contrasenya antiga de Subsonic", - "warning": "Canviar la teva contrasenya tindrĆ  les segĆ¼ents conseqĆ¼ĆØncies:" + "warning": "Canviar la teva contrasenya tindrĆ  les segĆ¼ents conseqĆ¼ĆØncies" }, "header": "Canviar la teva contrasenya?" }, @@ -1030,7 +1053,7 @@ }, "SubscribeButton": { "help": { - "auth": "Ɖs possible que hagueu de subscriure-vos aquesta biblioteca per veure'n el contingut." + "auth": "Ɖs possible que hagueu de subscriure-vos a aquesta biblioteca per veure'n el contingut" }, "title": { "subscribe": "Subscriu-te", @@ -1098,7 +1121,7 @@ }, "meta": { "files": "{ n } fitxer | { n } fitxers", - "quota": "Espai dā€™emmagatzematge restant:" + "quota": "Espai dā€™emmagatzematge restant: {space}" } } }, @@ -1124,7 +1147,7 @@ }, "message": { "needsRefresh": "S'ha actualitzat el contingut, refresca per veure el contingut actualitzat", - "success": "L'acciĆ³ { action } estĆ  en marxa en { n } element | L'acciĆ³ { action } estĆ  en marxa en { n } elements" + "success": "L'acciĆ³ { action } estĆ  en marxa en { n } element | L'acciĆ³ { action } estĆ  en marxa en { n } elements" }, "modal": { "performAction": { @@ -1164,10 +1187,10 @@ "write": "Escriu" }, "empty": { - "noContent": "No hi ha res a previsualitzar." + "noContent": "No hi ha res a previsualitzar" }, "help": { - "markdown": "Es pot utilitzar la sintaxi Markdown." + "markdown": "Es pot utilitzar la sintaxi Markdown" }, "placeholder": { "input": "Escriu alguna cosa aquĆ­ā€¦" @@ -1428,7 +1451,7 @@ "AlbumDropdown": { "button": { "cancel": "Cancelar", - "delete": "Suprimir ā€¦", + "delete": "Suprimir", "edit": "Editar", "embed": "Incrustar", "more": "MĆ©s ā€¦" @@ -1631,7 +1654,7 @@ "suggest": "Enviar suggerĆØncies" }, "empty": { - "suggestEdit": "Suggereix un canvi mitjanƧant el formulari segĆ¼ent." + "suggestEdit": "Suggereix un canvi mitjanƧant el formulari segĆ¼ent" }, "header": { "failure": "Error trametent les modificaions", @@ -1664,6 +1687,7 @@ }, "header": { "failure": "Error al enviar l'informe", + "local": "Penja mĆŗsica des de '~/el teu emmagatzematge local", "server": "Estat de la importaciĆ³", "status": "Estat de la importaciĆ³" }, @@ -1681,7 +1705,7 @@ "listener": "Aquesta pĆ gina et demana que confirmis que vols sortir - Ć©s possible que no es guardin les dades que has introduĆÆt.", "local": { "copyright": "No pengis contingut amb drets d'autor en una biblioteca pĆŗblica, en cas contrari, podries infringir la llei", - "format": "L'arxiu de mĆŗsica que has carregat estĆ  ben etiquetat.", + "format": "L'arxiu de mĆŗsica que heu carregat estĆ  en format OGG, Flac, MP3 or AIFF", "message": "EstĆ s apunt de carregar mĆŗsica a la teva biblioteca. Abans de comenƧar, assegurat de:", "tag": "L'arxiu de mĆŗsica que has carregat estĆ  ben etiquetat." } @@ -1694,6 +1718,7 @@ "size": "Mida", "status": "Estat" }, + "progress": "{percent}%", "status": { "pending": "Pendent", "uploaded": "Carregat", @@ -1859,7 +1884,7 @@ "TrackBase": { "button": { "cancel": "Cancelar", - "delete": "Suprimir ā€¦", + "delete": "Suprimir", "download": "Descarregar", "edit": "Editar", "embed": "Incrustar", @@ -1884,6 +1909,10 @@ "header": "Incrusta aquesta pista a la teva pĆ gina web" } }, + "subtitle": { + "with-uploader": "Penjat per {0} el {1}", + "without-uploader": "Penjat a {0}" + }, "title": "Pista" }, "TrackDetail": { @@ -1913,7 +1942,8 @@ }, "track": { "bitrate": { - "label": "Taxa de bits" + "label": "Taxa de bits", + "value": "{bitrate}/s" }, "codec": "Codec", "downloads": "Descarregar", @@ -1928,7 +1958,7 @@ "suggest": "Suggereix una canvi en aquesta pista" }, "message": { - "remote": "Aquest objecte Ć©s gestionat per un altre servidor, no el podeu editar." + "remote": " Ā·Aquest objecte Ć©s gestionat per un altre servidor, no el podeu editar." } }, "radios": { @@ -1975,6 +2005,7 @@ "Filter": { "cancelButton": "Cancelar", "excludeLabel": "Excloure", + "matchingTracks": "0 pistes que coincideixen amb el filtre | {n} filtre de coincidĆØncia de pistes | {n} pistes que coincideixen amb el filtre", "matchingTracksModalHeader": "Pistes coincidents amb el filtre", "removeButton": "Retirar" } @@ -2448,7 +2479,7 @@ "modal": { "delete": { "content": { - "warning": "Aquesta acciĆ³ Ć©s irreversible." + "warning": "Aquesta acciĆ³ Ć©s irreversible" }, "header": "Suprimir la regla de moderaciĆ³?" } @@ -2459,7 +2490,7 @@ "rejectMedia": "No descarregueu cap fitxer multimĆØdia (Ć udio, portada, avatar del compte, ā€¦) des d'aquest compte o domini. AixĆ² tambĆ© eliminarĆ  el contingut existent.", "silenceActivity": "Amagar el contingut del compte o domini, excepte pels seguidors.", "silenceNotifications": "Eviteu que el compte o el domini desencadenin notificacions, llevat dels seguidors.", - "summary": "Explica perquĆØ apliques aquesta regla. En funciĆ³ de la configuraciĆ³ de la vostra instĆ ncia, aixĆ² us ajudarĆ  a recordar per quĆØ heu actuat aixĆ­ en aquest compte o aquest domini i que es pot mostrar pĆŗblicament per ajudar als usuaris a entendre quines sĆ³n les normes de moderaciĆ³." + "summary": "Explica perquĆØ apliques aquesta regla. En funciĆ³ de la configuraciĆ³ de la vostra instĆ ncia, aixĆ² us ajudarĆ  a recordar per quĆØ heu actuat aixĆ­ en aquest compte o aquest domini i que es pot mostrar pĆŗblicament per ajudar als usuaris a entendre quines sĆ³n les normes de moderaciĆ³." } }, "InstancePolicyModal": { @@ -2581,6 +2612,7 @@ "internalNotes": "Notes internes", "pending": "Pendent", "refused": "Rebutjat", + "resolutionDate": "Data de resoluciĆ³", "status": "Estat" } } @@ -2630,7 +2662,7 @@ "label": "Ordenar" }, "pagination": { - "results": "Esperant el resultat ā€¦ | Esperant el resultat ā€¦" + "results": "Es mostren zero resultats | Es mostra un resultat | Es mostren els resultats del {start} al {end} del {total}" }, "placeholder": { "search": "Cercar per nom d'usuari, correu electrĆ²nic, codi, ā€¦" @@ -2662,7 +2694,7 @@ "label": "Ordenar" }, "pagination": { - "results": "Esperant el resultat ā€¦ | Esperant el resultat ā€¦" + "results": "Es mostren zero resultats | Es mostra un resultat | Es mostren els resultats del {start} al {end} del {total}" }, "permission": { "library": "Biblioteca", @@ -2740,7 +2772,10 @@ "email": "Utilitzarem aquesta adreƧa de correu electrĆ²nic per si hem de contactar amb vosaltres sobre aquest informe.", "forwardToDomain": "Reenvia una copa anĆ²nima del teu informe al servidor que allotja aquest element.", "message": "Utilitzeu aquest camp per proporcionar un context addicional al moderador que gestionarĆ  l'informe.", - "modal": "Utilitzeu aquest formulari per enviar un informe al nostre equip de moderaciĆ³." + "modal": "Utilitzeu aquest formulari per enviar un informe al nostre equip de moderaciĆ³" + }, + "error": { + "nodeinfoFetch": "No es pot obtenir la informaciĆ³ del node: {error}" }, "header": { "disabled": "Els informes anĆ²nims estan deshabilitats, si us plau inicia sessiĆ³ per a enviar l'informe.", @@ -2888,8 +2923,14 @@ }, "radios": { "Button": { + "startArtistsRadio": "Inicia les artistes de rĆ dio", + "startPlaylistsRadio": "Inicia les llistes de reproducciĆ³ de rĆ dio", "startRadio": "Reprodueix la pista", - "stopRadio": "Parar la rĆ dio" + "startTagsRadio": "Inicia les etiquetes de rĆ dio", + "stopArtistsRadio": "Atura les artistes de rĆ dio", + "stopPlaylistsRadio": "Atura les llistes de reproducciĆ³ de rĆ dio", + "stopRadio": "Parar la rĆ dio", + "stopTagsRadio": "Atura les etiquetes de rĆ dio" }, "Card": { "button": { @@ -2979,12 +3020,13 @@ "label": "Categoria" }, "summary": { - "label": "Bio" + "label": "Biografia" } }, "filters": { "accessedDate": "Data d'accĆ©s", "albumTitle": "Nom de l'Ć lbum", + "appliedDate": "Data aplicada", "artistName": "Nom de l'artista", "bitrate": "Taxa de bits", "creationDate": "Data de creaciĆ³", @@ -2994,6 +3036,7 @@ "expirationDate": "Data de caducitat", "firstSeen": "Data de descoberta", "followers": "Seguidors", + "handledDate": "Data tractada", "itemsCount": "Elements", "lastActivity": "ƚltima activitat", "lastSeen": "Data de la darrera visita", @@ -3013,6 +3056,7 @@ "label": "Modificacions" }, "favorites": { + "description": "AccĆ©s als preferits", "label": "Preferides" }, "filters": { @@ -3052,6 +3096,7 @@ "label": "Informes" }, "security": { + "description": "AccĆ©s a la configuraciĆ³ de seguretat, com ara contrasenya i autoritzaciĆ³", "label": "Seguretat" } } @@ -3116,7 +3161,7 @@ "useReportConfigs": { "account": { "label": "Compte", - "summary": "Bio" + "summary": "Biografia" }, "album": { "label": "ƀlbum", @@ -3161,10 +3206,13 @@ } }, "useErrorHandler": { + "errorReportMessage": "Per ajudar-nos a entendre per quĆØ va passar, adjunteu una descripciĆ³ detallada del que vau fer que va provocar l'error.", "errorReportTitle": "S'ha produit un error inesperat.", + "leaveFeedback": "Deixa un comentari", "unexpectedError": "S'ha produit un error inesperat." }, "useThemeList": { + "browserDefault": "Navegador predeterminat", "darkTheme": "Fosc", "lightTheme": "Clar" } @@ -3176,7 +3224,10 @@ }, "sentry": { "allow": "Permetre", - "deny": "Denegar" + "deny": "Denegar", + "funkwhaleInstance": "La instĆ ncia oficial de Glitchtip de Funkwhale", + "message": "Les traces de la pila es compartiran amb { 0 } per ajudar-nos a entendre com i quan es produeixen els errors.", + "title": "Per millorar la qualitat dels nostres serveis, ens agradaria recopilar informaciĆ³ sobre errors durant la sessiĆ³." }, "serviceWorker": { "actions": { @@ -3193,7 +3244,7 @@ "submit": "Entesos!" }, "empty": { - "notifications": "No hi ha notificacions." + "notifications": "No hi ha notificacions per mostrar" }, "header": { "funkwhaleSupport": "T'agrada Funkwhale?", @@ -3638,7 +3689,8 @@ }, "audioContent": { "bitrate": { - "label": "Taxa de bits" + "label": "Taxa de bits", + "value": "{bitrate}/s" }, "cachedSize": "Mida de la memĆ²ria cau", "duration": "Durada", @@ -3657,7 +3709,7 @@ "addPolicy": "Afegir una nova polĆ­tica de moderaciĆ³" }, "description": { - "policy": "Les regles de moderaciĆ³ t'ajudaran a controlar com la vostra instĆ ncia interactua amb un domini o un compte determinat." + "policy": "Les regles de moderaciĆ³ t'ajudaran a controlar com la vostra instĆ ncia interactua amb un domini o un compte determinat" }, "header": { "accountData": "Dades del compte", @@ -3745,7 +3797,7 @@ "removeFromAllowList": "Eliminar de la llista d'autoritzacions" }, "description": { - "policy": "Les regles de moderaciĆ³ t'ajudaran a controlar com la vostra instĆ ncia interactua amb un domini o un compte determinat." + "policy": "Les regles de moderaciĆ³ t'ajudaran a controlar com la vostra instĆ ncia interactua amb un domini o un compte determinat" }, "header": { "activePolicy": "Aquest domini estĆ  subjecta a normes de moderaciĆ³ especĆ­fiques", @@ -3790,7 +3842,8 @@ "value": "Error obtenint informaciĆ³ del node" }, "software": { - "label": "Programari" + "label": "Programari", + "value": "{name} ({version})" }, "totalUsers": "Usuaris totals" } @@ -3866,7 +3919,7 @@ "label": "Ordenar" }, "placeholder": { - "search": "Cercar per nom d'usuariā€¦" + "search": "Cercar per nom d'usuari" }, "title": "Peticions de l'usuari" } @@ -3887,7 +3940,7 @@ "auth": { "Callback": { "header": { - "loggingIn": "Carregant les biblioteques ā€¦" + "loggingIn": "Iniciant sessiĆ³ā€¦" } }, "EmailConfirm": { @@ -3903,7 +3956,7 @@ "login": "Iniciar la sessiĆ³" }, "message": { - "success": "Ara podeu utilitzar el servei sense limitacions." + "success": "Ara podeu utilitzar el servei sense limitacions" }, "title": "Confirma el teu correu electrĆ²nic" }, @@ -3988,7 +4041,7 @@ "header": { "channels": "Canals", "libraries": "Biblioteques de l'usuari", - "sharedLibraries": "Aquest usuari ha compartit les biblioteques que segueix." + "sharedLibraries": "Aquest usuari ha compartit les segĆ¼ents biblioteques" }, "link": { "addNew": "Afegeix nou" @@ -4092,7 +4145,7 @@ "processing": "Funkwhale estĆ  processant les pujades i es publicaran ben aviat." }, "meta": { - "progress": "CĆ rregues processades:" + "progress": "CĆ rregues processades: {finished}/{total}" } }, "SubscriptionsList": { @@ -4224,7 +4277,7 @@ "update": "Actualitzar la biblioteca" }, "description": { - "library": "Les biblioteques t'ajuden a organitzar i compartir la teva colĀ·lecciĆ³ de mĆŗsica. Pots pujar-la a Funkwahale i compartir-la amb els teus amics i familiars.", + "library": "Les biblioteques t'ajuden a organitzar i compartir la teva colĀ·lecciĆ³ de mĆŗsica. Pots pujar-la a Funkwahale i compartir-la amb els teus amics i familiars.", "visibility": "Pots compartir la teva biblioteca amb altres persones, independentment de la seva visibilitat." }, "header": { @@ -4278,6 +4331,7 @@ "currentUsage": "{ current } usats del { max } permesos", "errored": "Arxius erronis", "pending": "Fitxers pendents", + "percentUsed": "{progress}%", "skipped": "Arxius ignorats" }, "link": { @@ -4326,10 +4380,10 @@ "scanPending": "AnĆ lisi pendent", "scanProgress": "Analitzant ā€¦ ({ progress }%)", "scanSuccess": "AnĆ lisis realitzat", - "sharingLink": "Compartir enllaƧ" + "sharingLink": "Compartint enllaƧ" }, "link": { - "scan": "Analitzar ara", + "scan": "Analitzar ara Ā· ", "scanDetails": "Detalls" }, "message": { @@ -4337,8 +4391,8 @@ "scanSkipped": "Lā€™anĆ lisi sā€™ha omĆØs (lā€™anĆ lisi anterior Ć©s massa recent)" }, "meta": { - "failedTracks": "Pistes fallides:", - "lastUpdate": "ƚltima actualitzaciĆ³:", + "failedTracks": "Pistes fallides: {tracks}", + "lastUpdate": "ƚltima actualitzaciĆ³: Ā· ", "tracks": "{ n } pista | { n } pistes" }, "modal": { @@ -4447,7 +4501,7 @@ "instance": "Restringit", "private": "Privat", "public": "PĆŗblic", - "sharingLink": "Compartir enllaƧ" + "sharingLink": "Compartint enllaƧ" }, "link": { "albums": "ƀlbums", @@ -4544,6 +4598,7 @@ "noTracks": "Encara no s'ha afegit cap pista a aquesta rĆ dio" }, "header": { + "radio": "RĆ dio que contĆ© {tracks} canƧons, per ", "tracks": "Pistes" }, "modal": { From e2824225924e20fc3c983b4db116c2a56bf85b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quentin=20PAG=C3=88S?= <quentinantonin@free.fr> Date: Fri, 17 Nov 2023 10:55:46 +0000 Subject: [PATCH 183/371] Translated using Weblate (Catalan) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ca/ --- front/src/locales/ca.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index b450e8df1..909080331 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -1273,12 +1273,12 @@ }, "UserLink": { "link": { - "username": "{'@'}{usuari}" + "username": "{'@'}{username}" } }, "UserMenu": { "label": { - "language": "Idioma", + "language": "Llengua", "shortcuts": "Dreceres de teclat", "theme": "Canviar tema" }, From ab15803be0801f56000e7e867faec2785f057d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Quentin=20PAG=C3=88S?= <quentinantonin@free.fr> Date: Fri, 17 Nov 2023 10:54:13 +0000 Subject: [PATCH 184/371] Translated using Weblate (Occitan) Currently translated at 97.8% (2135 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/oc/ --- front/src/locales/oc.json | 8315 +++++++++++++++++++------------------ 1 file changed, 4181 insertions(+), 4134 deletions(-) diff --git a/front/src/locales/oc.json b/front/src/locales/oc.json index e90f3d311..4e9bac612 100644 --- a/front/src/locales/oc.json +++ b/front/src/locales/oc.json @@ -1,1435 +1,63 @@ { + "App": { + "loading": "Cargament..." + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } vĆ²l accedir a vĆ²stre compte Funkwhale", - "authorize": "Autorizar una tĆØrƧa aplicacion", - "authorizeFailure": "Error en autorizar lā€™aplicacion", - "fetchFailure": "Error en recuperar las donadas de lā€™aplicacion", - "allScopes": "AccĆØs complĆØt", - "readOnly": "Lectura sola", - "writeOnly": "Escritura sola" - }, - "title": "Autorizar lā€™aplicacion", - "button": { - "authorize": "Autorizar { app }" - }, - "help": { - "pasteCode": "Copiatz-pegatz lo cĆ²di seguent dins lā€™aplicacion :", - "redirect": "Seretz mandat a { 0 }", - "copyCode": "Vos mostrarem un cĆ²di de copiar-pegar dins lā€™aplicacion." - }, - "message": { - "unknownPermissions": "Lā€™aplicacion demanda tanben las autorizacions desconegudas seguentas :" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "AccĆØs desactivat", - "passwordUpdated": "Senhal actualizat", - "unavailable": "Lā€™API Subsonic es pas disponibla per aquesta instĆ ncia Funkwhale." - }, - "button": { - "confirmDisable": "Desactivar lā€™accĆØs", - "disable": "Desactivar lā€™accĆØs via Subsonic", - "newPassword": "Demandar un nĆ²u senhal", - "confirmNewPassword": "Demandar un senhal" - }, - "modal": { - "disableSubsonic": { - "header": "Desactivar lā€™accĆØs a lā€™API Subsonic ?", - "content": { - "warning": "AquĆ² desactivarĆ  complĆØtament lā€™accĆØs a lā€™API Subsonic de vĆ²stre compte estant." - } - }, - "newPassword": { - "header": "Demandar un nĆ²u senhal per lā€™API Subsonic ?", - "content": { - "warning": "AquĆ² vos desconnectarĆ  de totes los periferics quā€™utilizan aqueste senhal." - } - } - }, - "link": { - "apps": "AprenĆØtz a utilizar Funkwhale amb dā€™autras aplicacions" - }, - "header": { - "error": "Error", - "subsonic": "Senhal de lā€™API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale es compatible amb dā€™autres lectors de musica compatibles amb lā€™API Subsonic.", - "paragraph3": "Prā€™aquĆ², accedir a Funkwhale dā€™un client estant demanda un senhal diferent que podĆØtz configurar Ƨai-jos.", - "paragraph2": "PodĆØtz los utilizar per profeitar de vĆ²stras listas de lectura e de vĆ²stra musica en mĆ²de fĆ²ra linha sus vĆ²stre mobil, tableta, per exemple." - } - }, - "label": { - "subsonicField": "Senhal de lā€™API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Geton dā€™accĆØs", - "appId": "ID de lā€™aplicacion", - "appSecret": "Secret de lā€™aplicacion" - }, - "header": { - "appDetails": "Detalhs de lā€™aplicacion", - "editApp": "Modificar lā€™aplicacion" - }, - "help": { - "appDetails": "Lā€™ID e lo secrĆØt de lā€™aplicacion son de donadas vertadiĆØrament sensiblas e devon ĆØsser consideradas coma de senhals. Partegetz-las pas amb degun." - }, - "link": { - "settings": "Tornar als paramĆØtres" - }, - "title": "Modificar lā€™aplicacion", - "button": { - "regenerateToken": "Tornar generar lo geton" - } - }, - "Settings": { - "title": "ParamĆØtres del compte", - "header": { - "accountSettings": "ParamĆØtres del compte", - "authorizedApps": "Aplicacions autorizadas", - "avatar": "Avatar", - "changeEmail": "Cambiar mon adreƧa electronica", - "changePassword": "Cambiar lo senhal", - "contentFilters": "Filtres de contengut", - "deleteAccount": "Suprimir mon compte", - "hiddenArtists": "Artistas amagats", - "plugins": "Moduls", - "settingsUpdated": "ParamĆØtres actualizats", - "emailFailure": "PodĆØm pas cambiar vĆ²stra dā€™adreƧa mail", - "accountFailure": "PodĆØm pas suprimir vĆ²stre compte", - "noApps": "AvĆØtz pas cap dā€˜aplicacion connectada a aqueste compte.", - "noPersonalApps": "AvĆØtz pas cap dā€˜aplicacion creada pel moment.", - "yourApps": "VĆ²stras aplicacions", - "avatarFailure": "Lā€™avatar pĆ²t pas ĆØsser enregistrat", - "passwordFailure": "Lo senhal pĆ²t pas ĆØsser cambiat", - "updateFailure": "Impossible dā€™actualizar vĆ²stres paramĆØtres" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplicacion", - "permissions": "Autorizacions" - } - }, - "yourApps": { - "header": { - "application": "Aplicacion", - "creationDate": "Data de creacion", - "scopes": "Visibilitats" - } - }, - "artists": { - "header": { - "creationDate": "Data de creacion", - "name": "Nom" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Senhal actual", - "newEmail": "AdreƧa electronica novĆØla", - "newPassword": "NĆ²u senhal", - "password": "Senhal" - }, - "button": { - "password": "Cambiar lo senhal", - "delete": "Suprimir", - "deleteAccountConfirm": "Suprimir mon compte", - "deleteAccount": "Suprimir mon compteā€¦", - "disableSubsonic": "Desactivar lā€™accĆØs", - "edit": "Modificar", - "refresh": "Actualizar", - "remove": "Tirar", - "removeApp": "Suprimir lā€™aplicacion", - "revoke": "Revocar", - "revokeAccess": "Revocar lā€™accĆØs", - "update": "Actualizar", - "updateSettings": "Actualizar los paramĆØtres" - }, - "description": { - "changeEmail": "Cambiar lā€™adreƧa email ligada a vĆ²stre compte. Mandarem una confirmacion a lā€™adreƧa novĆØla.", - "changePassword": { - "paragraph1": "Lā€™actualizacion de vĆ²stra senhal cambiarĆ  tanben lo de lā€™API Subsonic se nā€™avĆØtz un.", - "paragraph2": "Vos caldrĆ  actualizar lo senhal sus totes los clients quā€™utilizan aqueste senhal." - }, - "contentFilters": "Los filtres de contengut vos ajudan a amagar los contenguts que volĆØtz pas veire sus aqueste servici.", - "authorizedApps": "AquĆ² es la lista de las aplicacions quā€™an accĆØs a las donadas de vĆ²stre compte.", - "yourApps": "AquĆ² es la lista de las aplicacions quā€™avĆØtz creadas.", - "plugins": "Utilizatz dā€™extension per agrandir las possibilitat de Funkwhale e obtĆ©ner mai de foncionalitats.", - "deleteAccount": "PodĆØtz suprimir vĆ²stre compte e totas las donadas dā€™un biais permanent e irreversible en utilizar lo formulari Ƨai-jos. Vos demandarem una confirmacion." - }, - "modal": { - "changePassword": { - "header": "Cambiar lo senhal ?", - "content": { - "warning": "Lo cambiament de senhal a las consequĆ©ncias seguentas :", - "logout": "SĆØtz per ĆØsser desconnectat dā€™aquesta session e vos caldrĆ  vos connectar amb lo nĆ²u senhal", - "subsonic": "VĆ²stre senhal Subsonic serĆ  remplaƧat per un nĆ²u aleatĆ²ri, aquĆ² vos desconnectarĆ  de totes los periferics quā€™utilizan lā€™ancian senhal" - } - }, - "deleteAccount": { - "header": "VolĆØtz suprimir vĆ²stre compte ?", - "content": { - "warning": "AquĆ² es irreversible e suprimirĆ  dā€™un biais permanent vĆ²stras donadas de nĆ²stres servidors. Seretz immediatament desconnectat." - } - }, - "deleteApp": { - "header": "Suprimir lā€™aplicacion Ā« { application } Ā» ?", - "content": { - "warning": "AquĆ² escafarĆ  aquesta aplicacion per totjorn e totes los getons ligats." - } - }, - "revokeApp": { - "header": "Revocar lā€™accĆØs a lā€™aplicacion Ā« { application } Ā» ?", - "content": { - "warning": "AquĆ² empacha aquesta aplicacion dā€™accedir al servici en vĆ²stre nom." - } - } - }, - "help": { - "noApps": "Sā€™autorizatz de tĆØrƧas aplicacions a accedir a vĆ²stras donadas, serĆ n listadas aquĆ­.", - "changePassword": "MercĆ©s de verificar que lo senhal es corrĆØct", - "noPersonalApps": "Marcatz-ne ua per integrar Funkwhale amb de tĆØrƧas aplicacions." - }, - "link": { - "managePlugins": "Gerir los moduls", - "newApp": "Crear una nĆ²va aplicacion" - }, - "warning": { - "deleteAccount": "VĆ²stre compte serĆ  suprimit de nĆ²stres servidors dā€™aquĆ­ unas minutas. Avisarem tanben los autres servidors que pĆ²don aver una cĆ²pia de certanas donda per que realizen la supression. Remarcatz quā€™unes dā€™aqueles pĆ²don ĆØsser fĆ²ra linha o voler pas o far." - }, - "message": { - "currentEmail": "VĆ²stra adreƧa electronica actuala es { email }.", - "confirmDelete": "VĆ²stra demanda de supression es estada enviada, vĆ²stre compte e lo contengut serĆ n lĆØu suprimits" - } - }, - "Logout": { - "header": { - "confirm": "VolĆØtz vertadiĆØrament vos desconnectar ?", - "unauthenticated": "SĆØtz pas connectat actualament" - }, - "link": { - "login": "Connectatz-vos !" - }, - "title": "Desconnexion", - "button": { - "logout": "ƒc-ben, desconnectatz-me !" - }, - "message": { - "loggedIn": "SĆØtz connectat coma { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Tornar als paramĆØtres" - }, - "title": "Crear una nĆ²va aplicacion" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Causir lā€™autorizacion Ā«LecturaĀ» o Ā«EscrituraĀ» sul parent implica lā€™accĆØs a totes los jos elements correspondents.", - "read": { - "label": "Lectura", - "description": "AccĆØs lectura sola de las donadas utilizaire" - }, - "write": { - "label": "Escritura", - "description": "AccĆØs escritura sola de las donadas utilizaire" - } - }, - "name": "Nom", - "redirectUri": "URI de redireccion" - }, - "button": { - "create": "Crear una aplicacion", - "update": "Actualizar lā€™aplicacion" - }, - "help": { - "redirectUri": "Utilizatz Ā« urn:ietf:wg:oauth:2.0:oob Ā» coma URI de redireccion se vĆ²stra aplicacion es pas disponibla en linha." - }, - "header": { - "failure": "PodĆØm pas enregistrar vĆ²stras modificacions" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crear un compte", - "resetPassword": "ReĆÆnicializar lo senhal" - }, - "placeholder": { - "username": "EscrivĆØtz vĆ²stre nom dā€™utilizaire o corriĆØl" - }, - "help": { - "approvalRequired": "Se vos sĆØtz marcat fa pas gaire, benlĆØu que vos cal esperar que nĆ²stra cĆ²la de moderacion repasse vĆ²stre compte, o verifique vĆ²stra adreƧa electronica.", - "invalidCredentials": "MercĆ©s de verificar que lo nom dā€™utilizaire e lo senhal son corrĆØctes e asseguratz-vos dā€™aver verificat vĆ²stre corriĆØl." - }, - "button": { - "login": "Connexion" - }, - "label": { - "password": "Senhal", - "username": "Nom dā€™utilizaire o corriĆØl" - }, - "header": { - "loginFailure": "Error pendent la connexion" - } - }, - "SignupForm": { - "button": { - "create": "Crear mon compte" - }, - "label": { - "email": "AdreƧa electronica", - "password": "Senhal", - "username": "Nom dā€™utilizaire" - }, - "placeholder": { - "email": "Picatz vĆ²stra adreƧa electronica", - "invitation": "EscrivĆØtz vĆ²stre cĆ²di dā€™invitacion (pas sensible a la cassa)", - "username": "EscrivĆØtz vĆ²stre nom dā€™utilizaire" - }, - "header": { - "login": "Connectatz-vos a vĆ²stre compte Funkwhale", - "signupFailure": "Lo compte pĆ²t pas ĆØsser creat." - }, - "message": { - "registrationClosed": "Las inscripcions son tampadas sus aquesta instĆ ncia. Auretz de tĆ©ner un cĆ²di dā€™invitacion per vos marcar.", - "requiresReview": "Las inscripcions sus aquesta instĆ ncia son dobĆØrtas, mas lā€™equipa de moderacion repassa las demanda.", - "awaitingReview": "VĆ²stra demanda de compte es estada corrĆØctament enviada. Vos notificarem per corriĆØl un cĆ²p que nĆ²stra equipa de moderacion aja repassat la demanda.", - "accountCreated": "Lo compte es estat corrĆØctament creat. Volgatz verificar vĆ²stra bĆ³stia de recepcion abans dā€™ensajar de vos connectar." - } - }, - "Plugin": { - "link": { - "documentation": "Documentacion" - }, - "label": { - "pluginEnabled": "Activada", - "library": "BibliotĆØca" - }, - "header": { - "failure": "Error en enregistrant lo modul" - }, - "description": { - "library": "BibliotĆØca ont los fichiĆØrs devon ĆØsser importats." - }, - "button": { - "save": "Enregistrar", - "scan": "Explorar" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } utilizaire actiu | { n } utilizaires actius", - "hoursOfMusic": "ora de musica | oras de musica" + "description": { + "findApp": "Utilizar Funkwhale sus dā€™autres aparelhs amb nĆ²stra aplicacion.", + "funkwhale": "Funkwhale es un projĆØcte menat per una comunitat que vos permet dā€™escotar e partejar de musicas e de fichiĆØrs Ć udio dins dā€™un malhum descentralizat e dubĆØrt.", + "publicContent": "Escotar dā€™albums publics e de listas de lectura partejadas sus aqueste pod.", + "quota": "Los utilizaires dā€™aqueste pod an tanben { quota } dā€™espaci liure per enviar lor prĆ²pri contengut !", + "signup": "Marcatz-vos ara per garda una traƧa de vĆ²stres favorits, crear de lista de lectura, descobrir de nĆ²u contengut e encara mai !" }, "header": { - "funkwhale": "Una platafĆ²rma sociala per profeitar e partejar de musica", "aboutPod": "A prepaus dā€™aqueste pod", - "publicContent": "PercĆ³rrer lo contengut public", "findApp": "Trobar una aplicacion", + "funkwhale": "Una platafĆ²rma sociala per profeitar e partejar de musica", + "publicContent": "PercĆ³rrer lo contengut public", "signup": "Inscripcion" }, - "title": "A prepaus", "link": { "findOtherPod": "Trobar un autre pod", "learnMore": "Ne saber mai" }, - "description": { - "funkwhale": "Funkwhale es un projĆØcte menat per una comunitat que vos permet dā€™escotar e partejar de musicas e de fichiĆØrs Ć udio dins dā€™un malhum descentralizat e dubĆØrt.", - "publicContent": "Escotar dā€™albums publics e de listas de lectura partejadas sus aqueste pod.", - "signup": "Marcatz-vos ara per garda una traƧa de vĆ²stres favorits, crear de lista de lectura, descobrir de nĆ²u contengut e encara mai !", - "findApp": "Utilizar Funkwhale sus dā€™autres aparelhs amb nĆ²stra aplicacion.", - "quota": "Los utilizaires dā€™aqueste pod an tanben { quota } dā€™espaci liure per enviar lor prĆ²pri contengut !" - }, - "placeholder": { - "noDescription": "Cap de descripcion pas disponibla." - }, "message": { + "greeting": "Adiu {username}", "loggedIn": "SĆØtz ja connectat !" - } - }, - "Home": { - "stat": { - "activeUsers": "{ n } utilizaire actiu | { n } utilizaires actius", - "hoursOfMusic": "{ n } ora de musica | { n } oras de musica" }, - "header": { - "aboutFunkwhale": "A prepaus de Funkwhale", - "about": "A prepaus dā€™aqueste pod Funkwhale", - "contact": "Contacte", - "login": "Connexion", - "newChannels": "NĆ²vas cadenas", - "newAlbums": "Albums ajustats i a res", - "signup": "Inscripcion", - "statistics": "Estatisticas", - "links": "Ligams utils", - "welcome": "La benvengut a { podName } !" - }, - "link": { - "publicContent": { - "label": "PercĆ³rrer lo contengut public", - "description": "Escotar dā€™albums publics e de listas de lectura partejadas sus aqueste pod" - }, - "userGuides": { - "description": "DescobrissĆØtz tot Ć§Ć² que devĆØtz saber de Funkwhale e de sas foncionalitats", - "label": "Guida de lā€™utilizaire" - }, - "findOtherPod": "Trobar un autre pod", - "learnMore": "Ne saber mai", - "mobileApps": { - "label": "Aplicacions mobil", - "description": "Utilizar Funkwhale sus dā€™autres aparelhs amb nĆ²stra aplicacion" - }, - "rules": "RĆØglas del servidor", - "viewMore": "Ne veire maiā€¦", - "funkwhale": "Visitar funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics.", - "paragraph1": "Aqueste pod executa Funkwhale, un projĆØcte menat per una comunitat que vos permet dā€™escotar e partejar de musica e dā€™Ć udio dins un malhum descentralizat e liure." - }, - "signup": "Marcatz-vos ara per garda una traƧa de vĆ²stres favorits, crear de lista de lectura, descobrir de nĆ²u contengut e encara mai !", - "quota": "Los utilizaires dā€™aqueste pod an tanben { quota } dā€™espaci per enviar lor prĆ²pri contengut !" - }, - "title": "AcuĆØlh", "placeholder": { - "noDescription": "Cap de descripcion pas disponibla." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episĆ²di | { n } episĆ²dis", - "tracks": "{ n } pista | { n } pistas" - } - }, - "Widget": { - "button": { - "more": "Ne veire mai" - } - } + "noDescription": "Cap de descripcion pas disponibla" }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episĆ²di | { n } episĆ²dis", - "tracks": "{ n } pista | { n } pistas" - }, - "title": "Actualizat lo { date }" + "stat": { + "activeUsers": "{n} utilizaire actiu | {n} utilizaires actius", + "hoursOfMusic": "0 oras de musica | {n} ora de musica | {n} oras de musica" }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episĆ²di | { n } episĆ²dis" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - } - }, - "Widget": { - "button": { - "more": "Ne veire mai" - } - } - }, - "Player": { - "meta": { - "position": "({ index } sus { length })" - }, - "header": { - "player": "Lector Ć udio e contrarĆ²tle" - }, - "label": { - "clearQueue": "Voidar la fila", - "expandQueue": "Desplegar la fila", - "addArtistContentFilter": "Amagar lo contengut dā€™aqueste artistaā€¦", - "loopingDisabled": "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala.", - "loopingSingle": "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila.", - "loopingWholeQueue": "Repeticion de tota la fila, clicatz per desactivar la repeticion.", - "audioPlayer": "Lector mĆØdia", - "mute": "Copar lo son", - "nextTrack": "Pista seguenta", - "pause": "Pausa", - "play": "Legir", - "previousTrack": "Pista precedenta", - "shuffleQueue": "Mesclar la fila", - "unmute": "Restablir lo son" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Ajustar a la lista actuala", - "addToPlaylist": "Ajustar a la lista de lecturaā€¦", - "episodeDetails": "Detalhs de lā€™episĆ²di", - "hideArtist": "Amagar lo contengut dā€™aqueste artista", - "discretePlay": "Legir", - "playAlbum": "Legir lā€™album", - "playArtist": "Legir Ć§Ć² de lā€™artista", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "playPlaylist": "Legir la lista de lectura", - "startRadio": "Legir de canƧons similaras", - "playTrack": "Legir la pista", - "playTracks": "Legir las pistas", - "report": "Senhalarā€¦", - "trackDetails": "Detalhs de la pista" - }, - "title": { - "more": "Maiā€¦", - "unavailable": "Aquesta pista es pas disponibla dins cap de las bibliotĆØcas quā€™avĆØtz accĆØs" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Ajustar als favorits", - "addToPlaylist": "Ajustar a la lista de lecturaā€¦", - "addToQueue": "Ajustar a la lista", - "episodeDetails": "Detalhs de lā€™episĆ²di", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "startRadio": "Legir la pista", - "removeFromFavorites": "Tirar dels favorits", - "trackDetails": "Detalhs de la pista", - "albumDetails": "Veire lā€™album", - "artistDetails": "Veire lā€™artista", - "channelDetails": "Veire la cadena", - "seriesDetails": "Veire las serias" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar las accions de la pista" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Ajustar als favorits", - "addToPlaylist": "Ajustar a la lista de lecturaā€¦", - "addToQueue": "Ajustar a la lista", - "episodeDetails": "Detalhs de lā€™episĆ²di", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "startRadio": "Legir la pista", - "removeFromFavorites": "Tirar dels favorits", - "trackDetails": "Detalhs de la pista", - "albumDetails": "Veire lā€™album", - "artistDetails": "Veire lā€™artista", - "channelDetails": "Veire la cadena", - "seriesDetails": "Veire las serias" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artista", - "title": "TĆ­tol" - } - } - }, - "Widget": { - "empty": { - "noResults": "Cap de resultat pas trobat" - }, - "button": { - "more": "Ne veire mai" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar las accions de la pista" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Ajustar lo volum" - }, - "button": { - "mute": "Copar lo son", - "unmute": "Restablir lo son" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artista", - "category": { - "federation": "Federacion", - "podcasts": "Podcast" - }, - "search": "Recercar de contengut", - "tag": "Etiqueta", - "track": "Pista" - }, - "link": { - "more": "Mai de resultats šŸ”’", - "fediverse": "Recercar sul fediverse", - "rss": "Sā€™abonar a un podcast via RSS" - }, - "header": { - "noResults": "Cap de correspondĆ©ncia pas trobada" - }, - "placeholder": { - "search": "Recercar dā€™artistas, dā€™albums, de pistasā€¦" - }, - "empty": { - "noResults": "Pas cap de resultats per aquesta recĆØrca" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artistas", - "search": "Recercar de musica" - }, - "placeholder": { - "search": "Artista, album, pistaā€¦" - }, - "empty": { - "noAlbums": "Cap dā€™album correspond pas a vĆ²stra recĆØrca", - "noArtists": "Cap dā€™artista correspond pas a vĆ²stra recĆØrca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografia de lā€™artista", - "category": "Categoria", - "image": "Imatge de la cadena", - "description": "Descripcion", - "username": "Identificant del Fedivers", - "language": "Lenga", - "name": "Nom", - "email": "AdreƧa electronica del proprietari", - "owner": "Nom del proprietari", - "podcast": "Podcast", - "subcategory": "Subcategoria", - "tags": "Etiquetas" - }, - "placeholder": { - "name": "Nom crane de la cadena", - "username": "nomcranedelacadena" - }, - "header": { - "error": "Error en enregistrar la cadena" - }, - "help": { - "podcast": "Albergatz vĆ²stres episĆ²dis e mantenĆØtz vĆ²stre comunitat al fial.", - "discography": "Publicatz la musica que fasĆØtz coma una bona discografia dā€™albums e singles.", - "podcastFields": "Utilizat pels camps itunes:email e itunes:name, requerits per dā€™unas platafĆ²rmas coma Spotify o iTunes.", - "username": "Utilizat dins las URL e per seguir aquesta cadena sul Fedivers. O podĆØtz pas cambiar mai tard." - }, - "loader": { - "loading": "Cargament" - }, - "legend": { - "purpose": "A quĆ© servirĆ  aquesta cadena ?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Anullar la demanda dā€™abonament", - "follow": "Seguir", - "unfollow": "Quitar de seguir" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copiar" - }, - "help": { - "embed": "Copiatz / Pegatz aqueste cĆ²di al vĆ²stre site HTML", - "width": "Daissar void per un widget adaptatiu", - "anonymous": "MercĆ©s de contactar vĆ²stres administrators e de lor demandar dā€™actualizar lo paramĆØtres ligat." - }, - "label": { - "embed": "CĆ²di dā€™integracion", - "height": "Nautor del widget", - "width": "Largor del widget" - }, - "header": { - "preview": "Apercebut" - }, - "warning": { - "anonymous": "Lo partatge foncionarĆ  pas perque aqueste pod autoriza pas los utilizaires anonimes a accedir al contengut." - }, - "message": { - "copy": "TĆØxte copiat al quichapapiĆØr !" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Ne veire mai" - }, - "help": { - "subscribe": "Vos cal benlĆØu vos abonar a aquesta cadena per ne veire lo contengut." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Ne veire mai" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episĆ²di | { n } episĆ²dis", - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "addDescription": "Ajustar una descripcionā€¦" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } pista dins | { n } pistas dins", - "albums": "{ n } albums | { n } albums" - }, - "title": "Artista", - "button": { - "cancel": "Anullar", - "edit": "Modificar", - "embed": "Integrar", - "more": "Maiā€¦", - "play": "Legir totes los albums" - }, - "modal": { - "embed": { - "header": "Integrar aquesta pista a vĆ²stre site web" - } - }, - "link": { - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "discogs": "Recercar en Discogs", - "wikipedia": "Recercar sus WikipĆØdia", - "django": "Veire sul panĆØl dā€™admin de Django", - "domain": "Veire sus { domain }", - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } pista correspond als filtres seleccionats | { n } pistas correspondon als filtres seleccionats", - "builder": "Editor", - "created": "Nom de la rĆ dio", - "updated": "RĆ dio actualizada" - }, - "table": { - "filter": { - "header": { - "actions": "Accions", - "candidates": "Pistas candidatas", - "config": "Configuracion", - "exclude": "Exclure", - "name": "Nom del filtre" - } - } - }, - "button": { - "filter": "Ajustar lo filtre", - "save": "Enregistrar" - }, - "label": { - "filter": "Ajustar de filtres per dire de personalizar vĆ²stra rĆ dio", - "description": "Descripcion", - "public": "Mostrar publicament", - "name": "Nom de la rĆ dio" - }, - "placeholder": { - "description": "Ma descripcion trĆ²p crana", - "name": "Ma rĆ dio trĆ²p crana" - }, - "title": "Editor de rĆ dio", - "option": { - "filter": "Seleccionar un filtre" - }, - "description": { - "builder": "PodĆØtz utilizar aquesta interfĆ cia per realizar vĆ²stra prĆ²pria rĆ dio personalizada, que jogarĆ  las listas segon los critĆØris indicats." - } - }, - "Filter": { - "cancelButton": "Anullar", - "excludeLabel": "Exclure", - "removeButton": "Tirar", - "matchingTracksModalHeader": "Pistas correspondentas al filtre" - } - }, - "FileUpload": { - "tooltip": { - "network": "Una error de ret sā€™es producha en enviar aqueste fichiĆØr", - "size": "MandadĆ­s del fichiĆØr impossible, asseguratz-vos quā€™es pas trĆ²p pesuc", - "extension": "Tipe de fichiĆØr pas valid, asseguratz-vos dā€™enviar un fichiĆØr Ć udio. Las extensions compatiblas son { extensions }", - "retry": "Tornar ensajar", - "denied": "MandadĆ­s refusat, asseguratz-vos que lo fichiĆØr es pas trĆ²p grand e quā€™avĆØtz pas atenhut vĆ²stre quĆ²ta", - "timeout": "Temps de transferiment expirat, ensajatz tornamai" - }, - "table": { - "upload": { - "header": { - "actions": "Accions", - "filename": "Nom del fichiĆØr", - "size": "Talha", - "status": "Estatut" - }, - "status": { - "pending": "En espĆØra", - "uploaded": "Enviat", - "uploading": "MandadĆ­sā€¦" - } - } - }, - "button": { - "cancel": "Anullar", - "retry": "Tornar ensajar los mandadisses fracassats" - }, - "label": { - "uploadWidget": "Clicatz per causir los fichiĆØrs dā€™enviar o lisatz los fichiĆØrs o repertĆ²ris", - "remainingSpace": "Espaci liure", - "extensions": "Extensions compatiblas : { extensions }" - }, - "header": { - "failure": "Error en aviant lā€™import", - "server": "Estatut de lā€™import", - "status": "Estatut de lā€™import", - "local": "Importar de la musica de vĆ²stre emmagazinatge local" - }, - "link": { - "processing": "Tractament", - "uploading": "MandadĆ­s en cors", - "picard": "Vos recomandam dā€™utilizar lo logicial Picard per aquĆ² far." - }, - "description": { - "import": "Resultats de vĆ²stre lā€™import :", - "previousImport": "Resultats de vĆ²stre import precedent :" - }, - "message": { - "local": { - "format": "Los fichiĆØrs musicals que sĆØtz a enviar son al format OGG, Flac, MP3 o AIFF", - "tag": "Los fichiĆØrs musicals que sĆØtz a enviar son etiquetats coma cal.", - "message": "SĆØtz a man dā€™enviar de la musica a vĆ²stra bibliotĆØca. Abans de comenƧar, mercĆ©s de vos assegurar que :", - "copyright": "Envietz pas cap de contengut jos dreches a una bibliotĆØca publica, autrament enfranhĆØtz la lei" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Una descripcion pichona per explicar vĆ²stres cambiaments." - }, - "button": { - "cancel": "Anullar", - "clear": "Escafar", - "reset": "Tornar a la valor iniciala", - "showUnreviewed": "RestrĆ©nher a las modificacions pas repassadas", - "showAll": "Mostrar totas las modificacions", - "submit": "Enviar e aplicar la modificacion", - "new": "Enviar una modificacion de mai", - "suggest": "Enviar la suggestion" - }, - "header": { - "failure": "Error en enviar la modificacion", - "recentEdits": "Modificacions recentas", - "unreviewed": "Modificacions recentas en espĆØra de relectura", - "success": "La modificacion es estada corrĆØctament enviada." - }, - "notApplicable": "ND", - "empty": { - "suggestEdit": "Suggerir un cambiament en utilizar lo formulari Ƨai-jos." - }, - "label": { - "summary": "Resumit (opcional)" - }, - "message": { - "noPermission": "AvĆØtz pas lā€™autorizacion de modificar aqueste objĆØcte, mas podĆØtz suggerir de cambiaments. Un cĆ²p mandadas, las suggestions serĆ n repassadas abans validacion." - } - }, - "Albums": { - "link": { - "addMusic": "Ajustar musica" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "header": { - "browse": "PercĆ³rrer los albums" - }, - "placeholder": { - "search": "Picatz lo tĆ­tol de lā€™albumā€¦" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "label": { - "search": "Recercar", - "tags": "Etiquetas" - }, - "button": { - "search": "Recercar" - } - }, - "Artists": { - "button": { - "upload": "Ajustar musica", - "search": "Recercar" - }, - "label": { - "search": "Nom de lā€™artista", - "excludeCompilation": "Exclure las compilacions dā€™artistas", - "tags": "Etiquetas" - }, - "title": "Artistas", - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "header": { - "browse": "PercĆ³rrer los artistas" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "placeholder": { - "search": "Recercarā€¦" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artista", - "copyright": "Copyright", - "license": "LicĆ©ncia", - "series": "Seria", - "url": "URL", - "year": "An" - }, - "track": { - "bitrate": { - "label": "Debit" - }, - "codec": "Codec", - "downloads": "Telecargaments", - "duration": "Durada", - "size": "Talha" - } - }, - "header": { - "episode": "Detalhs de lā€™episĆ²di", - "library": "BibliotĆØcas associadas", - "playlists": "Listas de lectura associadas", - "release": "Detalhs de publicacion", - "track": "Detalhs de la pista" - }, - "notApplicable": "ND", - "description": { - "library": "Aquesta pista es presenta a las bibliotĆØcas seguentas :" - }, - "link": { - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artistas", - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" - }, - "header": { - "channels": "Cadenas", - "tracks": "Pistas" - } - }, - "ArtistDetail": { - "header": { - "album": "Albums dā€™aqueste artista", - "track": "Pistas novĆØlas dā€™aqueste artista", - "library": "BibliotĆØcas de lā€™utilizaire" - }, - "button": { - "more": "Ne cargar maiā€¦", - "filter": "Levar lo filtre" - }, - "link": { - "filter": "Validar mos filtres" - }, - "description": { - "library": "Aqueste artista es present a las bibliotĆØcas seguentas :" - }, - "message": { - "filter": "Amagatz lo contengut ligat a aqueste artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Una error sā€™es producha pendent lo processĆŗs de mandadĆ­s. Trobaretz mai dā€™informacion Ƨai-jos.", - "unknownError": { - "message": "Una error desconeguda sā€™es producha", - "label": "Error desconeguda" - }, - "invalidMetadata": { - "label": "Metadonada invalida", - "message": "La metadonada inclusa al fichiĆØr es invalida o de camps obligatĆ²ris son absents." - } - }, - "button": { - "close": "Tampar" - }, - "table": { - "error": { - "debug": "Informacions de debug", - "errorDetail": "Detalhs de lā€™error", - "errorType": "Tip dā€™error", - "help": "ObtĆ©ner dā€™ajuda" - } - }, - "header": { - "importDetail": "Detalhs de lā€™import" - }, - "link": { - "support": "Dobrir un fil de discutida dā€™assistĆ©ncia (donatz las informacions de desbugatge dins vĆ²stre messatge)", - "documentation": "LegissĆØtz nĆ²stra documentacion per aquesta error" - }, - "message": { - "importDetail": "Lo mandadĆ­s es encara en espĆØra e serĆ  lĆØu tractat pel servidor.", - "importSuccess": "Lo mandadĆ­s es estat corrĆØctament tractat pel servidor." - }, - "warning": { - "importSkipped": "Lo mandadĆ­s es estat sautat perque un que li sembla es ja disponible dins una de vĆ²stras bibliotĆØca." - } - }, - "EditCard": { - "button": { - "approve": "Validar", - "delete": "Suprimir", - "reject": "Regetar" - }, - "status": { - "approved": "Validat", - "applied": "Validada e aplicada", - "pending": "En espĆØra de validacion", - "rejected": "Regetat" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta rĆØgla de moderacion ?" - }, - "content": { - "warning": "La suggestion serĆ  complĆØtament tirada, aquesta accion es irreversibla." - } - }, - "table": { - "update": { - "header": { - "field": "Camp", - "newValue": "NĆ²va valor", - "oldValue": "Anciana valor" - }, - "notApplicable": "ND" - } - }, - "header": { - "modification": "Modificacion { id }" - }, - "link": { - "track": "Pista #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "header": { - "browse": "PercĆ³rrer los Podcasts" - }, - "button": { - "cancel": "Anullar", - "channel": "Crear una cadena", - "search": "Recercar", - "subscribe": "Sā€™abonar", - "feed": "Sā€™abonar al flux RSS" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" - }, - "label": { - "search": "TĆ­tol del podcast", - "tags": "Etiquetas" - }, - "title": "Podcasts", - "pagination": { - "results": "Resultats per pagina" - }, - "placeholder": { - "search": "Recercarā€¦" - }, - "modal": { - "subscription": { - "header": "Inscripcion" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "ƒrdre" - }, - "label": "ƒrdre" - }, - "header": { - "browse": "PercĆ³rrer las rĆ dios", - "instance": "RĆ dios de lā€™instĆ ncia", - "user": "RĆ dios dels utilizaires" - }, - "button": { - "add": "Crear una rĆ dio", - "create": "Crear vĆ²stra prĆ²pria rĆ dio" - }, - "placeholder": { - "search": "EscrivĆØtz un nom de rĆ dioā€¦" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" - }, - "title": "RĆ dios", - "pagination": { - "results": "Resultats per pagina" - }, - "label": { - "search": "Recercar" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Anullar", - "delete": "Suprimirā€¦", - "edit": "Modificar", - "embed": "Integrar", - "more": "Maiā€¦" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste album ?", - "content": { - "warning": "Aqueste album serĆ  tirat, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aqueste album a un site web" - } - }, - "link": { - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "discogs": "Recercar en Discogs", - "django": "Veire sul panĆØl dā€™admin de Django", - "domain": "Veire sus { domain }", - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Anullar", - "delete": "Suprimirā€¦", - "download": "Telecargar", - "edit": "Modificar", - "embed": "Integrar", - "more": "Maiā€¦", - "play": "Legir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta pista ?", - "content": { - "warning": "Aquesta pista serĆ  tirada, e mai totes los fichiĆØrs e donadas ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aquesta pista a un site web" - } - }, - "link": { - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "discogs": "Recercar en Discogs", - "wikipedia": "Recercar sus WikipĆØdia", - "django": "Veire sul panĆØl dā€™admin de Django", - "domain": "Veire sus { domain }" - }, - "title": "Pista" - }, - "AlbumEdit": { - "header": { - "edit": "Modificar aqueste album", - "suggest": "PodĆØm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objĆØcte es gerit per un autre servidor, podĆØtz pas lo modificar." - } - }, - "ArtistEdit": { - "header": { - "edit": "Modificar aqueste artista", - "suggest": "PodĆØm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objĆØcte es gerit per un autre servidor, podĆØtz pas lo modificar." - } - }, - "TrackEdit": { - "header": { - "edit": "Modificar aquesta pista", - "suggest": "PodĆØm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objĆØcte es gerit per un autre servidor, podĆØtz pas lo modificar." - } - }, - "AlbumDetail": { - "header": { - "episodes": "EpisĆ²dis", - "tracks": "Pistas", - "libraries": "BibliotĆØcas de lā€™utilizaire" - }, - "description": { - "libraries": "Aqueste album es present a las bibliotĆØcas seguentas :" - }, - "meta": { - "volume": "Volum { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importar" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Lā€™import a pas encara comenƧat" - } - }, - "Home": { - "title": "BibliotĆØca", - "header": { - "newChannels": "NĆ²vas cadenas", - "playlists": "Listas de lectura", - "recentlyAdded": "Ajustats i a res", - "recentlyFavorited": "Ajustadas als favorits i a res", - "recentlyListened": "Escotadas i a res" - } - }, - "TagSelector": { - "placeholder": { - "search": "Recercarā€¦" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favorit | { n } favorits" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "ƒrdre" - }, - "label": "ƒrdre" - }, - "link": { - "library": "PercĆ³rrer la bibliotĆØca" - }, - "loader": { - "loading": "Cargament dels favoritsā€¦" - }, - "empty": { - "noFavorites": "I a pas encara de pistas ajustadas a vĆ²stres favorits" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "title": "VĆ²stres favorits" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Ajustar als favorits", - "remove": "Tirar dels favorits" - }, - "label": { - "inFavorites": "Als favorits" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } fichiĆØr | { n } fichiĆØrs", - "quota": "Espaci liure restant :" - }, - "button": { - "cancel": "Anullar", - "close": "Tampar", - "finishLater": "Acabar mai tard", - "next": "Etapa seguenta", - "previous": "Etapa precedenta", - "publish": "Publicar", - "update": "Actualizar" - }, - "header": { - "uploadFiles": "FichiĆØrs dā€™enviar", - "processing": "Tractament dels mandadisses", - "publish": "Publicar Ć udio", - "uploadDetails": "Detalh de mandadĆ­s" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "label": { - "album": "Album", - "series": "Serias" - }, - "option": { - "none": "Cap" - } - }, - "LicenseSelect": { - "link": { - "license": "A prepaus dā€™aquesta licĆ©ncia" - }, - "label": { - "license": "LicĆ©ncia" - }, - "option": { - "none": "Cap" - } - }, - "UploadForm": { - "help": { - "license": "Ajustatz una licĆ©ncia a vĆ²stre mandadĆ­s per assegurar las libertats de vĆ²stre public." - }, - "label": { - "openBrowser": "PercĆ³rrerā€¦", - "channel": "Cadena" - }, - "message": { - "dragAndDrop": "Lisatz depausatz los fichiĆØrs aquĆ­ o dorbissĆØtz lo navegador per enviar de fichiĆØrs", - "pending": "AvĆØtz de brolhon de mandadisses en espĆØra de publicacion." - }, - "button": { - "edit": "Modificar", - "ignore": "Ignorar", - "remove": "Tirar", - "resume": "Reprendre", - "retry": "Tornar ensajar" - }, - "header": { - "error": "Error en publicar" - }, - "status": { - "errored": "Perturbat", - "pending": "En espĆØra", - "uploading": "MandadĆ­s en cors" - }, - "description": { - "extensions": "Extensions compatiblas : { extensions }" - }, - "warning": { - "quota": "AvĆØtz pas mai dā€™espaci per enviar los fichiĆØrs. MercĆ©s de contactar los moderators." - } - }, - "AlbumModal": { - "button": { - "cancel": "Anullar", - "create": "Crear" - }, - "header": { - "newAlbum": "Album novĆØl", - "newSeries": "NĆ²vas serias" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descripcion", - "position": "Posicions", - "tags": "Etiquetas", - "title": "TĆ­tol", - "image": "Imatge de la pista" - } - }, - "AlbumForm": { - "header": { - "error": "Error en crear" - }, - "label": { - "albumTitle": "TĆ­tol" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Sā€™abonar", - "unsubscribe": "Quitar de seguir" - }, - "help": { - "auth": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut" - } - } + "title": "A prepaus" }, "AboutPod": { - "stat": { - "hoursOfMusic": "ora de musica | oras de musica", - "activeUsers": "utilizaire actiu | utilizaires actius", - "albumsCount": "album | albums", - "artistsCount": "artista | artistas", - "listeningsCount": "escota | escotas", - "tracksCount": "pista | pistas" + "feature": { + "allowList": "Lista dā€™autorizacions", + "anonymousAccess": "AccĆØs anonim", + "federation": "Federacion", + "quota": "QuĆ²ta de mandadĆ­s", + "registrations": "Inscripcions", + "status": { + "closed": "Tampadas", + "disabled": "Desactivada", + "enabled": "Activada", + "open": "DubĆØrtas" + }, + "version": "Version de Funkwhale" + }, + "header": { + "about": "A prepaus dā€™aqueste pod", + "contact": "Contacte", + "features": "Foncionalitats", + "rules": "RĆØglas", + "statistics": "Estatisticas", + "terms": "TĆØrmes e politica de confidencialitat" }, - "title": "A prepaus", "link": { "about": "A prepaus dā€™aqueste pod", "features": "Foncionalitats", @@ -1438,360 +66,229 @@ "statistics": "Estatisticas", "terms": "TĆØrmes e politica de confidencialitat" }, - "header": { - "about": "A prepaus dā€™aqueste pod", - "contact": "Contacte", - "features": "Foncionalitats", - "rules": "RĆØglas", - "statistics": "Estatisticas", - "terms": "TĆØrmes e politica de confidencialitat" - }, - "feature": { - "allowList": "Lista dā€™autorizacions", - "anonymousAccess": "AccĆØs anonim", - "status": { - "closed": "Tampadas", - "disabled": "Desactivada", - "enabled": "Activada", - "open": "DubĆØrtas" - }, - "federation": "Federacion", - "version": "Version de Funkwhale", - "registrations": "Inscripcions", - "quota": "QuĆ²ta de mandadĆ­s" + "message": { + "contact": "Enviatz-nos un messatge : {'{{'} contactEmail {'}}'}" }, "notApplicable": "ND", "placeholder": { - "noDescription": "Cap de descripcion pas disponibla.", - "noRules": "Cap de rĆØgla pas disponibla.", - "noTerms": "Cap de condicion pas disponibla." + "noDescription": "Cap de descripcion pas disponibla", + "noRules": "Cap de rĆØgla pas disponibla", + "noTerms": "Cap de condicion pas disponibla" + }, + "stat": { + "activeUsers": "{0} utilizaire actiu | {0} utilizaires actius", + "albumsCount": "Cap dā€™albums | {n} album | {n} albums", + "artistsCount": "0 artistas | {n} artista | {n} artistas", + "hoursOfMusic": "0 oras de musica | {n} ora de musica | {n} oras de musica", + "listeningsCount": "{n} escota | {n} escotas", + "tracksCount": "{n} pista | {0} pistas" + }, + "title": "A prepaus" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Aqueste pod executa Funkwhale, un projĆØcte menat per una comunitat que vos permet dā€™escotar e partejar de musica e dā€™Ć udio dins un malhum descentralizat e liure.", + "paragraph2": "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics." + }, + "quota": "Los utilizaires dā€™aqueste pod an tanben {quota} dā€™espaci per enviar lor prĆ²pri contengut !", + "signup": "Marcatz-vos ara per garda una traƧa de vĆ²stres favorits, crear de lista de lectura, descobrir de nĆ²u contengut e encara mai !" + }, + "header": { + "about": "A prepaus dā€™aqueste pod Funkwhale", + "aboutFunkwhale": "A prepaus de Funkwhale", + "contact": "Contacte", + "links": "Ligams utils", + "login": "Connexion", + "newAlbums": "Albums ajustats i a res", + "newChannels": "NĆ²vas cadenas", + "signup": "Inscripcion", + "statistics": "Estatisticas", + "welcome": "La benvengut a {podName} !" + }, + "link": { + "findOtherPod": "Trobar un autre pod", + "funkwhale": "Visitar funkwhale.audio", + "learnMore": "Ne saber mai", + "mobileApps": { + "description": "Utilizar Funkwhale sus dā€™autres aparelhs amb nĆ²stra aplicacion", + "label": "Aplicacions mobil" + }, + "publicContent": { + "description": "Escotar dā€™albums publics e de listas de lectura partejadas sus aqueste pod.", + "label": "PercĆ³rrer lo contengut public" + }, + "rules": "RĆØglas del servidor", + "userGuides": { + "description": "DescobrissĆØtz tot Ć§Ć² que devĆØtz saber de Funkwhale e de sas foncionalitats", + "label": "Guida de lā€™utilizaire" + }, + "viewMore": "Ne veire maiā€¦" + }, + "placeholder": { + "noDescription": "Cap de descripcion pas disponibla" + }, + "stat": { + "activeUsers": "{n} utilizaire actiu | {n} utilizaires actius", + "hoursOfMusic": "{n} ora de musica | {n} oras de musica" + }, + "title": "AcuĆØlh" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Pagina pas trobada !" + }, + "link": { + "home": "Tornar a lā€™acuĆØlh" }, "message": { - "contact": "Enviatz-nos un messatge : {'{{'} contactEmail {'}}'}" + "pageNotFound": "O planhĆØm, la pagina demandada existĆ­s pas :" + }, + "title": "Pagina pas trobada" + }, + "Queue": { + "button": { + "clear": "Escafar", + "close": "Tampar", + "stopRadio": "Arrestar la rĆ dio" + }, + "header": { + "failure": "La pista pĆ²t pas ĆØsser cargada", + "radio": "Escotatz una rĆ dio" + }, + "label": { + "addArtistContentFilter": "Amagar lo contengut dā€™aqueste artistaā€¦", + "duration": "Durada", + "favorite": "Marcar la pista", + "next": "Pista seguenta", + "pause": "Pausa", + "play": "Legir", + "previous": "Pista precedenta", + "queue": "Fila", + "remove": "Tirar", + "restart": "RecomenƧar la pista", + "selectTrack": "Seleccionar pista" + }, + "message": { + "automaticPlay": "La pista seguenta serĆ  legida automaticament dins una estonaā€¦", + "radio": "Las novĆØlas pistas serĆ n automaticament ajustadas aquĆ­." + }, + "meta": { + "end": "Fin", + "queuePosition": "Pista ({index} de {length})", + "startTime": "00:00", + "unknownAlbum": "Album desconegut", + "unknownArtist": "Artista desconegut" + }, + "warning": { + "connectivity": "PoiriĆ” arribar quā€™ajatz de problĆØma de connexion." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } sus { total } element seleccionat | { n } sus { total } elements seleccionats", - "allSelected": "{ n } sus { total } element seleccionat | { n } sus { total } elements seleccionats", - "go": "Zo", - "launch": "Aviar", - "refresh": "Actualizar lo contengut de la tabla", - "select": "Seleccionar", - "selectAll": "Seleccionar totes los elements", - "selectElement": "Seleccionar un element | Seleccionar lā€™ensemble dels { n } elements", - "selectCurrentPage": "Seleccionar solament la pagina actuala" + "RemoteSearchForm": { + "button": { + "fediverse": "Fedivers", + "rss": "RSS", + "search": "Recercar" + }, + "description": { + "fediverse": "Utilizatz aqueste formulari per vos abonar a una cadena endacĆ²m sul fediverse.", + "rss": "Utilizatz aqueste formulari per vos abonar a un flux RSS via una adreƧa URL." + }, + "error": { + "fetchFailed": "Se pĆ²t pas recuperar aqueste objĆØcte" + }, + "header": { + "fetchFailed": "Error en recuperar lā€™objĆØcte" + }, + "label": { + "fediverse": { + "fieldLabel": "ObjĆØcte del Fedivers", + "title": "Sā€™abonar a un podcast albergat sul fediverse" }, - "message": { - "success": "Lā€™action { action } es estada lanƧada corrĆØctament sus { n } element | Lā€™action { action } es estada lanƧada corrĆØctament sus { n } elements", - "needsRefresh": "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn" - }, - "label": { - "actions": "Accions", - "performAction": "Executar las accions" - }, - "modal": { - "performAction": { - "header": "VolĆØtz lanƧar lā€™accion Ā« { action } Ā» sus { n } element ? | VolĆØtz lanƧar lā€™accion Ā« { action } Ā» sus { n } elements ?", - "content": { - "warning": "Aquesta operacion pĆ²t afectar mantun elements o pĆ²t pas ĆØsser anullada, mercĆ©s de verificar sā€™es ben Ć§Ć² que desiratz." - } - } - }, - "header": { - "error": "Error en tractar lā€™accion" + "rss": { + "fieldLabel": "EmplaƧament del flux RSS", + "fieldPlaceholder": "https://siteweb.exemple/rss.xml", + "title": "Sā€™abonar al flux RSS dā€™un podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "A prepaus", - "chat": "Sala de discutida", - "docs": "Documentacion", - "forum": "Forum", - "support": "Ajuda", - "git": "TraƧador de problĆØmas", - "login": "Connexion", - "logout": "Desconnexion", - "notifications": "Notificacions", - "profile": "Perfil", - "settings": "ParamĆØtres", - "signup": "Inscripcion" - }, - "label": { - "shortcuts": "Acorchis claviĆØr", - "language": "Lenga", - "theme": "TĆØma" - } - }, - "UserModal": { - "link": { - "about": "A prepaus", - "chat": "Sala de discutida", - "forum": "Forum", - "support": "Ajuda", - "git": "TraƧador de problĆØmas", - "login": "Connexion", - "logout": "Desconnexion", - "notifications": "Notificacions", - "profile": "Perfil", - "settings": "ParamĆØtres", - "signup": "Inscripcion" - }, - "label": { - "shortcuts": "Acorchis claviĆØr", - "language": "Lenga", - "theme": "TĆØma" - }, - "header": { - "options": "Opcions" - }, - "button": { - "switchInstance": "Utilizar una autra instĆ ncia" - } - }, - "DangerousButton": { - "button": { - "cancel": "Anullar", - "confirm": "Confirmar" - }, - "header": { - "confirm": "VolĆØtz confirmar aquesta accion ?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Anullar", - "edit": "Modificar", - "less": "Ne veire mens", - "more": "Ne veire mai", - "update": "Actualizar la descripcion" - }, - "header": { - "failure": "Error en actualizar la descripcion" - }, - "empty": { - "noDescription": "Cap de descripcion pas disponibla" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Escafar" - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercarā€¦" - } - }, - "CollapseLink": { - "button": { - "collapse": "Plegar", - "expand": "Desplegar" - } - }, - "CopyInput": { - "button": { - "copy": "Copiar" - }, - "message": { - "success": "TĆØxte copiat al quichapapiĆØr !" - } - }, - "LoginModal": { - "link": { - "login": "Connexion", - "signup": "Inscripcion" - }, - "header": { - "unauthenticated": "Desconnectat" - }, - "description": { - "noAccess": "AvĆØtz pas accĆØs a aquĆ² !" - } - }, - "ContentForm": { - "help": { - "markdown": "PodĆØtz utilizar la sintaxi Markdown." - }, - "empty": { - "noContent": "I a pas res a previsualizar." - }, - "button": { - "preview": "Apercebut", - "write": "Escriure" - }, - "placeholder": { - "input": "EscrivĆØtz quicĆ²m aquĆ­ā€¦" - } - }, - "EmptyState": { - "header": { - "noResults": "Cap de resultat pas trobat." - }, - "button": { - "refresh": "Actualizar" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG o JPG. Las dimensions devon ĆØsser entre 1400x1400px e 3000x3000px. La talha maximala autorizada es 5 Mo." - }, - "button": { - "remove": "Tirar" - }, - "label": { - "upload": "Enviar un nĆ²u imatgeā€¦" - }, - "loader": { - "uploading": "MandadĆ­s del fichiĆØrā€¦" - }, - "header": { - "failure": "Impossible de salvagardar vĆ²stra pĆØƧa-junta" - } - }, - "ExpandableDiv": { - "button": { - "less": "Ne veire mens", - "more": "Ne veire mai" - } + "warning": { + "unsupported": "Aqueste tipe dā€™objĆØcte es pas encara compatible" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - } + "SetInstanceModal": { + "button": { + "cancel": "Anullar", + "submit": "Validar" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } es ja dins { 1 }." - }, - "button": { - "addDuplicate": "Ajustar prā€™aquĆ²", - "addToPlaylist": "Ajustar a aquesta lista de lectura", - "addTrack": "Ajustar una pista", - "cancel": "Anullar", - "edit": "Modificar" - }, - "header": { - "addToPlaylist": "Ajustar a la lista de lectura", - "available": "Listas de lectura disponiblas", - "manage": "Gerir las listas de lectura", - "noResults": "Cap de resultat correspondent a aqueste filtre", - "addFailure": "PodĆØm pas ajustar aquesta pista a una lista de lectura" - }, - "table": { - "edit": { - "header": { - "edit": "Modificar", - "lastModification": "DarriĆØra modificacion", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "placeholder": { - "filterPlaylist": "EscrivĆØtz lo nom de lista de lectura" - }, - "label": { - "filter": "Filtrar" - }, - "empty": { - "noPlaylists": "Cap de lista de lectura creada pel moment" - } + "header": { + "chooseInstance": "CausissĆØtz vĆ²stra instĆ ncia", + "failure": "Connexion impossibla a lā€™URL donada", + "suggestions": "Suggestions" }, - "Editor": { - "button": { - "addDuplicate": "Ajustar prā€™aquĆ²", - "clear": "Escafar la lista de lectura", - "copy": "Copiar las pistas de la fila a la lista de lectura", - "insertFromQueue": "Inserir de la fila estant ({ n } pista) | Inserir de la fila estant ({ n } pistas)" - }, - "error": { - "sync": "Una error sā€™es producha en enregistrar vĆ²stras modificacions" - }, - "message": { - "sync": "Cambiament sincronizat amb lo servidor" - }, - "modal": { - "clearPlaylist": { - "header": "VolĆØtz voidar la lista de lectura Ā« { playlist } Ā» ?", - "content": { - "warning": "AquĆ² escafarĆ  totas las pistas de la lista de lectura e poirĆ  pas ĆØsser anullat." - } - } - }, - "help": { - "reorder": "Lisatz las linhas per triar las pistas de la lista de lectura" - }, - "header": { - "editor": "Editor de lista de lectura" - }, - "warning": { - "duplicate": "Unas pistas de la fila son ja dins aquesta lista de lectura :" - }, - "loading": { - "sync": "Sincronizacion dels cambiaments amb lo servidorā€¦" - } + "help": { + "notFunkwhaleServer": "Lā€™adreƧa donada es pas un servidor Funkwhale", + "selectPod": "Per contunhar, seleccionatz una instĆ ncia Funkwhale que volĆØtz vos i connectar. Picatz lā€™adreƧa dirĆØctament, o seleccionatz-ne una dins las en suggestion.", + "serverDown": "Se pĆ²t que lo servidor siĆ” atudat" }, - "TrackPlaylistIcon": { - "button": { - "add": "Ajustar a la lista de lecturaā€¦" - } + "label": { + "url": "URL de lā€™instĆ ncia" }, - "Form": { - "header": { - "createPlaylist": "Crear una nĆ²va lista de lectura", - "createSuccess": "Lista de lectura creada", - "updateSuccess": "Lista de lectura actualizada", - "createFailure": "Lista de lectura creada" - }, - "button": { - "create": "Crear la lista de lectura", - "update": "Actualizar la lista de lectura" - }, - "placeholder": { - "name": "Ma lista de lectura trĆ²p crana" - }, - "label": { - "name": "Nom de la lista de lectura", - "visibility": "Visibilitat de la lista de lectura" - } - }, - "Widget": { - "button": { - "create": "Crear una lista de lectura", - "more": "Ne veire mai" - }, - "placeholder": { - "noPlaylists": "Cap de lista de lectura creada pel moment" - } + "message": { + "newUrl": "Utilizatz una instĆ ncia Funkwhale a {url}" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } acceptĆØt vĆ²stra demanda de seguiment de la bibliotĆØca Ā« { library } Ā»", - "libraryFollow": "{ username } seguĆ­s vĆ²stra bibliotĆØca Ā« { library } Ā»", - "libraryPendingFollow": "{ username } vĆ²l seguir vĆ²stra bibliotĆØca Ā« { library } Ā»" + "ShortcutsModal": { + "button": { + "close": "Tampar" + }, + "header": { + "modal": "Acorchis claviĆØr" + }, + "shortcut": { + "audio": { + "clearQueue": "Voidar la fila", + "decreaseVolume": "Reduire lo volum", + "expandQueue": "Espandir fila/vista del lector", + "increaseVolume": "Aumentar lo volum", + "label": "Acorchis del lector Ć udio", + "playNext": "Legir la pista seguenta", + "playPause": "Pausar/Legir la pista actuala", + "playPrevious": "Legir la pista precedenta", + "seekBack30": "Recular de 30s", + "seekBack5": "Recular de 5s", + "seekForward30": "AvanƧar de 30s", + "seekForward5": "AvanƧar de 5s", + "shuffleQueue": "Mesclar la fila", + "toggleFavorite": "Ajustar/Tirar dels favorits", + "toggleLoop": "Cambiar lo tipe de lectura de la lista", + "toggleMute": "Copar/Restablir lo son" }, - "button": { - "approve": "Validar", - "markRead": "Marcar coma legidas", - "markUnread": "Marcar coma pas legidas", - "reject": "Regetar" + "general": { + "focus": "Anar a la recĆØrca", + "label": "Acrochis generals", + "show": "Mostrar los acorchis claviĆØr disponibles", + "unfocus": "Sortir de la recĆØrca" } } }, "Sidebar": { + "header": { + "administration": "Administracion", + "explore": "Explorar", + "library": "Ma bibliotĆØca", + "main": "Navigacion principala", + "more": "Mai" + }, + "label": { + "add": "Ajustar de contengut", + "administration": "Administracion", + "edits": "FichiĆØrs en espĆØra", + "follows": "Demandas dā€™abonament en espĆØra", + "language": "Lenga", + "main": "MenĆŗ mĆ ger", + "play": "Legir aquesta pista", + "theme": "TĆØma" + }, "link": { "about": "A prepaus dā€™aquesta instĆ ncia", "albums": "Albums", @@ -1810,43 +307,1968 @@ "search": "Recercar", "settings": "ParamĆØtres", "users": "Utilizaires" - }, - "label": { - "add": "Ajustar de contengut", - "administration": "Administracion", - "language": "Lenga", - "main": "MenĆŗ mĆ ger", - "follows": "Demandas dā€™abonament en espĆØra", - "edits": "FichiĆØrs en espĆØra", - "play": "Legir aquesta pista", - "theme": "TĆØma" - }, - "header": { - "administration": "Administracion", - "explore": "Explorar", - "main": "Navigacion principala", - "more": "Mai", - "library": "Ma bibliotĆØca" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Enregistrar" + }, + "header": { + "error": "Error en enregistrar los paramĆØtres.", + "image": "Imatge actual" + }, + "message": { + "success": "ParamĆØtres corrĆØctament modificats." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Ajustar un camp novĆØl", + "edit": "Modificar lo formulari", + "preview": "Apercebut del formulari" + }, + "help": { + "additionalFields": "Camps addicionals pel formulari. Se veson sonque se la validacion de lā€™inscripcion es activada.", + "helpText": "Un tĆØxte opcional a afichar a la debuta del formulari dā€™inscripcion." + }, + "label": { + "additionalField": "Camp addicional", + "additionalFields": "Camps addicionals", + "delete": "Suprimir", + "helpText": "TĆØxt dā€™ajuda", + "moveDown": "DesplaƧar enbĆ s", + "moveUp": "DesplaƧar ennaut" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Accions", + "label": "Nom del camp", + "required": "ObligatĆ²ri", + "type": "Tipe de camp" + }, + "required": { + "false": "Non", + "true": "ƒc" + }, + "type": { + "long": "TĆØxt grand", + "short": "TĆØxt cort" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{n} episĆ²di | {n} episĆ²dis", + "tracks": "{n} pista | {n} pistas" + }, + "title": "Actualizat lo {date}" + }, + "ChannelEntries": { + "help": { + "subscribe": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut." + } + }, + "ChannelForm": { + "header": { + "error": "Error en enregistrar la cadena." + }, + "help": { + "discography": "Publicatz la musica que fasĆØtz coma una bona discografia dā€™albums e singles.", + "podcast": "Albergatz vĆ²stres episĆ²dis e mantenĆØtz vĆ²stre comunitat al fial.", + "podcastFields": "Utilizat pels camps itunes:email e itunes:name, requerits per dā€™unas platafĆ²rmas coma Spotify o iTunes.", + "username": "Utilizat dins las URL e per seguir aquesta cadena sul Fedivers. O podĆØtz pas cambiar mai tard." + }, + "label": { + "category": "Categoria", + "description": "Descripcion", + "discography": "Discografia de lā€™artista", + "email": "AdreƧa electronica del proprietari", + "image": "Imatge de la cadena", + "language": "Lenga", + "name": "Nom", + "owner": "Nom del proprietari", + "podcast": "Podcast", + "subcategory": "Subcategoria", + "tags": "Etiquetas", + "username": "Identificant del Fedivers" + }, + "legend": { + "purpose": "A quĆ© servirĆ  aquesta cadena ?" + }, + "loader": { + "loading": "Cargament" + }, + "placeholder": { + "name": "Nom crane de la cadena", + "username": "nomcranedelacadena" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{n} episĆ²di | {n} episĆ²dis" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Ne veire mai" + }, + "help": { + "subscribe": "Vos cal benlĆØu vos abonar a aquesta cadena per ne veire lo contengut." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Ne veire mai" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copiar" + }, + "header": { + "preview": "Apercebut" + }, + "help": { + "anonymous": "MercĆ©s de contactar vĆ²stres administrators e de lor demandar dā€™actualizar lo paramĆØtres ligat.", + "embed": "Copiatz / Pegatz aqueste cĆ²di al vĆ²stre site HTML", + "width": "Daissar void per un widget adaptatiu" + }, + "label": { + "embed": "CĆ²di dā€™integracion", + "height": "Nautor del widget", + "width": "Largor del widget" + }, + "message": { + "copy": "TĆØxte copiat al quichapapiĆØr !" + }, + "warning": { + "anonymous": "Lo partatge foncionarĆ  pas perque aqueste pod autoriza pas los utilizaires anonimes a accedir al contengut." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Anullar la demanda dā€™abonament", + "follow": "Seguir", + "unfollow": "Quitar de seguir" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista actuala", + "discretePlay": "Legir", + "episodeDetails": "Detalhs de lā€™episĆ²di", + "hideArtist": "Amagar lo contengut dā€™aqueste artista", + "playAlbum": "Legir lā€™album", + "playArtist": "Legir Ć§Ć² de lā€™artista", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "playPlaylist": "Legir la lista de lectura", + "playTrack": "Legir la pista", + "playTracks": "Legir las pistas", + "report": "Senhalarā€¦", + "startRadio": "Legir de canƧons similaras", + "trackDetails": "Detalhs de la pista" + }, + "title": { + "more": "Maiā€¦", + "unavailable": "Aquesta pista es pas disponibla dins cap de las bibliotĆØcas quā€™avĆØtz accĆØs" + } + }, + "Player": { + "header": { + "player": "Lector Ć udio e contrarĆ²tle" + }, + "label": { + "addArtistContentFilter": "Amagar lo contengut dā€™aqueste artistaā€¦", + "audioPlayer": "Lector mĆØdia", + "clearQueue": "Voidar la fila", + "expandQueue": "Desplegar la fila", + "loopingDisabled": "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala.", + "loopingSingle": "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila.", + "loopingWholeQueue": "Repeticion de tota la fila, clicatz per desactivar la repeticion.", + "mute": "Copar lo son", + "nextTrack": "Pista seguenta", + "pause": "Pausa", + "play": "Legir", + "previousTrack": "Pista precedenta", + "shuffleQueue": "Mesclar la fila", + "unmute": "Restablir lo son" + }, + "meta": { + "position": "({index} de {length})", + "unknownAlbum": "Album desconegut", + "unknownArtist": "Artista desconegut" + } + }, + "PlayerControls": { + "labels": { + "next": "Pista seguenta", + "pause": "Pausa", + "play": "Lectura", + "previous": "Pista precedenta" + } + }, + "Search": { + "empty": { + "noAlbums": "Cap dā€™album correspond pas a vĆ²stra recĆØrca", + "noArtists": "Cap dā€™artista correspond pas a vĆ²stra recĆØrca" + }, + "header": { + "albums": "Albums", + "artists": "Artistas", + "search": "Recercar de musica" + }, + "placeholder": { + "search": "Artista, album, pistaā€¦" + } + }, + "SearchBar": { + "empty": { + "noResults": "Pas cap de resultats per aquesta recĆØrca" + }, + "header": { + "noResults": "Cap de correspondĆ©ncia pas trobada" + }, + "label": { + "album": "Album", + "artist": "Artista", + "category": { + "federation": "Federacion", + "podcasts": "Podcast" + }, + "search": "Recercar de contengut", + "tag": "Etiqueta", + "track": "Pista" + }, + "link": { + "fediverse": "Recercar sul fediverse", + "more": "Mai de resultats šŸ”’", + "rss": "Sā€™abonar a un podcast via RSS" + }, + "placeholder": { + "search": "Recercar dā€™artistas, dā€™albums, de pistasā€¦" + } + }, + "VolumeControl": { + "button": { + "mute": "Copar lo son", + "unmute": "Restablir lo son" + }, + "label": { + "slider": "Ajustar lo volum" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{n} episĆ²di | {n} episĆ²dis", + "tracks": "{n} pista | {n} pistas" + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostrar las accions de la pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Ajustar als favorits", + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista", + "albumDetails": "Veire lā€™album", + "artistDetails": "Veire lā€™artista", + "channelDetails": "Veire la cadena", + "episodeDetails": "Detalhs de lā€™episĆ²di", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "removeFromFavorites": "Tirar dels favorits", + "seriesDetails": "Veire las serias", + "startRadio": "Legir la pista", + "trackDetails": "Detalhs de la pista" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostrar las accions de la pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Ajustar als favorits", + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista", + "albumDetails": "Veire lā€™album", + "artistDetails": "Veire lā€™artista", + "channelDetails": "Veire la cadena", + "episodeDetails": "Detalhs de lā€™episĆ²di", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "removeFromFavorites": "Tirar dels favorits", + "seriesDetails": "Veire las serias", + "startRadio": "Legir la pista", + "trackDetails": "Detalhs de la pista" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artista", + "title": "TĆ­tol" + } + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + }, + "empty": { + "noResults": "Cap de resultat pas trobat" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Tornar generar lo geton" + }, + "header": { + "appDetails": "Detalhs de lā€™aplicacion", + "editApp": "Modificar lā€™aplicacion" + }, + "help": { + "appDetails": "Lā€™ID e lo secrĆØt de lā€™aplicacion son de donadas vertadiĆØrament sensiblas e devon ĆØsser consideradas coma de senhals. Partegetz-las pas amb degun." + }, + "label": { + "accessToken": "Geton dā€™accĆØs", + "appId": "ID de lā€™aplicacion", + "appSecret": "Secret de lā€™aplicacion" + }, + "link": { + "settings": "Tornar als paramĆØtres" + }, + "title": "Modificar lā€™aplicacion" + }, + "ApplicationForm": { + "button": { + "create": "Crear una aplicacion", + "update": "Actualizar lā€™aplicacion" + }, + "header": { + "failure": "PodĆØm pas enregistrar vĆ²stras modificacions" + }, + "help": { + "redirectUri": "Utilizatz Ā« urn:ietf:wg:oauth:2.0:oob Ā» coma URI de redireccion se vĆ²stra aplicacion es pas disponibla en linha." + }, + "label": { + "name": "Nom", + "redirectUri": "URI de redireccion", + "scopes": { + "description": "Causir lā€™autorizacion Ā«LecturaĀ» o Ā«EscrituraĀ» sul parent implica lā€™accĆØs a totes los jos elements correspondents.", + "read": { + "description": "AccĆØs lectura sola de las donadas utilizaire", + "label": "Lectura" + }, + "write": { + "description": "AccĆØs escritura sola de las donadas utilizaire", + "label": "Escritura" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Tornar als paramĆØtres" + }, + "title": "Crear una nĆ²va aplicacion" + }, + "Authorize": { + "button": { + "authorize": "Autorizar {app}" + }, + "header": { + "access": "{app_name} vĆ²l accedir a vĆ²stre compte Funkwhale", + "allScopes": "AccĆØs complĆØt", + "authorize": "Autorizar una tĆØrƧa aplicacion", + "authorizeFailure": "Error en autorizar lā€™aplicacion", + "fetchFailure": "Error en recuperar las donadas de lā€™aplicacion", + "readOnly": "Lectura sola", + "writeOnly": "Escritura sola" + }, + "help": { + "copyCode": "Vos mostrarem un cĆ²di de copiar-pegar dins lā€™aplicacion", + "pasteCode": "Copiatz-pegatz lo cĆ²di seguent dins lā€™aplicacion :", + "redirect": "Seretz mandat a { 0 }" + }, + "message": { + "unknownPermissions": "Lā€™aplicacion demanda tanben las autorizacions desconegudas seguentas :" + }, + "title": "Autorizar lā€™aplicacion" + }, + "LoginForm": { + "button": { + "login": "Connexion" + }, + "header": { + "loginFailure": "Error pendent la connexion" + }, + "help": { + "approvalRequired": "Se vos sĆØtz marcat fa pas gaire, benlĆØu que vos cal esperar que nĆ²stra cĆ²la de moderacion repasse vĆ²stre compte, o verifique vĆ²stra adreƧa electronica.", + "invalidCredentials": "MercĆ©s de verificar que lo nom dā€™utilizaire e lo senhal son corrĆØctes e asseguratz-vos dā€™aver verificat vĆ²stre corriĆØl." + }, + "label": { + "password": "Senhal", + "username": "Nom dā€™utilizaire o corriĆØl" + }, + "link": { + "createAccount": "Crear un compte", + "resetPassword": "ReĆÆnicializar lo senhal" + }, + "placeholder": { + "username": "EscrivĆØtz vĆ²stre nom dā€™utilizaire o corriĆØl" + } + }, + "Logout": { + "button": { + "logout": "ƒc-ben, desconnectatz-me !" + }, + "header": { + "confirm": "VolĆØtz vertadiĆØrament vos desconnectar ?", + "unauthenticated": "SĆØtz pas connectat actualament" + }, + "link": { + "login": "Connectatz-vos !" + }, + "message": { + "loggedIn": "SĆØtz connectat coma {username}" + }, + "title": "Desconnexion" + }, + "Plugin": { + "button": { + "save": "Enregistrar", + "scan": "Explorar" + }, + "description": { + "library": "BibliotĆØca ont los fichiĆØrs devon ĆØsser importats." + }, + "header": { + "failure": "Error en enregistrant lo modul" + }, + "label": { + "library": "BibliotĆØca", + "pluginEnabled": "Activada" + }, + "link": { + "documentation": "Documentacion" + } + }, + "Settings": { + "button": { + "delete": "Suprimir", + "deleteAccount": "Suprimir mon compteā€¦", + "deleteAccountConfirm": "Suprimir mon compte", + "disableSubsonic": "Desactivar lā€™accĆØs", + "edit": "Modificar", + "password": "Cambiar lo senhal", + "refresh": "Actualizar", + "remove": "Tirar", + "removeApp": "Suprimir lā€™aplicacion", + "revoke": "Revocar", + "revokeAccess": "Revocar lā€™accĆØs", + "update": "Actualizar", + "updateSettings": "Actualizar los paramĆØtres" + }, + "description": { + "authorizedApps": "AquĆ² es la lista de las aplicacions quā€™an accĆØs a las donadas de vĆ²stre compte.", + "changeEmail": "Cambiar lā€™adreƧa email ligada a vĆ²stre compte. Mandarem una confirmacion a lā€™adreƧa novĆØla.", + "changePassword": { + "paragraph1": "Lā€™actualizacion de vĆ²stra senhal cambiarĆ  tanben lo de lā€™API Subsonic se nā€™avĆØtz un.", + "paragraph2": "Vos caldrĆ  actualizar lo senhal sus totes los clients quā€™utilizan aqueste senhal." + }, + "contentFilters": "Los filtres de contengut vos ajudan a amagar los contenguts que volĆØtz pas veire sus aqueste servici.", + "deleteAccount": "PodĆØtz suprimir vĆ²stre compte e totas las donadas dā€™un biais permanent e irreversible en utilizar lo formulari Ƨai-jos. Vos demandarem una confirmacion.", + "plugins": "Utilizatz dā€™extension per agrandir las possibilitat de Funkwhale e obtĆ©ner mai de foncionalitats.", + "yourApps": "AquĆ² es la lista de las aplicacions quā€™avĆØtz creadas." + }, + "header": { + "accountFailure": "PodĆØm pas suprimir vĆ²stre compte", + "accountSettings": "ParamĆØtres del compte", + "authorizedApps": "Aplicacions autorizadas", + "avatar": "Avatar", + "avatarFailure": "Lā€™avatar pĆ²t pas ĆØsser enregistrat", + "changeEmail": "Cambiar mon adreƧa electronica", + "changePassword": "Cambiar lo senhal", + "contentFilters": "Filtres de contengut", + "deleteAccount": "Suprimir mon compte", + "emailFailure": "PodĆØm pas cambiar vĆ²stra dā€™adreƧa mail", + "hiddenArtists": "Artistas amagats", + "noApps": "AvĆØtz pas cap dā€˜aplicacion connectada a aqueste compte.", + "noPersonalApps": "AvĆØtz pas cap dā€˜aplicacion creada pel moment.", + "passwordFailure": "Lo senhal pĆ²t pas ĆØsser cambiat", + "plugins": "Moduls", + "settingsUpdated": "ParamĆØtres actualizats", + "updateFailure": "Impossible dā€™actualizar vĆ²stres paramĆØtres", + "yourApps": "VĆ²stras aplicacions" + }, + "help": { + "changePassword": "MercĆ©s de verificar que lo senhal es corrĆØct", + "noApps": "Sā€™autorizatz de tĆØrƧas aplicacions a accedir a vĆ²stras donadas, serĆ n listadas aquĆ­.", + "noPersonalApps": "Marcatz-ne ua per integrar Funkwhale amb de tĆØrƧas aplicacions." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Senhal actual", + "newEmail": "AdreƧa electronica novĆØla", + "newPassword": "NĆ²u senhal", + "password": "Senhal" + }, + "link": { + "managePlugins": "Gerir los moduls", + "newApp": "Crear una nĆ²va aplicacion" + }, + "message": { + "confirmDelete": "VĆ²stra demanda de supression es estada enviada, vĆ²stre compte e lo contengut serĆ n lĆØu suprimits", + "currentEmail": "VĆ²stra adreƧa electronica actuala es {email}." + }, + "modal": { + "changePassword": { + "content": { + "logout": "SĆØtz per ĆØsser desconnectat dā€™aquesta session e vos caldrĆ  vos connectar amb lo nĆ²u senhal", + "subsonic": "VĆ²stre senhal Subsonic serĆ  remplaƧat per un nĆ²u aleatĆ²ri, aquĆ² vos desconnectarĆ  de totes los periferics quā€™utilizan lā€™ancian senhal", + "warning": "Lo cambiament de senhal a las consequĆ©ncias seguentas" + }, + "header": "Cambiar lo senhal ?" + }, + "deleteAccount": { + "content": { + "warning": "AquĆ² es irreversible e suprimirĆ  dā€™un biais permanent vĆ²stras donadas de nĆ²stres servidors. Seretz immediatament desconnectat." + }, + "header": "VolĆØtz suprimir vĆ²stre compte ?" + }, + "deleteApp": { + "content": { + "warning": "AquĆ² escafarĆ  aquesta aplicacion per totjorn e totes los getons ligats." + }, + "header": "Suprimir lā€™aplicacion Ā« {app} Ā» ?" + }, + "revokeApp": { + "content": { + "warning": "AquĆ² empacha aquesta aplicacion dā€™accedir al servici en vĆ²stre nom." + }, + "header": "Revocar lā€™accĆØs a lā€™aplicacion Ā« {app} Ā» ?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data de creacion", + "name": "Nom" + } + }, + "authorizedApps": { + "header": { + "application": "Aplicacion", + "permissions": "Autorizacions" + } + }, + "yourApps": { + "header": { + "application": "Aplicacion", + "creationDate": "Data de creacion", + "scopes": "Visibilitats" + } + } + }, + "title": "ParamĆØtres del compte", + "warning": { + "deleteAccount": "VĆ²stre compte serĆ  suprimit de nĆ²stres servidors dā€™aquĆ­ unas minutas. Avisarem tanben los autres servidors que pĆ²don aver una cĆ²pia de certanas donda per que realizen la supression. Remarcatz quā€™unes dā€™aqueles pĆ²don ĆØsser fĆ²ra linha o voler pas o far." + } + }, + "SignupForm": { + "button": { + "create": "Crear mon compte" + }, + "header": { + "login": "Connectatz-vos a vĆ²stre compte Funkwhale", + "signupFailure": "Lo compte pĆ²t pas ĆØsser creat." + }, + "label": { + "email": "AdreƧa electronica", + "password": "Senhal", + "username": "Nom dā€™utilizaire" + }, + "message": { + "accountCreated": "Lo compte es estat corrĆØctament creat. Volgatz verificar vĆ²stra bĆ³stia de recepcion abans dā€™ensajar de vos connectar.", + "awaitingReview": "VĆ²stra demanda de compte es estada corrĆØctament enviada. Vos notificarem per corriĆØl un cĆ²p que nĆ²stra equipa de moderacion aja repassat la demanda.", + "registrationClosed": "Las inscripcions son tampadas sus aquesta instĆ ncia. Auretz de tĆ©ner un cĆ²di dā€™invitacion per vos marcar.", + "requiresReview": "Las inscripcions sus aquesta instĆ ncia son dobĆØrtas, mas lā€™equipa de moderacion repassa las demanda." + }, + "placeholder": { + "email": "Picatz vĆ²stra adreƧa electronica", + "invitation": "EscrivĆØtz vĆ²stre cĆ²di dā€™invitacion (pas sensible a la cassa)", + "username": "EscrivĆØtz vĆ²stre nom dā€™utilizaire" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Desactivar lā€™accĆØs", + "confirmNewPassword": "Demandar un senhal", + "disable": "Desactivar lā€™accĆØs via Subsonic", + "newPassword": "Demandar un nĆ²u senhal" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale es compatible amb dā€™autres lectors de musica compatibles amb lā€™API Subsonic.", + "paragraph2": "PodĆØtz los utilizar per profeitar de vĆ²stras listas de lectura e de vĆ²stra musica en mĆ²de fĆ²ra linha sus vĆ²stre mobil, tableta, per exemple.", + "paragraph3": "Prā€™aquĆ², accedir a Funkwhale dā€™un client estant demanda un senhal diferent que podĆØtz configurar Ƨai-jos." + } + }, + "header": { + "error": "Error", + "subsonic": "Senhal de lā€™API Subsonic" + }, + "label": { + "subsonicField": "Senhal de lā€™API Subsonic" + }, + "link": { + "apps": "AprenĆØtz a utilizar Funkwhale amb dā€™autras aplicacions" + }, + "message": { + "accessDisabled": "AccĆØs desactivat", + "passwordUpdated": "Senhal actualizat", + "unavailable": "Lā€™API Subsonic es pas disponibla per aquesta instĆ ncia Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "AquĆ² desactivarĆ  complĆØtament lā€™accĆØs a lā€™API Subsonic de vĆ²stre compte estant." + }, + "header": "Desactivar lā€™accĆØs a lā€™API Subsonic ?" + }, + "newPassword": { + "content": { + "warning": "AquĆ² vos desconnectarĆ  de totes los periferics quā€™utilizan aqueste senhal." + }, + "header": "Demandar un nĆ²u senhal per lā€™API Subsonic ?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Error en crear" + }, + "label": { + "albumTitle": "TĆ­tol" + } + }, + "AlbumModal": { + "button": { + "cancel": "Anullar", + "create": "Crear" + }, + "header": { + "newAlbum": "Album novĆØl", + "newSeries": "NĆ²vas serias" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Serias" + }, + "meta": { + "tracks": "{n} pista | {n} pistas" + }, + "option": { + "none": "Cap" + } + }, + "LicenseSelect": { + "label": { + "license": "LicĆ©ncia" + }, + "link": { + "license": "A prepaus dā€™aquesta licĆ©ncia" + }, + "option": { + "none": "Cap" + } + }, + "SubscribeButton": { + "help": { + "auth": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut" + }, + "title": { + "subscribe": "Sā€™abonar", + "unsubscribe": "Quitar de seguir" + } + }, + "UploadForm": { + "button": { + "edit": "Modificar", + "ignore": "Ignorar", + "remove": "Tirar", + "resume": "Reprendre", + "retry": "Tornar ensajar" + }, + "description": { + "extensions": "Extensions compatiblas : {extensions}" + }, + "header": { + "error": "Error en publicar" + }, + "help": { + "license": "Ajustatz una licĆ©ncia a vĆ²stre mandadĆ­s per assegurar las libertats de vĆ²stre public." + }, + "label": { + "channel": "Cadena", + "openBrowser": "PercĆ³rrerā€¦" + }, + "message": { + "dragAndDrop": "Lisatz depausatz los fichiĆØrs aquĆ­ o dorbissĆØtz lo navegador per enviar de fichiĆØrs", + "pending": "AvĆØtz de brolhon de mandadisses en espĆØra de publicacion." + }, + "status": { + "errored": "Perturbat", + "pending": "En espĆØra", + "uploading": "MandadĆ­s en cors" + }, + "warning": { + "quota": "AvĆØtz pas mai dā€™espaci per enviar los fichiĆØrs. MercĆ©s de contactar los moderators." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descripcion", + "image": "Imatge de la pista", + "position": "Posicions", + "tags": "Etiquetas", + "title": "TĆ­tol" + } + }, + "UploadModal": { + "button": { + "cancel": "Anullar", + "close": "Tampar", + "finishLater": "Acabar mai tard", + "next": "Etapa seguenta", + "previous": "Etapa precedenta", + "publish": "Publicar", + "update": "Actualizar" + }, + "header": { + "processing": "Tractament dels mandadisses", + "publish": "Publicar Ć udio", + "uploadDetails": "Detalh de mandadĆ­s", + "uploadFiles": "FichiĆØrs dā€™enviar" + }, + "meta": { + "files": "{n} fichiĆØr | {n} fichiĆØrs", + "quota": "Espaci liure restant : {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{n} de { total } element seleccionat | {n} de { total } elements seleccionats", + "go": "Zo", + "launch": "Aviar", + "refresh": "Actualizar lo contengut de la tabla", + "select": "Seleccionar", + "selectAll": "Seleccionar totes los elements", + "selectCurrentPage": "Seleccionar solament la pagina actuala", + "selectElement": "Seleccionar un element | Seleccionar lā€™ensemble dels {n} elements", + "selected": "{n} de {total} element seleccionat | {n} de {total} elements seleccionats" + }, + "header": { + "error": "Error en tractar lā€™accion" + }, + "label": { + "actions": "Accions", + "performAction": "Executar las accions" + }, + "message": { + "needsRefresh": "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn", + "success": "Lā€™action {action} es estada lanƧada corrĆØctament sus {n} element | Lā€™action {action} es estada lanƧada corrĆØctament sus {n} elements" + }, + "modal": { + "performAction": { + "content": { + "warning": "Aquesta operacion pĆ²t afectar mantun elements o pĆ²t pas ĆØsser anullada, mercĆ©s de verificar sā€™es ben Ć§Ć² que desiratz." + }, + "header": "VolĆØtz lanƧar lā€™accion Ā« {action} Ā» sus {n} element ? | VolĆØtz lanƧar lā€™accion Ā« {action} Ā» sus {n} elements ?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Tirar" + }, + "header": { + "failure": "Impossible de salvagardar vĆ²stra pĆØƧa-junta" + }, + "help": { + "upload": "PNG o JPG. Las dimensions devon ĆØsser entre 1400x1400px e 3000x3000px. La talha maximala autorizada es 5 Mo." + }, + "label": { + "upload": "Enviar un nĆ²u imatgeā€¦" + }, + "loader": { + "uploading": "MandadĆ­s del fichiĆØrā€¦" + } + }, + "CollapseLink": { + "button": { + "collapse": "Plegar", + "expand": "Desplegar" + } + }, + "ContentForm": { + "button": { + "preview": "Apercebut", + "write": "Escriure" + }, + "empty": { + "noContent": "I a pas res a previsualizar" + }, + "help": { + "markdown": "PodĆØtz utilizar la sintaxi Markdown" + }, + "placeholder": { + "input": "EscrivĆØtz quicĆ²m aquĆ­ā€¦" + } + }, + "CopyInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "success": "TĆØxte copiat al quichapapiĆØr !" + } + }, + "DangerousButton": { + "button": { + "cancel": "Anullar", + "confirm": "Confirmar" + }, + "header": { + "confirm": "VolĆØtz confirmar aquesta accion ?" + } + }, + "Duration": { + "meta": { + "hours": "{hours} h {minutes} min", + "minutes": "{minutes} min" + } + }, + "EmptyState": { + "button": { + "refresh": "Actualizar" + }, + "header": { + "noResults": "Cap de resultat pas trobat." + } + }, + "ExpandableDiv": { + "button": { + "less": "Ne veire mens", + "more": "Ne veire mai" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Escafar" + }, + "label": { + "search": "Recercar" + }, + "placeholder": { + "search": "Recercarā€¦" + } + }, + "LoginModal": { + "description": { + "noAccess": "AvĆØtz pas accĆØs a aquĆ²" + }, + "header": { + "unauthenticated": "Desconnectat" + }, + "link": { + "login": "Connexion", + "signup": "Inscripcion" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Anullar", + "edit": "Modificar", + "less": "Ne veire mens", + "more": "Ne veire mai", + "update": "Actualizar la descripcion" + }, + "empty": { + "noDescription": "Cap de descripcion pas disponibla" + }, + "header": { + "failure": "Error en actualizar la descripcion" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Lenga", + "shortcuts": "Acorchis claviĆØr", + "theme": "TĆØma" + }, + "link": { + "about": "A prepaus", + "chat": "Sala de discutida", + "docs": "Documentacion", + "forum": "Forum", + "git": "TraƧador de problĆØmas", + "login": "Connexion", + "logout": "Desconnexion", + "notifications": "Notificacions", + "profile": "Perfil", + "settings": "ParamĆØtres", + "signup": "Inscripcion", + "support": "Ajuda" + } + }, + "UserModal": { + "button": { + "switchInstance": "Utilizar una autra instĆ ncia" + }, + "header": { + "options": "Opcions" + }, + "label": { + "language": "Lenga", + "shortcuts": "Acorchis claviĆØr", + "theme": "TĆØma" + }, + "link": { + "about": "A prepaus", + "chat": "Sala de discutida", + "docs": "Documentacion", + "forum": "Forum", + "git": "TraƧador de problĆØmas", + "login": "Connexion", + "logout": "Desconnexion", + "notifications": "Notificacions", + "profile": "Perfil", + "settings": "ParamĆØtres", + "signup": "Inscripcion", + "support": "Ajuda" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "I a pas encara de pistas ajustadas a vĆ²stres favorits" + }, + "header": { + "favorites": "{n} favorit | {n} favorits" + }, + "link": { + "library": "PercĆ³rrer la bibliotĆØca" + }, + "loader": { + "loading": "Cargament dels favoritsā€¦" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "ƒrdre" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "title": "VĆ²stres favorits" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Ajustar als favorits", + "remove": "Tirar dels favorits" + }, + "label": { + "inFavorites": "Als favorits" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Tampar", + "reload": "Tampar e tornar cargar la pagina" + }, + "description": { + "failure": "Una error sā€™es producha en actualizar las donadas :", + "pending": "La requĆØsta dā€™actualizacion es pas estada tractada a temps per nĆ²stre servidor. SerĆ  executada mai tard.", + "skipped": "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale.", + "success": "Las donadas son estadas actualizadas corrĆØctament del servidors alonhat estant." + }, + "header": { + "failure": "Error en actualizar", + "pending": "Actualizar las info del nos", + "refresh": "Actualizacion de lā€™objĆØcte del servidor alonhat estantā€¦", + "saveFailure": "Error en enregistrar los paramĆØtres", + "skipped": "Lā€™actualizada es estada passada", + "success": "Actualizacion reĆ¼ssida" + }, + "loader": { + "awaitingResult": "En espĆØra dels resultatsā€¦", + "fetchRequest": "Demanda de recuperacionā€¦" + }, + "table": { + "error": { + "label": { + "detail": "Detalhs de lā€™error", + "type": "Tip dā€™error" + }, + "value": { + "connectionError": "Connexion impossibla al servidor alonhat", + "httpError": "Una error HTTP sā€™es producha en contactar lo servidor alonhat", + "httpStatus": "Lo servidor alonhat a respondut amb lo cĆ²di HTTP {status}", + "invalidAttributesError": "Las donadas tornadas pel servidor alonhat an dā€™atributs mancants o invalids", + "invalidJsonError": "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas", + "timeoutError": "Lo servidor alonhat a trĆ²p tardat a respondre", + "unknownError": "Error desconeguda" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Ne veire mai" + }, + "empty": { + "noMatch": "Cap de bibliotĆØca correspondenta." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "copy": "TĆØxte copiat al quichapapiĆØr !" + }, + "title": "Mostrar/amagar lo senhal" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Ajustar una descripcionā€¦" + }, + "meta": { + "episodes": "{n} episĆ²di | {n} episĆ²dis", + "tracks": "{n} pista | {n} pistas" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "Aqueste album es present a las bibliotĆØcas seguentas :" + }, + "header": { + "episodes": "EpisĆ²dis", + "libraries": "BibliotĆØcas de lā€™utilizaire", + "tracks": "Pistas" + }, + "meta": { + "volume": "Volum {number}" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Anullar", + "delete": "Suprimir", + "edit": "Modificar", + "embed": "Integrar", + "more": "Maiā€¦" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", + "musicbrainz": "Veire sus MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Aqueste album serĆ  tirat, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste album ?" + }, + "embed": { + "header": "Integrar aqueste album a un site web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Modificar aqueste album", + "suggest": "PodĆØm pas cargar aquesta pisata" + }, + "message": { + "remote": "Aqueste objĆØcte es gerit per un autre servidor, podĆØtz pas lo modificar." + } + }, + "Albums": { + "button": { + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" + }, + "header": { + "browse": "PercĆ³rrer los albums" + }, + "label": { + "search": "Recercar", + "tags": "Etiquetas" + }, + "link": { + "addMusic": "Ajustar musica" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Picatz lo tĆ­tol de lā€™albumā€¦" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Anullar", + "edit": "Modificar", + "embed": "Integrar", + "more": "Maiā€¦", + "play": "Legir totes los albums" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", + "musicbrainz": "Veire sus MusicBrainz", + "wikipedia": "Recercar sus WikipĆØdia" + }, + "meta": { + "albums": "{n} albums | {n} albums", + "tracks": "{count} pista dins | {count} pistas dins" + }, + "modal": { + "embed": { + "header": "Integrar aquesta pista a vĆ²stre site web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Levar lo filtre", + "more": "Ne cargar maiā€¦" + }, + "description": { + "library": "Aqueste artista es present a las bibliotĆØcas seguentas :" + }, + "header": { + "album": "Albums dā€™aqueste artista", + "library": "BibliotĆØcas de lā€™utilizaire", + "track": "Pistas novĆØlas dā€™aqueste artista" + }, + "link": { + "filter": "Validar mos filtres" + }, + "message": { + "filter": "Amagatz lo contengut ligat a aqueste artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Modificar aqueste artista", + "suggest": "PodĆØm pas cargar aquesta pisata" + }, + "message": { + "remote": "Aqueste objĆØcte es gerit per un autre servidor, podĆØtz pas lo modificar." + } + }, + "Artists": { + "button": { + "search": "Recercar", + "upload": "Ajustar musica" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" + }, + "header": { + "browse": "PercĆ³rrer los artistas" + }, + "label": { + "excludeCompilation": "Exclure las compilacions dā€™artistas", + "search": "Nom de lā€™artista", + "tags": "Etiquetas" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Recercarā€¦" + }, + "title": "Artistas" + }, + "EditCard": { + "button": { + "approve": "Validar", + "delete": "Suprimir", + "reject": "Regetar" + }, + "header": { + "modification": "Modificacion {id}" + }, + "link": { + "track": "Pista #{id} - {name}" + }, + "modal": { + "content": { + "warning": "La suggestion serĆ  complĆØtament tirada, aquesta accion es irreversibla." + }, + "delete": { + "header": "Suprimir aquesta rĆØgla de moderacion ?" + } + }, + "status": { + "applied": "Validada e aplicada", + "approved": "Validat", + "pending": "En espĆØra de validacion", + "rejected": "Regetat" + }, + "table": { + "update": { + "header": { + "field": "Camp", + "newValue": "NĆ²va valor", + "oldValue": "Anciana valor" + }, + "notApplicable": "ND" + } + } + }, + "EditForm": { + "button": { + "cancel": "Anullar", + "clear": "Escafar", + "new": "Enviar una modificacion de mai", + "reset": "Tornar a la valor iniciala", + "showAll": "Mostrar totas las modificacions", + "showUnreviewed": "RestrĆ©nher a las modificacions pas repassadas", + "submit": "Enviar e aplicar la modificacion", + "suggest": "Enviar la suggestion" + }, + "empty": { + "suggestEdit": "Suggerir un cambiament en utilizar lo formulari Ƨai-jos" + }, + "header": { + "failure": "Error en enviar la modificacion", + "recentEdits": "Modificacions recentas", + "success": "La modificacion es estada corrĆØctament enviada.", + "unreviewed": "Modificacions recentas en espĆØra de relectura" + }, + "label": { + "summary": "Resumit (opcional)" + }, + "message": { + "noPermission": "AvĆØtz pas lā€™autorizacion de modificar aqueste objĆØcte, mas podĆØtz suggerir de cambiaments. Un cĆ²p mandadas, las suggestions serĆ n repassadas abans validacion." + }, + "notApplicable": "ND", + "placeholder": { + "summary": "Una descripcion pichona per explicar vĆ²stres cambiaments." + } + }, + "FileUpload": { + "button": { + "cancel": "Anullar", + "retry": "Tornar ensajar los mandadisses fracassats" + }, + "description": { + "import": "Resultats dā€™import", + "previousImport": "Resultats de vĆ²stre import precedent :" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error en aviant lā€™import", + "local": "Importar de la musica de vĆ²stre emmagazinatge local", + "server": "Estatut de lā€™import", + "status": "Estatut de lā€™import" + }, + "label": { + "extensions": "Extensions compatiblas : {extensions}", + "remainingSpace": "Espaci liure", + "uploadWidget": "Clicatz per causir los fichiĆØrs dā€™enviar o lisatz los fichiĆØrs o repertĆ²ris" + }, + "link": { + "picard": "Vos recomandam dā€™utilizar lo logicial Picard per aquĆ² far.", + "processing": "Tractament", + "uploading": "MandadĆ­s en cors" + }, + "message": { + "local": { + "copyright": "Envietz pas cap de contengut jos dreches a una bibliotĆØca publica, autrament enfranhĆØtz la lei", + "format": "Los fichiĆØrs musicals que sĆØtz a enviar son al format OGG, Flac, MP3 o AIFF", + "message": "SĆØtz a man dā€™enviar de la musica a vĆ²stra bibliotĆØca. Abans de comenƧar, mercĆ©s de vos assegurar que :", + "tag": "Los fichiĆØrs musicals que sĆØtz a enviar son etiquetats coma cal." + } + }, + "table": { + "upload": { + "header": { + "actions": "Accions", + "filename": "Nom del fichiĆØr", + "size": "Talha", + "status": "Estatut" + }, + "progress": "{percent}%", + "status": { + "pending": "En espĆØra", + "uploaded": "Enviat", + "uploading": "MandadĆ­sā€¦" + } + } + }, + "tooltip": { + "denied": "MandadĆ­s refusat, asseguratz-vos que lo fichiĆØr es pas trĆ²p grand e quā€™avĆØtz pas atenhut vĆ²stre quĆ²ta", + "extension": "Tipe de fichiĆØr pas valid, asseguratz-vos dā€™enviar un fichiĆØr Ć udio. Las extensions compatiblas son {extensions}", + "network": "Una error de ret sā€™es producha en enviar aqueste fichiĆØr", + "retry": "Tornar ensajar", + "size": "MandadĆ­s del fichiĆØr impossible, asseguratz-vos quā€™es pas trĆ²p pesuc", + "timeout": "Temps de transferiment expirat, ensajatz tornamai" + } + }, + "FsBrowser": { + "button": { + "import": "Importar" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Lā€™import a pas encara comenƧat" + } + }, + "Home": { + "header": { + "newChannels": "NĆ²vas cadenas", + "playlists": "Listas de lectura", + "recentlyAdded": "Ajustats i a res", + "recentlyFavorited": "Ajustadas als favorits i a res", + "recentlyListened": "Escotadas i a res" + }, + "title": "BibliotĆØca" + }, + "ImportStatusModal": { + "button": { + "close": "Tampar" + }, + "error": { + "importFailure": "Una error sā€™es producha pendent lo processĆŗs de mandadĆ­s. Trobaretz mai dā€™informacion Ƨai-jos.", + "invalidMetadata": { + "label": "Metadonada invalida", + "message": "La metadonada inclusa al fichiĆØr es invalida o de camps obligatĆ²ris son absents." + }, + "unknownError": { + "label": "Error desconeguda", + "message": "Una error desconeguda sā€™es producha" + } + }, + "header": { + "importDetail": "Detalhs de lā€™import" + }, + "link": { + "documentation": "LegissĆØtz nĆ²stra documentacion per aquesta error", + "support": "Dobrir un fil de discutida dā€™assistĆ©ncia (donatz las informacions de desbugatge dins vĆ²stre messatge)" + }, + "message": { + "importDetail": "Lo mandadĆ­s es encara en espĆØra e serĆ  lĆØu tractat pel servidor.", + "importSuccess": "Lo mandadĆ­s es estat corrĆØctament tractat pel servidor." + }, + "table": { + "error": { + "debug": "Informacions de debug", + "errorDetail": "Detalhs de lā€™error", + "errorType": "Tip dā€™error", + "help": "ObtĆ©ner dā€™ajuda" + } + }, + "warning": { + "importSkipped": "Lo mandadĆ­s es estat sautat perque un que li sembla es ja disponible dins una de vĆ²stras bibliotĆØca." + } + }, + "Podcasts": { + "button": { + "cancel": "Anullar", + "channel": "Crear una cadena", + "feed": "Sā€™abonar al flux RSS", + "search": "Recercar", + "subscribe": "Sā€™abonar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" + }, + "header": { + "browse": "PercĆ³rrer los Podcasts" + }, + "label": { + "search": "TĆ­tol del podcast", + "tags": "Etiquetas" + }, + "modal": { + "subscription": { + "header": "Inscripcion" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Recercarā€¦" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Crear una rĆ dio", + "create": "Crear vĆ²stra prĆ²pria rĆ dio", + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" + }, + "header": { + "browse": "PercĆ³rrer las rĆ dios", + "instance": "RĆ dios de lā€™instĆ ncia", + "user": "RĆ dios dels utilizaires" + }, + "label": { + "search": "Recercar" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "ƒrdre" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "EscrivĆØtz un nom de rĆ dioā€¦" + }, + "title": "RĆ dios" + }, + "TagDetail": { + "header": { + "channels": "Cadenas", + "tracks": "Pistas" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" + } + }, + "TagSelector": { + "placeholder": { + "search": "Recercarā€¦" + } + }, + "TrackBase": { + "button": { + "cancel": "Anullar", + "delete": "Suprimir", + "download": "Telecargar", + "edit": "Modificar", + "embed": "Integrar", + "more": "Maiā€¦", + "play": "Legir" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", + "wikipedia": "Recercar sus WikipĆØdia" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta pista serĆ  tirada, e mai totes los fichiĆØrs e donadas ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aquesta pista ?" + }, + "embed": { + "header": "Integrar aquesta pista a un site web" + } + }, + "title": "Pista" + }, + "TrackDetail": { + "description": { + "library": "Aquesta pista es presenta a las bibliotĆØcas seguentas :" + }, + "header": { + "episode": "Detalhs de lā€™episĆ²di", + "library": "BibliotĆØcas associadas", + "playlists": "Listas de lectura associadas", + "release": "Detalhs de publicacion", + "track": "Detalhs de la pista" + }, + "link": { + "musicbrainz": "Veire sus MusicBrainz" + }, + "notApplicable": "ND", + "table": { + "release": { + "album": "Album", + "artist": "Artista", + "copyright": "Copyright", + "license": "LicĆ©ncia", + "series": "Seria", + "url": "URL", + "year": "An" + }, + "track": { + "bitrate": { + "label": "Debit", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Telecargaments", + "duration": "Durada", + "size": "Talha" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Modificar aquesta pista", + "suggest": "PodĆØm pas cargar aquesta pisata" + }, + "message": { + "remote": " Aqueste objĆØcte es gerit per un autre servidor, podĆØtz pas lo modificar." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Ajustar lo filtre", + "save": "Enregistrar" + }, + "description": { + "builder": "PodĆØtz utilizar aquesta interfĆ cia per realizar vĆ²stra prĆ²pria rĆ dio personalizada, que jogarĆ  las listas segon los critĆØris indicats." + }, + "header": { + "builder": "Editor", + "created": "Nom de la rĆ dio", + "matches": "{n} pista correspond als filtres seleccionats | {n} pistas correspondon als filtres seleccionats", + "updated": "RĆ dio actualizada" + }, + "label": { + "description": "Descripcion", + "filter": "Ajustar de filtres per dire de personalizar vĆ²stra rĆ dio", + "name": "Nom de la rĆ dio", + "public": "Mostrar publicament" + }, + "option": { + "filter": "Seleccionar un filtre" + }, + "placeholder": { + "description": "Ma descripcion trĆ²p crana", + "name": "Ma rĆ dio trĆ²p crana" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data dā€™accĆØs", - "account": "Compte", - "creationDate": "Data de creacion", - "domain": "Domenu", - "importStatus": "Estatut de lā€™import", - "library": "BibliotĆØca", - "name": "Nom", - "size": "Talha", - "visibility": "Visibilitat" + "actions": "Accions", + "candidates": "Pistas candidatas", + "config": "Configuracion", + "exclude": "Exclure", + "name": "Nom del filtre" } } }, + "title": "Editor de rĆ dio" + }, + "Filter": { + "cancelButton": "Anullar", + "excludeLabel": "Exclure", + "matchingTracksModalHeader": "Pistas correspondentas al filtre", + "removeButton": "Tirar" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoria", + "search": "Recercar" + }, + "link": { + "local": "Local", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, nom dā€™utilizaire, compteā€¦" + }, + "table": { + "channel": { + "header": { + "account": "Compte", + "albums": "Albums", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Los albums seleccionats serĆ n tirats, e mai las pistas, mandadisses e istorics dā€™escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "link": { + "local": "Local", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" + }, + "notApplicable": "ND", + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per tĆ­tol, artista, ID MusicBrainzā€¦" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "TĆ­tol", + "releaseDate": "Data de sortida", + "tracks": "Pistas" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Los artistas seleccionats serĆ s tirats, e mai los mandadisses, pistas, albums, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "category": "Categoria", + "search": "Recercar" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, nom, ID MusicBrainz,ā€¦" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "all": "Tot", + "approved": "Validat", + "pending": "En espĆØra de validacion", + "rejected": "Regetat" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "ƒrdre" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per tĆ­tol, artista, domeniā€¦" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Las bibliotĆØcas seleccionadas serĆ s tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + } + }, + "label": { + "search": "Recercar", + "visibility": "Visibilitat" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, actor, nom, descripcionā€¦" + }, + "table": { + "library": { + "header": { + "account": "Compte", + "creationDate": "Data de creacion", + "domain": "Domenu", + "followers": "Seguidors", + "name": "Nom", + "uploads": "MandadĆ­s", + "visibility": "Visibilitat" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Lā€™etiqueta seguenta serĆ  tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per nom" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artistas", + "creationDate": "Data de creacion", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Las pistas seleccionadas serĆ n tiradas, e mai las pistas, mandadisses e istorics dā€™escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "link": { + "local": "Local" + }, + "notApplicable": "ND", + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per tĆ­tol, artista, album, ID MusicBrainzā€¦" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artista", + "creationDate": "Data de creacion", + "domain": "Domenu", + "license": "LicĆ©ncia", + "title": "TĆ­tol" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "La suggestion serĆ  complĆØtament tirada, aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar", + "status": "Estatut", + "visibility": "Visibilitat" + }, + "link": { + "local": "Local" + }, + "notApplicable": "ND", "option": { "all": "Tot", "failed": "FracĆ s", @@ -1862,396 +2284,68 @@ }, "label": "ƒrdre" }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "La suggestion serĆ  complĆØtament tirada, aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar", - "status": "Estatut", - "visibility": "Visibilitat" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { "search": "Recercar per domeni, actor, nom, referĆ©ncia, sorgaā€¦" }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data dā€™accĆØs", "account": "Compte", "creationDate": "Data de creacion", "domain": "Domenu", - "followers": "Seguidors", + "importStatus": "Estatut de lā€™import", + "library": "BibliotĆØca", "name": "Nom", - "uploads": "MandadĆ­s", + "size": "Talha", "visibility": "Visibilitat" } } - }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Las bibliotĆØcas seleccionadas serĆ s tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Recercar", - "visibility": "Visibilitat" - }, - "placeholder": { - "search": "Recercar per domeni, actor, nom, descripcionā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artista", - "creationDate": "Data de creacion", - "domain": "Domenu", - "license": "LicĆ©ncia", - "title": "TĆ­tol" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Las pistas seleccionadas serĆ n tiradas, e mai las pistas, mandadisses e istorics dā€™escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per tĆ­tol, artista, album, ID MusicBrainzā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "label": { - "category": "Categoria", - "search": "Recercar" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Los artistas seleccionats serĆ s tirats, e mai los mandadisses, pistas, albums, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Recercar per domeni, nom, ID MusicBrainz,ā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artistas", - "creationDate": "Data de creacion", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Lā€™etiqueta seguenta serĆ  tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." - } - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per nom" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Tot", - "approved": "Validat", - "pending": "En espĆØra de validacion", - "rejected": "Regetat" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "ƒrdre" - }, - "label": "ƒrdre" - }, - "placeholder": { - "search": "Recercar per tĆ­tol, artista, domeniā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - }, - "label": { - "status": "Estatut" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "TĆ­tol", - "releaseDate": "Data de sortida", - "tracks": "Pistas" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Los albums seleccionats serĆ n tirats, e mai las pistas, mandadisses e istorics dā€™escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local", - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per tĆ­tol, artista, ID MusicBrainzā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Compte", - "domain": "Domenu", - "local": "Local", - "owner": "Proprietari", - "type": "Tipe" - }, - "status": { - "assignedTo": "Atribuit a", - "internalNotes": "NĆ²tas intĆØrnas", - "resolutionDate": "Data de resolucion", - "resolved": "Resolgut", - "status": "Estatut", - "unresolved": "Pas resolgut" - }, - "report": { - "category": "Categoria", - "creationDate": "Data de creacion", - "submittedBy": "Enviat per" + "AccountsTable": { + "action": { + "purge": { + "label": "Purgar" } }, - "header": { - "actions": "Accions", - "notes": "NĆ²tas intĆØrnas", - "message": "Messatge", - "reportedObject": "ObjĆØcte senhalat" - }, - "button": { - "confirmDelete": "Suprimir", - "delete": "Escafar lā€™objĆØcte senhalat", - "resolve": "ResĆ²lver", - "unresolve": "Pas resolgut" - }, - "modal": { - "delete": { - "header": "Escafar lā€™objĆØcte senhalat ?", - "content": { - "warning": "AquĆ² suprimirĆ  lā€™objĆØcte ligat amb aqueste senhalament e lo marcarĆ  coma resolgut. Aquesta supression es irreversibla." - } - } - }, - "notApplicable": "ND", - "link": { - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "report": "Senhalar { id }", - "publicPage": "Veire la pagina publica" - }, - "warning": { - "objectDeleted": "Lā€™objĆØcte dā€™aqueste senhalament es estat suprimit." - } - }, - "UserRequestCard": { - "header": { - "actions": "Accions", - "notes": "NĆ²tas intĆØrnas", - "signup": "Messatge" - }, - "button": { - "approve": "Validar", - "reject": "Regetar" - }, - "table": { - "status": { - "approved": "Validat", - "assignedTo": "Atribuit a", - "internalNotes": "NĆ²tas intĆØrnas", - "pending": "En espĆØra", - "refused": "Regetada", - "status": "Estatut" - }, - "request": { - "creationDate": "Data de creacion", - "submittedBy": "Enviat per" - } - }, - "notApplicable": "ND", - "link": { - "request": "Demandar { id }" - }, - "message": { - "signup": "Aqueste utilizaire vĆ²l se marcar a vĆ²stra instĆ ncia." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Ajustar una nĆ²va rĆØgla de moderacion", - "editRule": "Actualizar las rĆØglas de moderacion", - "failure": "Error en crear la rĆØgla" - }, "label": { - "blockAll": "O blocar tot", - "policyDisabled": "Desactivada", - "policyEnabled": "Activada", - "silenceActivity": "Amagar lā€™activitat", - "silenceNotifications": "Amagar las notificacions", - "customizeRule": "O personalizatz aquesta rĆØgla", - "policyReason": "Rason", - "rejectMedia": "Regetar lo mĆØdia" + "search": "Recercar" }, - "tooltip": { - "blockAll": "O blocar tot dā€™aqueste compte estant. EmpacharĆ  totas interaccion amb lā€™entitat e purgarĆ  lo contengut ligat (pistas, bibliotĆØca, seguiments, etc.)", - "rejectMedia": "Telecargar pas cap de mĆØdia (Ć udio, album, tampa, avatar de compteā€¦) dā€™aqueste compte o domeni. PurgarĆ  tanben lo contengut existent.", - "summary": "Explicatz perque aplicatz aquesta politica : vos ajudarĆ  a vos remembrar perque apondĆØretz aquesta rĆØgla. Segon la configuracion de lā€™instĆ ncia, aquĆ² pĆ²t ĆØsser mostrat publicament per ajudar als utilizaires a comprendre qualas rĆØglas de moderacion son en plaƧa.", - "silenceActivity": "Amagar lo contengut del compte o del demoni, levat pels seguidors.", - "silenceNotifications": "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors.", - "isActive": "Utilizatz aqueste paramĆØtre per activar/desactivar temporĆ riament la rĆØgla sens la suprimir complĆØtament." + "link": { + "local": "Compte local" }, - "button": { - "cancel": "Anullar", - "create": "Crear", - "delete": "Suprimir", - "confirm": "Suprimir la rĆØgla de moderacion", - "update": "Actualizar" + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" }, - "modal": { - "delete": { - "header": "Suprimir aquesta rĆØgla de moderacion ?", - "content": { - "warning": "Aquesta accion se pĆ²t pas anullar." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Ajustar una nĆ²ta" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { - "summary": "DescrivĆØtz quinas accions son estadas presas, o tota autra mesa a jorn ligadaā€¦" + "search": "Recercar per domeni, nom dā€™utilizaire, bioā€¦" }, - "header": { - "failure": "Error en enviar la nĆ²ta" + "table": { + "account": { + "header": { + "domain": "Domeni", + "firstSeen": "PrimiĆØra aparicion", + "lastSeen": "DarriĆØra visita", + "moderationRule": "Jos rĆØgla de moderacion", + "name": "Nom", + "uploads": "MandadĆ­s" + }, + "moderationRule": "ƒc" + } } }, "DomainsTable": { @@ -2266,6 +2360,16 @@ "label": "Tirar de la lista de las autorizacions" } }, + "empty": { + "noPods": "Cap de podcast pas trobat" + }, + "label": { + "inList": "Es present dins la lista dā€™autorizacion", + "search": "Recercar" + }, + "link": { + "list": "Aqueste domeni es present dins vĆ²stra lista dā€™autorizacion" + }, "option": { "all": "Tot", "no": "Non", @@ -2279,76 +2383,32 @@ }, "label": "ƒrdre" }, - "table": { - "domain": { - "header": { - "firstSeen": "PrimiĆØra aparicion", - "name": "Nom", - "receivedMessages": "Messatges recebuts", - "moderationRule": "Jos rĆØgla de moderacion", - "users": "Utilizaires" - }, - "moderationRule": "ƒc" - } - }, - "label": { - "inList": "Es present dins la lista dā€™autorizacion", - "search": "Recercar" - }, - "empty": { - "noPods": "Cap de podcast pas trobat" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { "search": "Recercar per nomā€¦" }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - }, - "link": { - "list": "Aqueste domeni es present dins vĆ²stra lista dā€™autorizacion" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domenu", "firstSeen": "PrimiĆØra aparicion", - "lastSeen": "DarriĆØra visita", - "name": "Nom", "moderationRule": "Jos rĆØgla de moderacion", - "uploads": "MandadĆ­s" + "name": "Nom", + "receivedMessages": "Messatges recebuts", + "users": "Utilizaires" }, "moderationRule": "ƒc" } - }, - "link": { - "local": "Compte local" - }, - "action": { - "purge": { - "label": "Purgar" - } - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per domeni, nom dā€™utilizaire, bioā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Modificar" + }, + "header": { + "rule": "RĆØgla" + }, "label": { "blockAll": "O blocar tot", "muteActivity": "Amagar lā€™activitat", @@ -2356,15 +2416,49 @@ "reason": "Rason", "rejectMedia": "Regetar lo mĆØdia" }, - "button": { - "edit": "Modificar" - }, "status": { "enabled": "Activada", "paused": "En pausa" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir la rĆØgla de moderacion", + "create": "Crear", + "delete": "Suprimir", + "update": "Actualizar" }, "header": { - "rule": "RĆØgla" + "addRule": "Ajustar una nĆ²va rĆØgla de moderacion", + "editRule": "Actualizar las rĆØglas de moderacion", + "failure": "Error en crear la rĆØgla" + }, + "label": { + "blockAll": "O blocar tot", + "customizeRule": "O personalizatz aquesta rĆØgla", + "policyDisabled": "Desactivada", + "policyEnabled": "Activada", + "policyReason": "Rason", + "rejectMedia": "Regetar lo mĆØdia", + "silenceActivity": "Amagar lā€™activitat", + "silenceNotifications": "Amagar las notificacions" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta accion se pĆ²t pas anullar" + }, + "header": "Suprimir aquesta rĆØgla de moderacion ?" + } + }, + "tooltip": { + "blockAll": "O blocar tot dā€™aqueste compte estant. EmpacharĆ  totas interaccion amb lā€™entitat e purgarĆ  lo contengut ligat (pistas, bibliotĆØca, seguiments, etc.)", + "isActive": "Utilizatz aqueste paramĆØtre per activar/desactivar temporĆ riament la rĆØgla sens la suprimir complĆØtament.", + "rejectMedia": "Telecargar pas cap de mĆØdia (Ć udio, album, tampa, avatar de compteā€¦) dā€™aqueste compte o domeni. PurgarĆ  tanben lo contengut existent.", + "silenceActivity": "Amagar lo contengut del compte o del demoni, levat pels seguidors.", + "silenceNotifications": "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors.", + "summary": "Explicatz perque aplicatz aquesta politica : vos ajudarĆ  a vos remembrar perque apondĆØretz aquesta rĆØgla. Segon la configuracion de lā€™instĆ ncia, aquĆ² pĆ²t ĆØsser mostrat publicament per ajudar als utilizaires a comprendre qualas rĆØglas de moderacion son en plaƧa." } }, "InstancePolicyModal": { @@ -2374,161 +2468,129 @@ }, "modal": { "manage": { - "header": "Gerir las rĆØglas de moderacion per { obj }", "content": { "warning": "Aquesta entitat es somesa a de rĆØglas de moderacion especificadas" - } + }, + "header": "Gerir las rĆØglas de moderacion per {obj}" } } }, + "NoteForm": { + "button": { + "add": "Ajustar una nĆ²ta" + }, + "header": { + "failure": "Error en enviar la nĆ²ta" + }, + "placeholder": { + "summary": "DescrivĆØtz quinas accions son estadas presas, o tota autra mesa a jorn ligadaā€¦" + } + }, "NotesThread": { "button": { "delete": "Suprimir" }, "modal": { "delete": { - "header": "Suprimir aqueste nĆ²ta ?", "content": { "warning": "La nĆ²ta serĆ  tirada. Aquesta accion es irreversibla." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Compte", - "albums": "Albums", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Nom", - "tracks": "Pistas" + }, + "header": "Suprimir aqueste nĆ²ta ?" } } }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" + "ReportCard": { + "button": { + "confirmDelete": "Suprimir", + "delete": "Escafar lā€™objĆØcte senhalat", + "resolve": "ResĆ²lver", + "unresolve": "Pas resolgut" }, - "label": "ƒrdre" + "header": { + "actions": "Accions", + "message": "Messatge", + "notes": "NĆ²tas intĆØrnas", + "reportedObject": "ObjĆØcte senhalat" + }, + "link": { + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", + "publicPage": "Veire la pagina publica", + "report": "Senhalar {id}" + }, + "modal": { + "delete": { + "content": { + "warning": "AquĆ² suprimirĆ  lā€™objĆØcte ligat amb aqueste senhalament e lo marcarĆ  coma resolgut. Aquesta supression es irreversibla." + }, + "header": "Escafar lā€™objĆØcte senhalat ?" + } + }, + "notApplicable": "ND", + "table": { + "object": { + "account": "Compte", + "domain": "Domeni", + "local": "Local", + "owner": "Proprietari", + "type": "Tipe" + }, + "report": { + "category": "Categoria", + "creationDate": "Data de creacion", + "submittedBy": "Enviat per" + }, + "status": { + "assignedTo": "Atribuit a", + "internalNotes": "NĆ²tas intĆØrnas", + "resolutionDate": "Data de resolucion", + "resolved": "Resolgut", + "status": "Estatut", + "unresolved": "Pas resolgut" + } + }, + "warning": { + "objectDeleted": "Lā€™objĆØcte dā€™aqueste senhalament es estat suprimit." + } }, - "label": { - "category": "Categoria", - "search": "Recercar" - }, - "link": { - "local": "Local", - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" - }, - "placeholder": { - "search": "Recercar per domeni, nom dā€™utilizaire, compteā€¦" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" + "UserRequestCard": { + "button": { + "approve": "Validar", + "reject": "Regetar" + }, + "header": { + "actions": "Accions", + "notes": "NĆ²tas intĆØrnas", + "signup": "Messatge" + }, + "link": { + "request": "Demandar {id}" + }, + "message": { + "signup": "Aqueste utilizaire vĆ²l se marcar a vĆ²stra instĆ ncia." + }, + "notApplicable": "ND", + "table": { + "request": { + "creationDate": "Data de creacion", + "submittedBy": "Enviat per" + }, + "status": { + "approved": "Validat", + "assignedTo": "Atribuit a", + "internalNotes": "NĆ²tas intĆØrnas", + "pending": "En espĆØra", + "refused": "Regetada", + "status": "Estatut" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Estat del compte", - "email": "CorriĆØl", - "lastActivity": "DarriĆØra activitat", - "permissions": "Autorizacions", - "signup": "Inscripcion", - "status": "Estatut", - "username": "Nom dā€™utilizaire" - }, - "accountStatus": { - "active": "Actiu", - "inactive": "Actiu" - }, - "status": { - "admin": "Admin", - "regular": "Utilizaire estandard", - "staff": "Membre de la cĆ²la" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "ƒrdre" - }, - "permission": { - "library": "BibliotĆØca", - "moderation": "Moderacion", - "settings": "ParamĆØtres" - }, - "notApplicable": "ND", - "placeholder": { - "search": "Recercar per nom dā€™utilizaire, corriĆØl, nomā€¦" - }, - "pagination": { - "results": "Afichatge dā€™un resultat | Afichatge dels resultats { start } fins a { end } de { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Tot", - "expired": "Expirada/utilizada", - "open": "AccĆØs liure" - }, - "table": { - "invitation": { - "header": { - "code": "CĆ²di", - "creationDate": "Data de creacion", - "expirationDate": "Data dā€™expiracion", - "owner": "Proprietari", - "status": "Estatut" - } - } - }, - "action": { - "delete": "Suprimir" - }, - "label": { - "expired": "Expirada", - "unused": "Pas utilizat", - "search": "Recercar", - "status": "Estatut", - "used": "Utilizat" - }, - "ordering": { - "label": "ƒrdre" - }, - "placeholder": { - "search": "Recercar per nom dā€™utilizaire, corriĆØl, cĆ²diā€¦" - }, - "pagination": { - "results": "Afichatge dā€™un resultat | Afichatge dels resultats { start } fins a { end } de { total }" - } - }, "InvitationForm": { "button": { "clear": "Escafar", "new": "ObtĆ©ner una novĆØla invitacion" }, - "table": { - "invitation": { - "header": { - "code": "CĆ²di", - "link": "Ligam de partatge" - } - } - }, "header": { "failure": "Error en crear lā€™invitacion" }, @@ -2537,523 +2599,59 @@ }, "placeholder": { "invitation": "Daissar void per obtĆ©ner un cĆ²di aleatĆ²ri" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Accions", - "label": "Nom del camp", - "type": "Tipe de camp", - "required": "ObligatĆ²ri" - }, - "type": { - "long": "TĆØxt grand", - "short": "TĆØxt cort" - }, - "required": { - "false": "Non", - "true": "ƒc" - } - } - }, - "button": { - "add": "Ajustar un camp novĆØl", - "edit": "Modificar lo formulari", - "preview": "Apercebut del formulari" - }, - "label": { - "additionalField": "Camp addicional", - "additionalFields": "Camps addicionals", - "delete": "Suprimir", - "helpText": "TĆØxt dā€™ajuda", - "moveDown": "DesplaƧar enbĆ s", - "moveUp": "DesplaƧar ennaut" - }, - "help": { - "additionalFields": "Camps addicionals pel formulari. Se veson sonque se la validacion de lā€™inscripcion es activada.", - "helpText": "Un tĆØxte opcional a afichar a la debuta del formulari dā€™inscripcion." - } - }, - "SettingsGroup": { - "header": { - "image": "Imatge actual", - "error": "Error en enregistrar los paramĆØtres" - }, - "button": { - "save": "Enregistrar" - }, - "message": { - "success": "ParamĆØtres corrĆØctament modificats." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Tot" - }, - "label": { - "category": "Categoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament.", - "modal": "VolĆØtz senhalar aqueste objĆØcte ?", - "submissionFailure": "Error en enviar lo senhalament" - }, - "button": { - "cancel": "Anullar", - "submit": "Enviar" - }, - "label": { - "email": "CorriĆØl", - "forwardToDomain": "Transferir a { domain}", - "message": "Messatge" - }, - "description": { - "forwardToDomain": "Transferir una cĆ²pi anonimizada del senhalement al servidor quā€™alerga aqueste element.", - "message": "Utilizatz aqueste camp per provesir mai de contĆØxt al moderator que gerirĆ  lo senhalament.", - "modal": "Utilizatz aqueste formulari per enviar un senhalament als nĆ²stres moderators.", - "email": "Utilizarem aquesta adreƧa se nos fa besonh vos contactar tocant aqueste senhalament." - }, - "message": { - "submissionSuccess": "Senhalament corrĆØctament enviat, mercĆ©s" - } - }, - "FilterModal": { - "button": { - "cancel": "Anullar", - "hide": "Amagar lo contengut" - }, - "message": { - "success": "Filtre de contengut corrĆØctament ajustat" - }, - "header": { - "modal": "VolĆØtz rescondre lo contengut de lā€™artista Ā« { name } Ā» ?", - "failure": "Error en crear lo filtre" - }, - "warning": { - "createFilter": { - "listItem2": "Dins lo widget Ā« Ajustada i a res Ā»", - "listItem3": "Dins las listas dā€™artistas e dā€™albums", - "listItem1": "Dins los favorits e istorics dā€™escota dā€™autres utilizaires", - "listItem4": "Dins las suggestions de rĆ dios", - "listIntro": "Veiretz pas mai las pistas, albums e las activitats dā€™utilizaires ligadas a aqueste artista :" - } - }, - "help": { - "createFilter": "PodĆØtz gerir e actualizar los filtres quand volgatz dels paramĆØtres de compte estant." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Una error sā€™es producha en actualizar las donadas :", - "success": "Las donadas son estadas actualizadas corrĆØctament del servidors alonhat estant.", - "pending": "La requĆØsta dā€™actualizacion es pas estada tractada a temps per nĆ²stre servidor. SerĆ  executada mai tard.", - "skipped": "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Una error HTTP sā€™es producha en contactar lo servidor alonhat", - "invalidAttributesError": "Las donadas tornadas pel servidor alonhat an dā€™atributs mancants o invalids", - "connectionError": "Connexion impossibla al servidor alonhat", - "httpStatus": "Lo servidor alonhat a respondut amb lo cĆ²di HTTP { status }", - "timeoutError": "Lo servidor alonhat a trĆ²p tardat a respondre", - "invalidJsonError": "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas", - "unknownError": "Error desconeguda" - }, - "label": { - "detail": "Detalhs de lā€™error", - "type": "Tip dā€™error" - } - } - }, - "button": { - "close": "Tampar", - "reload": "Tampar e tornar cargar la pagina" - }, - "header": { - "saveFailure": "Error en enregistrar los paramĆØtres", - "failure": "Error en actualizar", - "pending": "Actualizar las info del nos", - "success": "Actualizacion reĆ¼ssida", - "skipped": "Lā€™actualizada es estada passada", - "refresh": "Actualizacion de lā€™objĆØcte del servidor alonhat estantā€¦" - }, - "loader": { - "fetchRequest": "Demanda de recuperacionā€¦", - "awaitingResult": "En espĆØra dels resultatsā€¦" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Cap de bibliotĆØca correspondenta." - }, - "button": { - "showMore": "Ne veire mai" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Acorchis del lector Ć udio", - "clearQueue": "Voidar la fila", - "decreaseVolume": "Reduire lo volum", - "expandQueue": "Espandir fila/vista del lector", - "increaseVolume": "Aumentar lo volum", - "playPause": "Pausar/Legir la pista actuala", - "playNext": "Legir la pista seguenta", - "playPrevious": "Legir la pista precedenta", - "seekBack30": "Recular de 30s", - "seekBack5": "Recular de 5s", - "seekForward30": "AvanƧar de 30s", - "seekForward5": "AvanƧar de 5s", - "shuffleQueue": "Mesclar la fila", - "toggleFavorite": "Ajustar/Tirar dels favorits", - "toggleMute": "Copar/Restablir lo son", - "toggleLoop": "Cambiar lo tipe de lectura de la lista" - }, - "general": { - "focus": "Anar a la recĆØrca", - "label": "Acrochis generals", - "show": "Mostrar los acorchis claviĆØr disponibles", - "unfocus": "Sortir de la recĆØrca" - } - }, - "button": { - "close": "Tampar" - }, - "header": { - "modal": "Acorchis claviĆØr" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Anullar", - "submit": "Validar" - }, - "header": { - "chooseInstance": "CausissĆØtz vĆ²stra instĆ ncia", - "failure": "Connexion impossibla a lā€™URL donada", - "suggestions": "Suggestions" - }, - "label": { - "url": "URL de lā€™instĆ ncia" - }, - "help": { - "notFunkwhaleServer": "Lā€™adreƧa donada es pas un servidor Funkwhale", - "serverDown": "Se pĆ²t que lo servidor siĆ” atudat", - "selectPod": "Per contunhar, seleccionatz una instĆ ncia Funkwhale que volĆØtz vos i connectar. Picatz lā€™adreƧa dirĆØctament, o seleccionatz-ne una dins las en suggestion." - }, - "message": { - "newUrl": "Utilizatz una instĆ ncia Funkwhale a { url }" - } - }, - "Queue": { - "button": { - "clear": "Escafar", - "close": "Tampar", - "stopRadio": "Arrestar la rĆ dio" - }, - "label": { - "duration": "Durada", - "addArtistContentFilter": "Amagar lo contengut dā€™aqueste artistaā€¦", - "next": "Pista seguenta", - "pause": "Pausa", - "play": "Legir", - "previous": "Pista precedenta", - "queue": "Fila", - "remove": "Tirar", - "restart": "RecomenƧar la pista" - }, - "message": { - "radio": "Las novĆØlas pistas serĆ n automaticament ajustadas aquĆ­.", - "automaticPlay": "La pista seguenta serĆ  legida automaticament dins una estonaā€¦" - }, - "header": { - "failure": "La pista pĆ²t pas ĆØsser cargada", - "radio": "Escotatz una rĆ dio" - }, - "meta": { - "queuePosition": "Pista ({ index } sus { length })" - }, - "warning": { - "connectivity": "PoiriĆ” arribar quā€™ajatz de problĆØma de connexion." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copiar" - }, - "title": "Mostrar/amagar lo senhal", - "message": { - "copy": "TĆØxte copiat al quichapapiĆØr !" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Modificar" - } - }, - "Button": { - "startRadio": "Legir la pista", - "stopRadio": "Arrestar la rĆ dio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Error en recuperar lā€™objĆØcte" - }, - "button": { - "fediverse": "Fedivers", - "rss": "RSS", - "search": "Recercar" - }, - "label": { - "fediverse": { - "fieldLabel": "ObjĆØcte del Fedivers", - "title": "Sā€™abonar a un podcast albergat sul fediverse" - }, - "rss": { - "fieldPlaceholder": "https://siteweb.exemple/rss.xml", - "fieldLabel": "EmplaƧament del flux RSS", - "title": "Sā€™abonar al flux RSS dā€™un podcast" - } - }, - "warning": { - "unsupported": "Aqueste tipe dā€™objĆØcte es pas encara compatible" - }, - "error": { - "fetchFailed": "Se pĆ²t pas recuperar aqueste objĆØcte" - }, - "description": { - "fediverse": "Utilizatz aqueste formulari per vos abonar a una cadena endacĆ²m sul fediverse.", - "rss": "Utilizatz aqueste formulari per vos abonar a un flux RSS via una adreƧa URL." - } - }, - "PageNotFound": { - "link": { - "home": "Tornar a lā€™acuĆØlh" - }, - "title": "Pagina pas trobada", - "header": { - "pageNotFound": "Pagina pas trobada !" - }, - "message": { - "pageNotFound": "O planhĆØm, la pagina demandada existĆ­s pas :" - } - }, - "vui": { - "Pagination": { - "next": "Pagina seguenta", - "label": "Paginacion", - "previous": "Pagina precedenta" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostrar 1 etiqueta de mai | Mostrar { n } etiquetas de mai" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episĆ²di | { n } episĆ²dis", - "listenings": "{ n } escota | { n } escotas", - "subscribers": "{ n } abonat | { n } abonats", - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "channelEpisodes": "Totes los episĆ²dis", - "mirrored": "miralh de { domain }", - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "channelOverview": "Vista dā€™ensemble", - "channelTracks": "Pistas", - "domainView": "Veire sus { domain }" - }, - "header": { - "artistChannel": "Cadena de lā€™artista", - "podcastChannel": "Cadena del podcast" - }, - "button": { - "cancel": "Anullar", - "confirm": "Suprimir", - "delete": "Suprimirā€¦", - "edit": "Modificarā€¦", - "embed": "Integrar", - "play": "Legir", - "updateChannel": "Actualizar la cadena", - "upload": "Enviar" - }, - "title": "Cadena", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copiatz-pegatz lā€™URL seguenta dins vĆ²stra aplicacion de podcast preferida :" - }, - "header": "Sā€™abonar via RSS" - }, - "fediverse": { - "content": { - "help": "Sā€™utilizatz Mastodon o una autra aplicacion del fediverse, podĆØtz tanben vos abonar a aqueste compte :" - }, - "header": "Sā€™abonar sul fediverse" - }, - "funkwhale": { - "header": "Sā€™abonar a Funkwhale" - }, - "header": "Sā€™abonar a aquesta cadena" }, - "delete": { - "header": "Suprimir aqueste cadena ?", - "content": { - "warning": "Aquesta cadena serĆ  tirada, e mai totes los fichiĆØrs e donadas ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aquesta pista a vĆ²stre site web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Ajustar nĆ²u", - "erroredUploads": "Veire los mandadisses en error", - "skippedUploads": "Veire los mandadisses sautats" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "DarriĆØrs episĆ²dis", - "latestTracks": "DarriĆØras pistas", - "series": "Serias", - "uploadsFailure": "Impossible de publicar unes mandadisses", - "uploadsProcessing": "Tractament dels mandadisses", - "uploadsSuccess": "Mandadisses corrĆØctament publicats" - }, - "meta": { - "progress": "BibliotĆØca e mandadĆ­s :" - }, - "message": { - "processing": "Funkwhale tracta vĆ²stres mandadisses e serĆ n lĆØu publicats." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Ajustar nĆ²u" - }, - "button": { - "cancel": "Anullar", - "subscribe": "Sā€™abonar" - }, - "placeholder": { - "search": "Filtrar per nomā€¦" - }, - "title": "Cadenas seguidas", - "modal": { - "subscription": { - "header": "Inscripcion" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "details": "Detalhs de la bibliotĆØca" - }, - "label": { - "size": "Talha totala dels fichiĆØrs dā€™aquesta bibliotĆØca" - }, - "button": { - "upload": "MandadĆ­s" - } - }, - "Quota": { - "label": { - "currentUsage": "{ count } utilizat sus { total } autorizat", - "errored": "FichiĆØrs amb errors", - "pending": "FichiĆØrs en espĆØra", - "skipped": "FichiĆØrs ignorats" - }, - "header": { - "currentUsage": "Utilizacion actuala" - }, - "loading": { - "currentUsage": "Cargament de lā€™utilizacion de las donadasā€¦" - }, - "button": { - "purge": "Purgar" - }, - "modal": { - "purgeErrored": { - "header": "Purgar los fichiĆØrs amb errors ?", - "content": { - "description": "Las pistas enviadas mas pas complĆØtament tractadas pel servidor serĆ n complĆØtament suprimidas. Vos donarĆ  de nĆ²u lo quĆ²ta escafat." - } - }, - "purgePending": { - "header": "Purgar los fichiĆØrs en espĆØra ?", - "content": { - "description": "Las pistas importadas que lo servidor a pas encara tractadas serĆ n complĆØtament suprimidas. Lo quĆ²ta correspondent vos serĆ  tornat." - } - }, - "purgeSkipped": { - "header": "Purgar los fichiĆØrs ignorats ?", - "content": { - "description": "Las pistas enviadas mas ignoradas pendent lo processĆŗs dā€™importacion per mantun rasons serĆ n complĆØtament suprimidas. Vos donarĆ  de nĆ²u lo quĆ²ta escafat." - } - } - }, - "link": { - "viewFiles": "Veire los fichiĆØrs" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artista", - "duration": "Durada", - "importStatus": "Estatut de lā€™import", - "size": "Talha", - "title": "TĆ­tol", - "uploadDate": "Data de mandadĆ­s" + "code": "CĆ²di", + "link": "Ligam de partatge" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Suprimir" + }, + "label": { + "expired": "Expirada", + "search": "Recercar", + "status": "Estatut", + "unused": "Pas utilizat", + "used": "Utilizat" }, "option": { - "status": { - "all": "Tot", - "draft": "Borrolhon", - "failed": "FracĆ s", - "finished": "Acabat", - "pending": "En espĆØra", - "skipped": "Ignorat" - } + "all": "Tot", + "expired": "Expirada/utilizada", + "open": "AccĆØs liure" }, + "ordering": { + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dā€™un resultat | Afichatge dels resultats {start} fins a {end} de {total}" + }, + "placeholder": { + "search": "Recercar per nom dā€™utilizaire, corriĆØl, cĆ²diā€¦" + }, + "table": { + "invitation": { + "header": { + "code": "CĆ²di", + "creationDate": "Data de creacion", + "expirationDate": "Data dā€™expiracion", + "owner": "Proprietari", + "status": "Estatut", + "user": "Utilizaire" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Recercar" + }, + "notApplicable": "ND", "ordering": { "direction": { "ascending": "Ascendent", @@ -3062,397 +2660,554 @@ }, "label": "ƒrdre" }, - "action": { - "delete": "Suprimir", - "restartImport": "RelanƧar lā€™import" + "pagination": { + "results": "Afichatge dā€™un resultat | Afichatge dels resultats {start} fins a {end} de {total}" }, - "label": { - "importStatus": "Estatut de lā€™import", - "search": "Recercar" - }, - "notApplicable": "ND", - "empty": { - "noTracks": "I a pas encara de pistas ajustadas a aquesta bibliotĆØca" + "permission": { + "library": "BibliotĆØca", + "moderation": "Moderacion", + "settings": "ParamĆØtres" }, "placeholder": { - "search": "Recercar per tĆ­tol, artista, albumā€¦" + "search": "Recercar per nom dā€™utilizaire, corriĆØl, nomā€¦" }, - "button": { - "showStatus": "Clicar per mostrar mai dā€™informacion tocant lo processĆŗs dā€™import dā€™aquesta pista" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crear una nĆ²va bibliotĆØca" - }, - "loading": { - "libraries": "Cargament de las bibliotĆØcasā€¦" - }, - "empty": { - "noLibrary": "Sembla quā€™avĆØtz pas cap de bibliotĆØca pel moment, es ora de ne crear una." - }, - "header": { - "libraries": "Mas bibliotĆØcas" - } - }, - "Form": { - "button": { - "create": "Crear una bibliotĆØca", - "delete": "Suprimir", - "confirm": "Suprimir la bibliotĆØca", - "update": "Actualizar la bibliotĆØca" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta bibliotĆØca ?", - "content": { - "warning": "Aquesta bibliotĆØca e totas sas pistas serĆ n suprimidas. Aquesta accion se pĆ²t pas anullar." + "table": { + "user": { + "accountStatus": { + "active": "Actiu", + "inactive": "Actiu" + }, + "header": { + "accountStatus": "Estat del compte", + "email": "CorriĆØl", + "lastActivity": "DarriĆØra activitat", + "permissions": "Autorizacions", + "signup": "Inscripcion", + "status": "Estatut", + "username": "Nom dā€™utilizaire" + }, + "status": { + "admin": "Admin", + "regular": "Utilizaire estandard", + "staff": "Membre de la cĆ²la" } } - }, - "label": { - "description": "Descripcion", - "name": "Nom", - "visibility": "Visibilitat" - }, - "header": { - "failure": "Error" - }, - "description": { - "library": "Las bibliotĆØcas vos ajudan a organizar e partejar vĆ²stras colleccions de musica. PodĆØtz enviar vĆ²stra prĆ²pria collecion musicala a Funkwhale e la partejar amb vĆ²stres amics e vĆ²stra familha.", - "visibility": "Poiretz partejar vĆ²stra bibiotĆØca amb dā€™autres gents, sens importĆ ncia de sa visibilitat." - }, - "message": { - "libraryCreated": "BibliotĆØca creada", - "libraryDeleted": "BibliotĆØca suprimida", - "libraryUpdated": "BibliotĆØca actualizada" - }, - "placeholder": { - "name": "Ma bibliotĆØca trĆ²p crana", - "description": "Aquesta bibliotĆØca conten ma musica personala, espĆØri que vos agradarĆ ." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas", - "failedTracks": "Pistas en error :", - "lastUpdate": "DarriĆØra actualizacion :" - }, - "modal": { - "unfollow": { - "content": { - "warning": "En quitar de seguir aquesta bibliotĆØca, perdretz lā€™accĆØs a son contengut." - }, - "header": "Quitar de seguir aquesta bibliotĆØca ?" - } - }, - "button": { - "cancel": "Anullar lad emanda dā€™abonament", - "follow": "Seguir", - "pending": "Abonament en espĆØra de validacion", - "unfollow": "Quitar de seguir" - }, - "link": { - "scanDetails": "Detalhs", - "scan": "Explorar ara" - }, - "label": { - "scanFailure": "Error en explorant", - "scanPending": "Analisi en espĆØra", - "scanSuccess": "Explorat", - "scanPartialSuccess": "Explorada amb dā€™errors", - "scanProgress": "Exploracionā€¦ ({ progress }%)", - "sharingLink": "Ligam de partatge" - }, - "message": { - "scanLaunched": "Exploracion lanƧada", - "scanSkipped": "Exploracion sautada (la darriĆØra es trĆ²p recenta)" - }, - "tooltip": { - "private": "Aquesta bibliotĆØca es privada e son proprietari deu validar vĆ²stra demanda dā€™accĆØs per que accediscatz a son contengut", - "public": "Aqueste bibliotĆØca es publica e podĆØtz accedir a son contengut liurament" - } - }, - "ScanForm": { - "header": { - "failure": "Error en recuperar la bibliotĆØca alonhada" - }, - "placeholder": { - "url": "Picatz lā€™URL dā€™una bibliotĆØca" - }, - "label": { - "search": "Cercar una bibliotĆØca alonhada" - }, - "button": { - "submit": "Enviar la recĆØrca" - } - }, - "Home": { - "header": { - "knownLibraries": "BibliotĆØcas conegudas", - "remoteLibraries": "BibliotĆØcas alonhadas" - }, - "loading": { - "remoteLibraries": "Cargament de las bibliotĆØcas alonhadasā€¦" - }, - "button": { - "refresh": "Actualizar" - }, - "description": { - "remoteLibraries": "Las bibliotĆØcas alonhadas apertenon a dā€™autres utilizaires del malhum. I podĆØtz accedir tant que siĆ”n publicas o quā€™ajatz lā€™autorizacion." - } - } - }, - "Home": { - "title": "Ajustar e gerir lo contengut", - "description": { - "follow": "PodĆØtz seguir las bibliotĆØcas dā€™autres utilizaires per accedir a de nĆ²vas musicas. Las bibliotĆØcas publicas pĆ²don ĆØsser seguidas cĆ²p sec, mentre quā€™una bibliotĆØca privada demanda una aprovacion de sus proprietaris.", - "channel": { - "1": "Se sĆØtz musician o creator de podcasts, las cadenas son fachas per vos !", - "2": "Partejatz vĆ²stre trabalh publicament e obtenĆØtz de seguidors sus Funkwhale, sul Fediverse o de las aplicacions de podcast estant." - }, - "upload": "Enviatz vĆ²stra bibliotĆØca musicala personala a Funkwhale e aprofechatz-ne pertot e partejatz-la amb vĆ²stres amics e familha." - }, - "header": { - "follow": "Seguir de bibliotĆØcas alonhadas", - "channel": "Publicar vĆ²stre trabalh dins una cadena", - "upload": "Enviar de contengut tĆØrces a la bibliotĆØca" - }, - "button": { - "start": "ComenƧar" - }, - "help": { - "uploadQuota": "Aquesta instĆ ncia provesĆ­s fins a {quota} dā€™espaci per cada utilizaire." - } - }, - "Base": { - "title": "Ajustar de contengut", - "link": { - "libraries": "BibliotĆØcas", - "tracks": "Pistas" - }, - "menu": { - "secondary": "MenĆŗ segondari" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "owner": "Lo proprietari es { username }", - "tracks": "Pistas", - "domain": "Veire sus { domain }" - }, - "button": { - "edit": "Modificar", - "upload": "MandadĆ­s" - }, - "title": "BibliotĆØca", - "label": { - "private": "Privada", - "public": "Public", - "instance": "Restrenches", - "sharingLink": "Ligam de partatge" - }, - "description": { - "sharingLink": "Partejatz aqueste ligam amb dā€™autres utilizaires per que pĆ²scan accedir a vĆ²stra bibliotĆØca en lo copiar-pegar dins la barra de recĆØrca de lor instĆ ncia." - }, - "tooltip": { - "private": "Aquesta bibliotĆØca es privada e son proprietari deu validar vĆ²stra demanda dā€™accĆØs per que accediscatz a son contengut", - "public": "Aqueste bibliotĆØca es publica e podĆØtz accedir a son contengut liurament", - "instance": "Aquesta bibliotĆØca es restrencha als utilizaires dā€™aquesta instĆ ncia solament" - } - }, - "Edit": { - "button": { - "accept": "Acceptar", - "reject": "Regetar" - }, - "table": { - "action": { - "status": { - "accepted": "Acceptat", - "pending": "En espĆØra de validacion", - "rejected": "Regetat" - }, - "header": { - "action": "Accion", - "date": "Data", - "status": "Estatut", - "user": "Utilizaire" - } - } - }, - "header": { - "followers": "Seguidors", - "libraryContents": "Contengut de la bibliotĆØca" - }, - "loading": { - "followers": "Cargament dels seguidorsā€¦" - }, - "empty": { - "noFollowers": "Degun sĆØc pas aquesta bibliotĆØca" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Aquesta bibliotĆØca es voida, deuriatz enviar quicĆ²m !", - "follow": "Es possible que vos calga seguir aquesta bibliotĆØca per veire son contengut." - } - }, - "DetailOverview": { - "empty": { - "upload": "Aquesta bibliotĆØca es voida, deuriatz enviar quicĆ²m !", - "follow": "Es possible que vos calga seguir aquesta bibliotĆØca per veire son contengut." - } - }, - "DetailTracks": { - "empty": { - "upload": "Aquesta bibliotĆØca es voida, deuriatz enviar quicĆ²m !", - "follow": "Es possible que vos calga seguir aquesta bibliotĆØca per veire son contengut." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Perfil de { username }", - "link": { - "activity": "Activitat", - "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", - "overview": "Vista dā€™ensemble", - "domainView": "Veire sus { domain }" - }, - "label": { - "self": "SĆØtz vos !" - } - }, - "PasswordReset": { - "label": { - "email": "AdreƧa electronica del compte" - }, - "button": { - "requestReset": "Demandar un nĆ²u senhal" - }, - "link": { - "back": "Tornar a la pagina de connexion" - }, - "placeholder": { - "email": "Picatz lā€™adreƧa de corriĆØl ligada a vĆ²stre compte" - }, - "header": { - "failure": "Error en demandar un novĆØl senhal", - "reset": "ReĆÆnicializar lo senhal" - }, - "title": "ReĆÆnicializar lo senhal", - "help": { - "form": "GarnissĆØtz aqueste formulari per demandar un nĆ²u senhal. Auretz un corriĆØl a vĆ²stra adreƧa indicada contenent las consignas per reĆÆnicializar lo senhal." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Ajustar nĆ²u" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Cadena de lā€™artista" - }, - "header": "Crear una cadena", - "podcast": { - "header": "Cadena del podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Anullar", - "createChannel": "Crear una cadena", - "next": "Etapa seguenta", - "previous": "Etapa precedenta" + "hide": "Amagar lo contengut" }, "header": { - "channels": "Cadenas", - "sharedLibraries": "Aqueste utilizaire partegĆØt las bibliotĆØcas seguentas", - "libraries": "BibliotĆØcas de lā€™utilizaire" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Tornar a la pagina de connexion", - "login": "Contunhar cap a la pagina de connexion" + "failure": "Error en crear lo filtre", + "modal": "VolĆØtz rescondre lo contengut de lā€™artista Ā« {name} Ā» ?" }, - "title": "Cambiar lo senhal", - "header": { - "failure": "Error en cambiar lo senhal", - "success": "Senhal corrĆØctament modificat" + "help": { + "createFilter": "PodĆØtz gerir e actualizar los filtres quand volgatz dels paramĆØtres de compte estant." }, "message": { - "requestSent": "Se lā€™adreƧa quā€™avĆØtz provesida a las etapas precedentas es valida e associada a un compte utilizaire, sĆØtz per recebre un messatge amb las consignas de reĆÆnicializacion dā€™aquĆ­ una estona.", - "success": "VĆ²stre senhal es corrĆØctament cambiat." + "success": "Filtre de contengut corrĆØctament ajustat" }, + "warning": { + "createFilter": { + "listIntro": "Veiretz pas mai las pistas, albums e las activitats dā€™utilizaires ligadas a aqueste artista :", + "listItem1": "Dins los favorits e istorics dā€™escota dā€™autres utilizaires", + "listItem2": "Dins lo widget Ā« Ajustada i a res Ā»", + "listItem3": "Dins las listas dā€™artistas e dā€™albums", + "listItem4": "Dins las suggestions de rĆ dios" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "NĆ²u senhal" + "category": "Categoria" }, + "option": { + "all": "Tot" + } + }, + "ReportModal": { "button": { - "update": "Actualizar vĆ²stre senhal" - } - }, - "EmailConfirm": { - "title": "Confirmar vĆ²stra adreƧa electronica", - "label": { - "confirmationCode": "CĆ²di de confirmacion" + "cancel": "Anullar", + "submit": "Enviar" + }, + "description": { + "email": "Utilizarem aquesta adreƧa se nos fa besonh vos contactar tocant aqueste senhalament.", + "forwardToDomain": "Transferir una cĆ²pi anonimizada del senhalement al servidor quā€™alerga aqueste element.", + "message": "Utilizatz aqueste camp per provesir mai de contĆØxt al moderator que gerirĆ  lo senhalament.", + "modal": "Utilizatz aqueste formulari per enviar un senhalament als nĆ²stres moderators" }, "header": { - "failure": "Confirmacion vĆ²stra adreƧa electronica impossibla", - "success": "CorriĆØl confirmat" + "disabled": "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament.", + "modal": "VolĆØtz senhalar aqueste objĆØcte ?", + "submissionFailure": "Error en enviar lo senhalament" }, - "link": { - "login": "Contunhar cap a la pagina de connexion", - "back": "Tornar a la pagina de connexion" + "label": { + "email": "CorriĆØl", + "forwardToDomain": "Transferir a {domain}", + "message": "Messatge" }, "message": { - "success": "PodĆØtz ara utilizar lo servici sens cap de limitacions." - } - }, - "Signup": { - "header": { - "createAccount": "Crear un compte funkwhale" - }, - "title": "Inscripcion" - }, - "Login": { - "title": "Connexion", - "header": { - "login": "Connectatz-vos a vĆ²stre compte Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Connexionā€¦" - } - }, - "Plugins": { - "title": "Gerir los moduls" - }, - "ProfileActivity": { - "header": { - "playlists": "Listas de lectura", - "recentlyFavorited": "Ajustadas als favorits i a res", - "recentlyListened": "Escotadas i a res" + "submissionSuccess": "Senhalament corrĆØctament enviat, mercĆ©s" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Validar", + "markRead": "Marcar coma legidas", + "markUnread": "Marcar coma pas legidas", + "reject": "Regetar" + }, + "message": { + "libraryAcceptFollow": "{username} acceptĆØt vĆ²stra demanda de seguiment de la bibliotĆØca Ā« {library} Ā»", + "libraryFollow": "{username} seguĆ­s vĆ²stra bibliotĆØca Ā« {library} Ā»", + "libraryPendingFollow": "{username} vĆ²l seguir vĆ²stra bibliotĆØca Ā« {library} Ā»" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "Editor": { + "button": { + "addDuplicate": "Ajustar prā€™aquĆ²", + "clear": "Escafar la lista de lectura", + "copy": "Copiar las pistas de la fila a la lista de lectura", + "insertFromQueue": "Inserir de la fila estant ({n} pista) | Inserir de la fila estant ({n} pistas)" + }, + "error": { + "sync": "Una error sā€™es producha en enregistrar vĆ²stras modificacions" + }, + "header": { + "editor": "Editor de lista de lectura" + }, + "help": { + "reorder": "Lisatz las linhas per triar las pistas de la lista de lectura" + }, + "loading": { + "sync": "Sincronizacion dels cambiaments amb lo servidorā€¦" + }, + "message": { + "sync": "Cambiament sincronizat amb lo servidor" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "AquĆ² escafarĆ  totas las pistas de la lista de lectura e poirĆ  pas ĆØsser anullat." + }, + "header": "VolĆØtz voidar la lista de lectura Ā« {playlist} Ā» ?" + } + }, + "warning": { + "duplicate": "Unas pistas de la fila son ja dins aquesta lista de lectura :" + } + }, + "Form": { + "button": { + "create": "Crear la lista de lectura", + "update": "Actualizar la lista de lectura" + }, + "header": { + "createFailure": "Lista de lectura creada", + "createPlaylist": "Crear una nĆ²va lista de lectura", + "createSuccess": "Lista de lectura creada", + "updateSuccess": "Lista de lectura actualizada" + }, + "label": { + "name": "Nom de la lista de lectura", + "visibility": "Visibilitat de la lista de lectura" + }, + "placeholder": { + "name": "Ma lista de lectura trĆ²p crana" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Ajustar prā€™aquĆ²", + "addToPlaylist": "Ajustar a aquesta lista de lectura", + "addTrack": "Ajustar una pista", + "cancel": "Anullar", + "edit": "Modificar" + }, + "empty": { + "noPlaylists": "Cap de lista de lectura creada pel moment" + }, + "header": { + "addFailure": "PodĆØm pas ajustar aquesta pista a una lista de lectura", + "addToPlaylist": "Ajustar a la lista de lectura", + "available": "Listas de lectura disponiblas", + "manage": "Gerir las listas de lectura", + "noResults": "Cap de resultat correspondent a aqueste filtre", + "track": "{title}, per {artist}" + }, + "label": { + "filter": "Filtrar" + }, + "placeholder": { + "filterPlaylist": "EscrivĆØtz lo nom de lista de lectura" + }, + "table": { + "edit": { + "header": { + "edit": "Modificar", + "lastModification": "DarriĆØra modificacion", + "name": "Nom", + "tracks": "Pistas" + } + } + }, + "warning": { + "duplicate": "{ 0 } es ja dins { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Ajustar a la lista de lecturaā€¦" + } + }, + "Widget": { + "button": { + "create": "Crear una lista de lectura", + "more": "Ne veire mai" + }, + "placeholder": { + "noPlaylists": "Cap de lista de lectura creada pel moment" + } + } + }, + "radios": { + "Button": { + "startRadio": "Legir la pista", + "stopRadio": "Arrestar la rĆ dio" + }, + "Card": { + "button": { + "edit": "Modificar" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostrar 1 etiqueta de mai | Mostrar {n} etiquetas de mai" + } + } + }, + "vui": { + "Pagination": { + "label": "Paginacion", + "next": "Pagina seguenta", + "previous": "Pagina precedenta" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{n} pista ajustada a la fila | {n} pistas ajustadas a la fila" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musica", + "other": "Autre", + "podcast": "Podcast" + }, + "label": "Categoria del contengut" + }, + "importStatus": { + "choices": { + "draft": { + "help": "La pista es enviada mas pas encara prevista per tractament pel servidor pel moment", + "label": "Borrolhon" + }, + "errored": { + "help": "Una error sā€™es producha en tractar aquesta pista, asseguratz-vos quā€™es corrĆØctament etiquetada", + "label": "Perturbat" + }, + "finished": { + "help": "Importat", + "label": "Acabat" + }, + "pending": { + "help": "La pista es enviada mas pas encara tractada pel servidor", + "label": "En espĆØra" + }, + "skipped": { + "help": "La pista ja presenta dins una de vĆ²stras bibliotĆØcas", + "label": "Ignorat" + } + }, + "label": "Clicar per mostrar mai dā€™informacion tocant lo processĆŗs dā€™import dā€™aqueste mandadĆ­s" + }, + "privacyLevel": { + "choices": { + "instance": "Lo monde dā€™aquesta instĆ ncia", + "private": "Degun fĆ²ra ieu", + "public": "Tot lo monde, per totas las instĆ ncias" + }, + "help": "Determinatz lo nivĆØl de visibilitat de vĆ²stra activitat", + "label": "Visibilitat de lā€™activitat", + "shortChoices": { + "instance": "InstĆ ncia", + "private": "Privat", + "public": "Tot lo monde" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contengut illegal", + "invalidMetadata": "Metadonada invalida", + "offensiveContent": "Contengut ofensiu", + "other": "Autre", + "takedownRequest": "Demanda de retrait" + }, + "label": "Categoria" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data dā€™accĆØs", + "albumTitle": "Nom de lā€™album", + "artistName": "Nom de lā€™artista", + "bitrate": "Debit", + "creationDate": "Data de creacion", + "dateJoined": "Data dā€™inscripcion", + "domain": "Domenin", + "duration": "Durada", + "expirationDate": "Data dā€™expiracion", + "firstSeen": "Data de primiĆØra aparicion", + "followers": "Seguidors", + "itemsCount": "Elements", + "lastActivity": "DarriĆØra activitat", + "lastSeen": "DarriĆØra visita", + "modificationDate": "Data de modificacion", + "name": "Nom", + "receivedMessages": "Messatges recebuts", + "releaseDate": "Data de sortida", + "size": "Talha", + "trackTitle": "Nom de la pista", + "uploads": "MandadĆ­s", + "username": "Nom dā€™utilizaire", + "users": "Utilizaires" + }, + "scopes": { + "edits": { + "description": "AccĆØs a las modificacions", + "label": "Modificacions" + }, + "favorites": { + "label": "Favorits" + }, + "filters": { + "description": "AccĆØs als filtre de contengut", + "label": "Filtres de contengut" + }, + "follows": { + "description": "AccĆØs al seguiment", + "label": "Seguir" + }, + "libraries": { + "description": "AccĆØs als fichiĆØrs Ć udio, bibliotĆØcas, artistas, albums e pistas", + "label": "BibliotĆØca e mandadĆ­s" + }, + "listenings": { + "description": "AccĆØs a lā€™istoric dā€™escota", + "label": "Escotas" + }, + "notifications": { + "description": "AccĆØs a las notificacions", + "label": "Notificacions" + }, + "playlists": { + "description": "AccĆØs a las listas de lectura", + "label": "Listas de lectura" + }, + "profile": { + "description": "AccĆØs als corriĆØls, nom dā€™utilizaire e informacions del perfil", + "label": "Perfil" + }, + "radios": { + "description": "AccĆØs a las rĆ dios", + "label": "RĆ dios" + }, + "reports": { + "description": "AccĆØs als senhalaments de moderacion", + "label": "Senhalaments" + }, + "security": { + "description": "Accedir als paramĆØtres de seguretat coma lo senhal e las autorizacions", + "label": "Seguretat" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data de sortida", + "title": "TĆ­tol" + }, + "artist": { + "name": "Nom" + }, + "cover": { + "label": "Jaqueta" + }, + "description": { + "label": "Descripcion" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "license": "LicĆ©ncia", + "position": "Posicions", + "title": "TĆ­tol" + } + }, + "useReport": { + "account": { + "typeLabel": "Compte" + }, + "album": { + "label": "Senhalar aqueste albumā€¦", + "typeLabel": "Album" + }, + "artist": { + "label": "Senhalar aqueste artistaā€¦", + "typeLabel": "Artista" + }, + "channel": { + "label": "Senhalar aquesta cadenaā€¦", + "typeLabel": "Cadena" + }, + "library": { + "label": "Senhalar aquesta bibliotĆØcaā€¦", + "typeLabel": "BibliotĆØca" + }, + "playlist": { + "label": "Senhalar aquesta lista de lecturaā€¦", + "typeLabel": "Lista de lectura" + }, + "track": { + "label": "Senhalar aquesta pistaā€¦", + "typeLabel": "Pista" + } + }, + "useReportConfigs": { + "account": { + "label": "Compte", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Data de sortida", + "title": "TĆ­tol" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Cadena" + }, + "creationDate": { + "label": "Data de creacion" + }, + "library": { + "description": "Descripcion", + "label": "BibliotĆØca" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Nom" + }, + "playlist": { + "label": "Lista de lectura" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "label": "Pista", + "license": "LicĆ©ncia", + "position": "Posicions", + "title": "TĆ­tol" + }, + "visibility": { + "label": "Visibilitat" + } + } + }, + "useThemeList": { + "darkTheme": "Escur", + "lightTheme": "Clar" + } + }, + "init": { + "axios": { + "rateLimitDelay": "AvĆØtz realizat trĆ²pas de requĆØstas e sĆØtz estat limitat, volgatz tornar ensajar dā€™aquĆ­ {delay}", + "rateLimitLater": "AvĆØtz realizat trĆ²pas de requĆØstas e sĆØtz estat limitat, volgatz tornar ensajar mai tard" + }, + "sentry": { + "allow": "Autorizar", + "deny": "Refusar" + }, + "serviceWorker": { + "actions": { + "later": "Mai tard", + "update": "Actualizar" + }, + "newAppVersion": "Una nĆ²va version de lā€™aplicacion es disponibla." + } + }, + "views": { "Notifications": { + "button": { + "read": "Las marcar totas coma legidas", + "submit": "ComprĆ©s !" + }, + "empty": { + "notifications": "Cap de notificacion de mostrar" + }, + "header": { + "funkwhaleSupport": "Vos agrada Funkwhale ?", + "instanceSupport": "SostĆ©ner aqueste pod Funkwhale", + "messages": "VĆ²stre messatge", + "notifications": "VĆ²stras notificacions" + }, + "label": { + "reminder": "Me tornar avisar dā€™aquĆ­ :", + "showRead": "Mostrar las notificacions legidas" + }, + "link": { + "donate": "Donar", + "help": "DescobrissĆØtz dā€™autras biaisses dā€™ajudar" + }, + "loading": { + "notifications": "Cargament de las notificacionsā€¦" + }, + "message": { + "funkwhaleSupport": "AvĆØm remarcat que sĆØtz aquĆ­ dempuĆØi un brieu. Se Funkwhale vos es util, poiriam utilizar vĆ²stra ajuda per lo far venir encara melhor !" + }, "option": { "delay": { "30": "30 jorns", @@ -3461,584 +3216,63 @@ "never": "Jamai" } }, - "link": { - "help": "DescobrissĆØtz dā€™autras biaisses dā€™ajudar", - "donate": "Donar" + "title": "Notificacions" + }, + "Search": { + "button": { + "submit": "Enviar la requĆØsta" }, "header": { - "funkwhaleSupport": "Vos agrada Funkwhale ?", - "instanceSupport": "SostĆ©ner aqueste pod Funkwhale", - "messages": "VĆ²stre messatge", - "notifications": "VĆ²stras notificacions" + "remote": "Cercar un objĆØcte distant", + "rss": "Sā€™abonar al flux RSS dā€™un podcast", + "search": "Recercar" }, - "button": { - "submit": "ComprĆ©s !", - "read": "Las marcar totas coma legidas" - }, - "loading": { - "notifications": "Cargament de las notificacionsā€¦" - }, - "empty": { - "notifications": "Cap de notificacion de mostrar." - }, - "title": "Notificacions", "label": { - "reminder": "Me tornar avisar dā€™aquĆ­ :", - "showRead": "Mostrar las notificacions legidas" - }, - "message": { - "funkwhaleSupport": "AvĆØm remarcat que sĆØtz aquĆ­ dempuĆØi un brieu. Se Funkwhale vos es util, poiriam utilizar vĆ²stra ajuda per lo far venir encara melhor !" + "albums": "Albums", + "artists": "Artistas", + "playlists": "Listas de lectura", + "podcasts": "Podcast", + "radios": "RĆ dios", + "series": "Serias", + "tags": "Etiquetas", + "tracks": "Pistas" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nom dā€™utilizaire", - "loginStatus": { - "disabled": "Desactivada", - "enabled": "Activada", - "label": "Estat del compte" - }, - "displayName": "Nom public", - "email": "AdreƧa electronica", - "lastActivity": "DarriĆØra activitat", - "lastChecked": "DarriĆØra verificacion", - "permissions": "Autorizacions", - "signupDate": "Data dā€™inscripcion", - "userType": "Tipe" - }, - "audioContent": { - "cachedSize": "Talha del cache", - "megabyte": "Mo", - "totalSize": "Talha totala", - "uploadQuota": "QuĆ²ta de mandadĆ­s" - }, - "activity": { - "emittedFollows": "Seguiments de bibliotĆØcas enviats", - "emittedMessages": "Messatge emĆ©s", - "firstSeen": "PrimiĆØra aparicion", - "receivedFollows": "Seguiments de bibliotĆØcas recebuts" - } - }, - "header": { - "accountData": "Donadas del compte", - "activity": "Activitat", - "audioContent": "Contengut Ć udio", - "localAccount": "Compte local", - "activePolicy": "Aqueste domeni es sosmĆ©s a de rĆØglas de moderacion especificadas", - "noPolicy": "AvĆØtz pas cap de rĆØgla en plaƧa per aqueste compte." - }, - "button": { - "addPolicy": "Ajustar una rĆØgla de moderacion" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "domain": "Domenu", - "libraries": "BibliotĆØcas", - "linkedReports": "Senhalaments ligats", - "openProfile": "Dobrir lo perfil", - "remoteProfile": "Dobrir lo perfil alonhat", - "requests": "Demandas", - "tracks": "Pistas", - "uploads": "MandadĆ­s", - "django": "Veire sul panĆØl dā€™admin de Django" - }, - "tooltip": { - "uploadQuota": "DefinissĆØtz la quantitat de contengut que lā€™utilizaire pĆ²t enviar. Daissatz void per emplegar las valors per defaut de lā€™instĆ ncia." - }, - "option": { - "permission": { - "library": "BibliotĆØca", - "moderation": "Moderacion", - "settings": "ParamĆØtres" - } - }, - "description": { - "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossĆ­ vĆ²stra instĆ ncia deu interagir amb un compte o domeni donat." - }, - "notApplicable": "ND", - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" - } - }, - "Base": { - "link": { - "accounts": "Comptes", - "domains": "Domenis", - "reports": "Senhalaments", - "userRequests": "Demandas de lā€™utilizaire" - }, - "title": "Moderacion", - "menu": { - "secondary": "MenĆŗ segondari" - } - }, - "DomainsDetail": { - "header": { - "activity": "Activitat", - "audioContent": "Contengut Ć udio", - "instanceData": "Donadas de lā€™instĆ ncia", - "activePolicy": "Aqueste domeni es sosmĆ©s a de rĆØglas de moderacion especificadas", - "noPolicy": "AvĆØtz pas cap de rĆØgla en plaƧa per aqueste domeni." - }, - "button": { - "addPolicy": "Ajustar una rĆØgla de moderacion", - "addToAllowList": "Ajustar a la lista dā€™autorizacion", - "refreshNodeInfo": "Actualizar las info del nos", - "removeFromAllowList": "Tirar de la lista de las autorizacions" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "knownAccounts": "Comptes coneguts", - "libraries": "BibliotĆØcas", - "website": "Dobrir lo site web", - "tracks": "Pistas", - "uploads": "MandadĆ­s", - "django": "Veire sul panĆØl dā€™admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "activity": { - "emittedFollows": "Seguiments de bibliotĆØcas enviats", - "emittedMessages": "Messatge emĆ©s", - "firstSeen": "PrimiĆØra aparicion", - "receivedFollows": "Seguiments de bibliotĆØcas recebuts" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Error en recuperar las informacions del nos", - "label": "Estatut" - }, - "inAllowList": { - "label": "Es present dins la lista dā€™autorizacion", - "false": "Non", - "true": "ƒc" - }, - "lastChecked": "DarriĆØra verificacion", - "domainName": "Nom", - "software": { - "label": "Logicial" - }, - "totalUsers": "Utilizaires totals" - } - }, - "description": { - "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossĆ­ vĆ²stra instĆ ncia deu interagir amb un compte o domeni donat." - }, - "notApplicable": "ND", - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" - } - }, - "DomainsList": { - "button": { - "add": "Ajustar" - }, - "label": { - "addDomain": "Ajustar un domeni", - "addToAllowList": "Ajustar a la lista dā€™autorizacion" - }, - "title": "Domenis", - "header": { - "domains": "Domenis", - "failure": "Error en crear lo domeni" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Tot", - "resolved": "Resolgut", - "unresolved": "Pas resolgut" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "ƒrdre" - }, - "label": "ƒrdre" - }, - "title": "Senhalaments", - "header": { - "reports": "Senhalaments" - }, - "label": { - "search": "Recercar", - "status": "Estatut" - }, - "placeholder": { - "search": "Recercar per tĆ­tol, artista, domeniā€¦" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Tot", - "approved": "Validat", - "pending": "En espĆØra", - "refused": "Regetada" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "ƒrdre" - }, - "label": "ƒrdre" - }, - "label": { - "search": "Recercar", - "status": "Estatut" - }, - "placeholder": { - "search": "Recercar per nom dā€™utilizaireā€¦" - }, - "title": "Demandas de lā€™utilizaire", - "header": { - "userRequests": "Demandas de lā€™utilizaire" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data dā€™accĆØs", - "firstSeen": "PrimiĆØra aparicion" - }, - "audioContent": { - "bitrate": { - "label": "Debit" - }, - "cachedSize": "Talha del cache", - "duration": "Durada", - "size": "Talha", - "track": "Pista" - }, - "upload": { - "name": "Nom" - } - }, - "link": { - "account": "Compte", - "domain": "Domenu", - "importStatus": "Estatut de lā€™import", - "library": "BibliotĆØca", - "remoteProfile": "Dobrir lo perfil alonhat", - "type": "Tipe", - "django": "Veire sul panĆØl dā€™admin de Django", - "visibility": "Visibilitat" - }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut Ć udio", - "local": "Local", - "uploadData": "Data de mandadĆ­s" - }, - "button": { - "delete": "Suprimir", - "download": "Telecargar" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste mandadĆ­s ?", - "content": { - "warning": "La suggestion serĆ  complĆØtament tirada, aquesta accion es irreversibla." - } - } - }, - "notApplicable": "ND" - }, - "LibraryDetail": { - "link": { - "account": "Compte", - "albums": "Albums", - "artists": "Artistas", - "domain": "Domenu", - "reports": "Senhalaments ligats", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "MandadĆ­s", - "django": "Veire sul panĆØl dā€™admin de Django", - "visibility": "Visibilitat" - }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut Ć udio", - "libraryData": "Donadas de bibliotĆØca", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "library": { - "description": "Descripcion", - "name": "Nom" - }, - "activity": { - "firstSeen": "PrimiĆØra aparicion", - "followers": "Seguidors" - } - }, - "button": { - "delete": "Suprimir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta bibliotĆØca ?", - "content": { - "warning": "Aquesta bibliotĆØca serĆ  tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" - } - }, - "AlbumDetail": { - "header": { - "activity": "Activitat", - "albumData": "Donadas de lā€™album", - "audioContent": "Contengut Ć udio", - "local": "Local" - }, - "link": { - "artist": "Artista", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "BibliotĆØcas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "MandadĆ­s", - "django": "Veire sul panĆØl dā€™admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "album": { - "description": "Descripcion", - "title": "TĆ­tol" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "PrimiĆØra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste album ?", - "content": { - "warning": "Lā€™album serĆ  tirat, e mai los mandadisses, pistas, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" - } - }, - "ArtistDetail": { - "header": { - "activity": "Activitat", - "artistData": "Donadas de lā€™artista", - "audioContent": "Contengut Ć udio", - "local": "Local" - }, - "link": { - "albums": "Albums", - "category": "Categoria", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "BibliotĆØcas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "MandadĆ­s", - "django": "Veire sul panĆØl dā€™admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "artist": { - "description": "Descripcion", - "name": "Nom" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "PrimiĆØra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste artista ?", - "content": { - "warning": "Lā€™artista serĆ  tirat, e mai los mandadisses, pistas, albums, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" - } - }, - "TagDetail": { - "header": { - "activity": "Activitat", - "audioContent": "Contengut Ć udio", - "tagData": "Donada de lā€™etiqueta" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "localProfile": "Dobrir lo perfil local", - "tracks": "Pistas", - "django": "Veire sul panĆØl dā€™admin de Django" - }, - "button": { - "delete": "Suprimir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta etiqueta ?", - "content": { - "warning": "Lā€™etiqueta seguenta serĆ  tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." - } - } - }, - "table": { - "activity": { - "firstSeen": "PrimiĆØra aparicion" - }, - "tag": { - "name": "Nom" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Activitat", - "local": "Local", - "trackData": "Donada de la pista" - }, - "link": { - "album": "Album", - "albumArtist": "Artista dā€™aqueste album", - "artist": "Artista", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "BibliotĆØcas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "uploads": "MandadĆ­s", - "django": "Veire sul panĆØl dā€™admin de Django" - }, - "table": { - "trackData": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "track": { - "copyright": "Copyright", - "description": "Descripcion", - "discNumber": "NumĆØro del disc", - "license": "LicĆ©ncia", - "position": "Posicions", - "title": "TĆ­tol" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "PrimiĆØra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta pista ?", - "content": { - "warning": "La pista serĆ  tirada, e mai las pistas, mandadisses, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "edits": "Modificacions", - "libraries": "BibliotĆØcas", - "tags": "Etiquetas", - "tracks": "Pistas", - "uploads": "MandadĆ­s" - }, - "title": "Gerir la bibliotĆØca", - "menu": { - "secondary": "MenĆŗ segondari" - } - }, - "EditsList": { - "title": "Modificacions", - "header": { - "edits": "Modificacions de la bibliotĆØca" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Suprimir", + "openRemote": "Dobrir lo perfil alonhat", + "refresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut Ć udio", + "channelData": "Donadas de la cadena" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "Veire sul panĆØl dā€™admin de Django", + "localProfile": "Dobrir lo perfil local" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta cadena serĆ  tirada, e mai los mandadisses, pistas e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste cadena ?" + } + }, "table": { - "channelData": { - "account": "Compte", - "category": "Categoria", - "description": "Descripcion", - "domain": "Domenu", - "name": "Nom", - "rss": "Flux RSS", - "url": "URL" + "activity": { + "edits": "Modificacions", + "favorited": "Pistas en favorit", + "firstSeen": "PrimiĆØra aparicion", + "linkedReports": "Senhalaments ligats", + "listenings": "Escotas", + "playlists": "Listas de lectura" }, "audioContent": { "albums": "Albums", @@ -4047,40 +3281,16 @@ "tracks": "Pistas", "uploads": "MandadĆ­s" }, - "activity": { - "edits": "Modificacions", - "favorited": "Pistas en favorit", - "firstSeen": "PrimiĆØra aparicion", - "linkedReports": "Senhalaments ligats", - "listenings": "Escotas", - "playlists": "Listas de lectura" + "channelData": { + "account": "Compte", + "category": "Categoria", + "description": "Descripcion", + "domain": "Domenu", + "name": "Nom", + "rss": "Flux RSS", + "url": "URL" } }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut Ć udio", - "channelData": "Donadas de la cadena" - }, - "button": { - "delete": "Suprimir", - "openRemote": "Dobrir lo perfil alonhat", - "refresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste cadena ?", - "content": { - "warning": "Aquesta cadena serĆ  tirada, e mai los mandadisses, pistas e abonaments ligats. Aquesta accions es irreversibla." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Dobrir lo perfil local", - "django": "Veire sul panĆØl dā€™admin de Django" - }, "warning": { "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" } @@ -4104,53 +3314,1201 @@ "channels": "Cadenas", "federation": "Federacion", "instanceInfo": "Info. de lā€™instĆ ncia", - "settings": "ParamĆØtres de lā€™intĆ ncia", "moderation": "Moderacion", "music": "Musica", "playlists": "Listas de lectura", "sections": "Seccions", "security": "Seguretat", + "settings": "ParamĆØtres de lā€™intĆ ncia", "signups": "Inscripcions", "stats": "Estatisticas", "subsonic": "Subsonic", "ui": "InterfĆ cia utilizaire" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "albumData": "Donadas de lā€™album", + "audioContent": "Contengut Ć udio", + "local": "Local" + }, + "link": { + "artist": "Artista", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "BibliotĆØcas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "MandadĆ­s" + }, + "modal": { + "delete": { + "content": { + "warning": "Lā€™album serĆ  tirat, e mai los mandadisses, pistas, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste album ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "PrimiĆØra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "album": { + "description": "Descripcion", + "title": "TĆ­tol" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" + } + }, + "ArtistDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "artistData": "Donadas de lā€™artista", + "audioContent": "Contengut Ć udio", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Categoria", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "BibliotĆØcas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "MandadĆ­s" + }, + "modal": { + "delete": { + "content": { + "warning": "Lā€™artista serĆ  tirat, e mai los mandadisses, pistas, albums, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste artista ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "PrimiĆØra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "artist": { + "description": "Descripcion", + "name": "Nom" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "edits": "Modificacions", + "libraries": "BibliotĆØcas", + "tags": "Etiquetas", + "tracks": "Pistas", + "uploads": "MandadĆ­s" + }, + "menu": { + "secondary": "MenĆŗ segondari" + }, + "title": "Gerir la bibliotĆØca" + }, + "EditsList": { + "header": { + "edits": "Modificacions de la bibliotĆØca" + }, + "title": "Modificacions" + }, + "LibraryDetail": { + "button": { + "delete": "Suprimir" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut Ć udio", + "libraryData": "Donadas de bibliotĆØca", + "local": "Local" + }, + "link": { + "account": "Compte", + "albums": "Albums", + "artists": "Artistas", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Domenu", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "MandadĆ­s", + "visibility": "Visibilitat" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta bibliotĆØca serĆ  tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aquesta bibliotĆØca ?" + } + }, + "table": { + "activity": { + "firstSeen": "PrimiĆØra aparicion", + "followers": "Seguidors" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + }, + "library": { + "description": "Descripcion", + "name": "Nom" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" + } + }, + "TagDetail": { + "button": { + "delete": "Suprimir" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut Ć udio", + "tagData": "Donada de lā€™etiqueta" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "django": "Veire sul panĆØl dā€™admin de Django", + "localProfile": "Dobrir lo perfil local", + "tracks": "Pistas" + }, + "modal": { + "delete": { + "content": { + "warning": "Lā€™etiqueta seguenta serĆ  tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." + }, + "header": "Suprimir aquesta etiqueta ?" + } + }, + "table": { + "activity": { + "firstSeen": "PrimiĆØra aparicion" + }, + "tag": { + "name": "Nom" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "local": "Local", + "trackData": "Donada de la pista" + }, + "link": { + "album": "Album", + "albumArtist": "Artista dā€™aqueste album", + "artist": "Artista", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "BibliotĆØcas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "uploads": "MandadĆ­s" + }, + "modal": { + "delete": { + "content": { + "warning": "La pista serĆ  tirada, e mai las pistas, mandadisses, favorits e istorics dā€™escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aquesta pista ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "PrimiĆØra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "track": { + "copyright": "Copyright", + "description": "Descripcion", + "discNumber": "NumĆØro del disc", + "license": "LicĆ©ncia", + "position": "Posicions", + "title": "TĆ­tol" + }, + "trackData": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" + } + }, + "UploadDetail": { + "button": { + "delete": "Suprimir", + "download": "Telecargar" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut Ć udio", + "local": "Local", + "uploadData": "Data de mandadĆ­s" + }, + "link": { + "account": "Compte", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Domenu", + "importStatus": "Estatut de lā€™import", + "library": "BibliotĆØca", + "remoteProfile": "Dobrir lo perfil alonhat", + "type": "Tipe", + "visibility": "Visibilitat" + }, + "modal": { + "delete": { + "content": { + "warning": "La suggestion serĆ  complĆØtament tirada, aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste mandadĆ­s ?" + } + }, + "notApplicable": "ND", + "table": { + "activity": { + "accessedDate": "Data dā€™accĆØs", + "firstSeen": "PrimiĆØra aparicion" + }, + "audioContent": { + "bitrate": { + "label": "Debit", + "value": "{bitrate}/s" + }, + "cachedSize": "Talha del cache", + "duration": "Durada", + "size": "Talha", + "track": "Pista" + }, + "upload": { + "name": "Nom" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Ajustar una rĆØgla de moderacion" + }, + "description": { + "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossĆ­ vĆ²stra instĆ ncia deu interagir amb un compte o domeni donat" + }, + "header": { + "accountData": "Donadas del compte", + "activePolicy": "Aqueste domeni es sosmĆ©s a de rĆØglas de moderacion especificadas", + "activity": "Activitat", + "audioContent": "Contengut Ć udio", + "localAccount": "Compte local", + "noPolicy": "AvĆØtz pas cap de rĆØgla en plaƧa per aqueste compte." + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "django": "Veire sul panĆØl dā€™admin de Django", + "domain": "Domenu", + "libraries": "BibliotĆØcas", + "linkedReports": "Senhalaments ligats", + "openProfile": "Dobrir lo perfil", + "remoteProfile": "Dobrir lo perfil alonhat", + "requests": "Demandas", + "tracks": "Pistas", + "uploads": "MandadĆ­s" + }, + "notApplicable": "ND", + "option": { + "permission": { + "library": "BibliotĆØca", + "moderation": "Moderacion", + "settings": "ParamĆØtres" + } + }, + "table": { + "accountData": { + "displayName": "Nom public", + "email": "AdreƧa electronica", + "lastActivity": "DarriĆØra activitat", + "lastChecked": "DarriĆØra verificacion", + "loginStatus": { + "disabled": "Desactivada", + "enabled": "Activada", + "label": "Estat del compte" + }, + "permissions": "Autorizacions", + "signupDate": "Data dā€™inscripcion", + "userType": "Tipe", + "username": "Nom dā€™utilizaire" + }, + "activity": { + "emittedFollows": "Seguiments de bibliotĆØcas enviats", + "emittedMessages": "Messatge emĆ©s", + "firstSeen": "PrimiĆØra aparicion", + "receivedFollows": "Seguiments de bibliotĆØcas recebuts" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "megabyte": "Mo", + "totalSize": "Talha totala", + "uploadQuota": "QuĆ²ta de mandadĆ­s" + } + }, + "tooltip": { + "uploadQuota": "DefinissĆØtz la quantitat de contengut que lā€™utilizaire pĆ²t enviar. Daissatz void per emplegar las valors per defaut de lā€™instĆ ncia." + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" + } + }, + "Base": { + "link": { + "accounts": "Comptes", + "domains": "Domenis", + "reports": "Senhalaments", + "userRequests": "Demandas de lā€™utilizaire" + }, + "menu": { + "secondary": "MenĆŗ segondari" + }, + "title": "Moderacion" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Ajustar una rĆØgla de moderacion", + "addToAllowList": "Ajustar a la lista dā€™autorizacion", + "refreshNodeInfo": "Actualizar las info del nos", + "removeFromAllowList": "Tirar de la lista de las autorizacions" + }, + "description": { + "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossĆ­ vĆ²stra instĆ ncia deu interagir amb un compte o domeni donat" + }, + "header": { + "activePolicy": "Aqueste domeni es sosmĆ©s a de rĆØglas de moderacion especificadas", + "activity": "Activitat", + "audioContent": "Contengut Ć udio", + "instanceData": "Donadas de lā€™instĆ ncia", + "noPolicy": "AvĆØtz pas cap de rĆØgla en plaƧa per aqueste domeni." + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "django": "Veire sul panĆØl dā€™admin de Django", + "knownAccounts": "Comptes coneguts", + "libraries": "BibliotĆØcas", + "tracks": "Pistas", + "uploads": "MandadĆ­s", + "website": "Dobrir lo site web" + }, + "notApplicable": "ND", + "table": { + "activity": { + "emittedFollows": "Seguiments de bibliotĆØcas enviats", + "emittedMessages": "Messatge emĆ©s", + "firstSeen": "PrimiĆØra aparicion", + "receivedFollows": "Seguiments de bibliotĆØcas recebuts" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + }, + "instanceData": { + "domainName": "Nom", + "inAllowList": { + "false": "Non", + "label": "Es present dins la lista dā€™autorizacion", + "true": "ƒc" + }, + "lastChecked": "DarriĆØra verificacion", + "nodeInfoStatus": { + "label": "Estatut", + "value": "Error en recuperar las informacions del nos" + }, + "software": { + "label": "Logicial", + "value": "{name} ({version})" + }, + "totalUsers": "Utilizaires totals" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vĆ²stra instĆ ncia, son pas lo rebat de lā€™activitat generala dā€™aqueste compte" + } + }, + "DomainsList": { + "button": { + "add": "Ajustar" + }, + "header": { + "domains": "Domenis", + "failure": "Error en crear lo domeni" + }, + "label": { + "addDomain": "Ajustar un domeni", + "addToAllowList": "Ajustar a la lista dā€™autorizacion" + }, + "title": "Domenis" + }, + "ReportsList": { + "header": { + "reports": "Senhalaments" + }, + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "status": { + "all": "Tot", + "resolved": "Resolgut", + "unresolved": "Pas resolgut" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "ƒrdre" + }, + "label": "ƒrdre" + }, + "placeholder": { + "search": "Recercar per tĆ­tol, artista, domeniā€¦" + }, + "title": "Senhalaments" + }, + "RequestsList": { + "header": { + "userRequests": "Demandas de lā€™utilizaire" + }, + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "status": { + "all": "Tot", + "approved": "Validat", + "pending": "En espĆØra", + "refused": "Regetada" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "ƒrdre" + }, + "label": "ƒrdre" + }, + "placeholder": { + "search": "Recercar per nom dā€™utilizaire" + }, + "title": "Demandas de lā€™utilizaire" + } + }, "users": { "Base": { "link": { "invitations": "Invitacions", "users": "Utilizaires" }, - "title": "Gerir los utilizaires", "menu": { "secondary": "MenĆŗ segondari" + }, + "title": "Gerir los utilizaires" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Connexionā€¦" + } + }, + "EmailConfirm": { + "header": { + "failure": "Confirmacion vĆ²stra adreƧa electronica impossibla", + "success": "CorriĆØl confirmat" + }, + "label": { + "confirmationCode": "CĆ²di de confirmacion" + }, + "link": { + "back": "Tornar a la pagina de connexion", + "login": "Contunhar cap a la pagina de connexion" + }, + "message": { + "success": "PodĆØtz ara utilizar lo servici sens cap de limitacions" + }, + "title": "Confirmar vĆ²stra adreƧa electronica" + }, + "Login": { + "header": { + "login": "Connectatz-vos a vĆ²stre compte Funkwhale" + }, + "title": "Connexion" + }, + "PasswordReset": { + "button": { + "requestReset": "Demandar un nĆ²u senhal" + }, + "header": { + "failure": "Error en demandar un novĆØl senhal", + "reset": "ReĆÆnicializar lo senhal" + }, + "help": { + "form": "GarnissĆØtz aqueste formulari per demandar un nĆ²u senhal. Auretz un corriĆØl a vĆ²stra adreƧa indicada contenent las consignas per reĆÆnicializar lo senhal." + }, + "label": { + "email": "AdreƧa electronica del compte" + }, + "link": { + "back": "Tornar a la pagina de connexion" + }, + "placeholder": { + "email": "Picatz lā€™adreƧa de corriĆØl ligada a vĆ²stre compte" + }, + "title": "ReĆÆnicializar lo senhal" + }, + "PasswordResetConfirm": { + "button": { + "update": "Actualizar vĆ²stre senhal" + }, + "header": { + "failure": "Error en cambiar lo senhal", + "success": "Senhal corrĆØctament modificat" + }, + "label": { + "newPassword": "NĆ²u senhal" + }, + "link": { + "back": "Tornar a la pagina de connexion", + "login": "Contunhar cap a la pagina de connexion" + }, + "message": { + "requestSent": "Se lā€™adreƧa quā€™avĆØtz provesida a las etapas precedentas es valida e associada a un compte utilizaire, sĆØtz per recebre un messatge amb las consignas de reĆÆnicializacion dā€™aquĆ­ una estona.", + "success": "VĆ²stre senhal es corrĆØctament cambiat." + }, + "title": "Cambiar lo senhal" + }, + "Plugins": { + "title": "Gerir los moduls" + }, + "ProfileActivity": { + "header": { + "playlists": "Listas de lectura", + "recentlyFavorited": "Ajustadas als favorits i a res", + "recentlyListened": "Escotadas i a res" + } + }, + "ProfileBase": { + "label": { + "self": "SĆØtz vos !" + }, + "link": { + "activity": "Activitat", + "domainView": "Veire sus {domain}", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", + "overview": "Vista dā€™ensemble" + }, + "title": "Perfil de {username}" + }, + "ProfileOverview": { + "button": { + "cancel": "Anullar", + "createChannel": "Crear una cadena", + "next": "Etapa seguenta", + "previous": "Etapa precedenta" + }, + "header": { + "channels": "Cadenas", + "libraries": "BibliotĆØcas de lā€™utilizaire", + "sharedLibraries": "Aqueste utilizaire partegĆØt las bibliotĆØcas seguentas" + }, + "link": { + "addNew": "Ajustar nĆ²u" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Cadena de lā€™artista" + }, + "header": "Crear una cadena", + "podcast": { + "header": "Cadena del podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crear un compte funkwhale" + }, + "title": "Inscripcion" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir", + "delete": "Suprimirā€¦", + "edit": "Modificarā€¦", + "embed": "Integrar", + "play": "Legir", + "updateChannel": "Actualizar la cadena", + "upload": "Enviar" + }, + "header": { + "artistChannel": "Cadena de lā€™artista", + "podcastChannel": "Cadena del podcast" + }, + "link": { + "channelEpisodes": "Totes los episĆ²dis", + "channelOverview": "Vista dā€™ensemble", + "channelTracks": "Pistas", + "domainView": "Veire sus {domain}", + "mirrored": "Miralh de {domain}", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion" + }, + "meta": { + "episodes": "{n} episĆ²di | {n} episĆ²dis", + "listenings": "{n} escota | {n} escotas", + "subscribers": "{n} abonat | {n} abonats", + "tracks": "{n} pista | {n} pistas" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta cadena serĆ  tirada, e mai totes los fichiĆØrs e donadas ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste cadena ?" + }, + "embed": { + "header": "Integrar aquesta pista a vĆ²stre site web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Sā€™utilizatz Mastodon o una autra aplicacion del fediverse, podĆØtz tanben vos abonar a aqueste compte :" + }, + "header": "Sā€™abonar sul fediverse" + }, + "funkwhale": { + "header": "Sā€™abonar a Funkwhale" + }, + "header": "Sā€™abonar a aquesta cadena", + "rss": { + "content": { + "help": "Copiatz-pegatz lā€™URL seguenta dins vĆ²stra aplicacion de podcast preferida :" + }, + "header": "Sā€™abonar via RSS" + } + } + }, + "title": "Cadena" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "DarriĆØrs episĆ²dis", + "latestTracks": "DarriĆØras pistas", + "series": "Serias", + "uploadsFailure": "Impossible de publicar unes mandadisses", + "uploadsProcessing": "Tractament dels mandadisses", + "uploadsSuccess": "Mandadisses corrĆØctament publicats" + }, + "link": { + "addAlbum": "Ajustar nĆ²u", + "erroredUploads": "Veire los mandadisses en error", + "skippedUploads": "Veire los mandadisses sautats" + }, + "message": { + "processing": "Funkwhale tracta vĆ²stres mandadisses e serĆ n lĆØu publicats." + }, + "meta": { + "progress": "BibliotĆØca e mandadĆ­s : {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Anullar", + "subscribe": "Sā€™abonar" + }, + "link": { + "addNew": "Ajustar nĆ²u" + }, + "modal": { + "subscription": { + "header": "Inscripcion" + } + }, + "placeholder": { + "search": "Filtrar per nomā€¦" + }, + "title": "Cadenas seguidas" + } + }, + "content": { + "Base": { + "link": { + "libraries": "BibliotĆØcas", + "tracks": "Pistas" + }, + "menu": { + "secondary": "MenĆŗ segondari" + }, + "title": "Ajustar de contengut" + }, + "Home": { + "button": { + "start": "ComenƧar" + }, + "description": { + "channel": { + "1": "Se sĆØtz musician o creator de podcasts, las cadenas son fachas per vos !", + "2": "Partejatz vĆ²stre trabalh publicament e obtenĆØtz de seguidors sus Funkwhale, sul Fediverse o de las aplicacions de podcast estant." + }, + "follow": "PodĆØtz seguir las bibliotĆØcas dā€™autres utilizaires per accedir a de nĆ²vas musicas. Las bibliotĆØcas publicas pĆ²don ĆØsser seguidas cĆ²p sec, mentre quā€™una bibliotĆØca privada demanda una aprovacion de sus proprietaris.", + "upload": "Enviatz vĆ²stra bibliotĆØca musicala personala a Funkwhale e aprofechatz-ne pertot e partejatz-la amb vĆ²stres amics e familha." + }, + "header": { + "channel": "Publicar vĆ²stre trabalh dins una cadena", + "follow": "Seguir de bibliotĆØcas alonhadas", + "upload": "Enviar de contengut tĆØrces a la bibliotĆØca" + }, + "help": { + "uploadQuota": "Aquesta instĆ ncia provesĆ­s fins a {quota} dā€™espaci per cada utilizaire." + }, + "title": "Ajustar e gerir lo contengut" + }, + "libraries": { + "Card": { + "button": { + "upload": "MandadĆ­s" + }, + "label": { + "size": "Talha totala dels fichiĆØrs dā€™aquesta bibliotĆØca" + }, + "link": { + "details": "Detalhs de la bibliotĆØca" + }, + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "FilesTable": { + "action": { + "delete": "Suprimir", + "restartImport": "RelanƧar lā€™import" + }, + "button": { + "showStatus": "Clicar per mostrar mai dā€™informacion tocant lo processĆŗs dā€™import dā€™aquesta pista" + }, + "empty": { + "noTracks": "I a pas encara de pistas ajustadas a aquesta bibliotĆØca" + }, + "label": { + "importStatus": "Estatut de lā€™import", + "search": "Recercar" + }, + "notApplicable": "ND", + "option": { + "status": { + "all": "Tot", + "draft": "Borrolhon", + "failed": "FracĆ s", + "finished": "Acabat", + "pending": "En espĆØra", + "skipped": "Ignorat" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "ƒrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per tĆ­tol, artista, albumā€¦" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artista", + "duration": "Durada", + "importStatus": "Estatut de lā€™import", + "size": "Talha", + "title": "TĆ­tol", + "uploadDate": "Data de mandadĆ­s" + } + } + } + }, + "Form": { + "button": { + "confirm": "Suprimir la bibliotĆØca", + "create": "Crear una bibliotĆØca", + "delete": "Suprimir", + "update": "Actualizar la bibliotĆØca" + }, + "description": { + "library": "Las bibliotĆØcas vos ajudan a organizar e partejar vĆ²stras colleccions de musica. PodĆØtz enviar vĆ²stra prĆ²pria collecion musicala a Funkwhale e la partejar amb vĆ²stres amics e vĆ²stra familha.", + "visibility": "Poiretz partejar vĆ²stra bibiotĆØca amb dā€™autres gents, sens importĆ ncia de sa visibilitat." + }, + "header": { + "failure": "Error" + }, + "label": { + "description": "Descripcion", + "name": "Nom", + "visibility": "Visibilitat" + }, + "message": { + "libraryCreated": "BibliotĆØca creada", + "libraryDeleted": "BibliotĆØca suprimida", + "libraryUpdated": "BibliotĆØca actualizada" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta bibliotĆØca e totas sas pistas serĆ n suprimidas. Aquesta accion se pĆ²t pas anullar." + }, + "header": "Suprimir aquesta bibliotĆØca ?" + } + }, + "placeholder": { + "description": "Aquesta bibliotĆØca conten ma musica personala, espĆØri que vos agradarĆ .", + "name": "Ma bibliotĆØca trĆ²p crana" + } + }, + "Home": { + "empty": { + "noLibrary": "Sembla quā€™avĆØtz pas cap de bibliotĆØca pel moment, es ora de ne crear una." + }, + "header": { + "libraries": "Mas bibliotĆØcas" + }, + "link": { + "createLibrary": "Crear una nĆ²va bibliotĆØca" + }, + "loading": { + "libraries": "Cargament de las bibliotĆØcasā€¦" + } + }, + "Quota": { + "button": { + "purge": "Purgar" + }, + "header": { + "currentUsage": "Utilizacion actuala" + }, + "label": { + "currentUsage": "{amount} utilizat de {max} autorizat", + "errored": "FichiĆØrs amb errors", + "pending": "FichiĆØrs en espĆØra", + "percentUsed": "{progress}%", + "skipped": "FichiĆØrs ignorats" + }, + "link": { + "viewFiles": "Veire los fichiĆØrs" + }, + "loading": { + "currentUsage": "Cargament de lā€™utilizacion de las donadasā€¦" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Las pistas enviadas mas pas complĆØtament tractadas pel servidor serĆ n complĆØtament suprimidas. Vos donarĆ  de nĆ²u lo quĆ²ta escafat." + }, + "header": "Purgar los fichiĆØrs amb errors ?" + }, + "purgePending": { + "content": { + "description": "Las pistas importadas que lo servidor a pas encara tractadas serĆ n complĆØtament suprimidas. Lo quĆ²ta correspondent vos serĆ  tornat." + }, + "header": "Purgar los fichiĆØrs en espĆØra ?" + }, + "purgeSkipped": { + "content": { + "description": "Las pistas enviadas mas ignoradas pendent lo processĆŗs dā€™importacion per mantun rasons serĆ n complĆØtament suprimidas. Vos donarĆ  de nĆ²u lo quĆ²ta escafat." + }, + "header": "Purgar los fichiĆØrs ignorats ?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Anullar lad emanda dā€™abonament", + "follow": "Seguir", + "pending": "Abonament en espĆØra de validacion", + "unfollow": "Quitar de seguir" + }, + "label": { + "scanFailure": "Error en explorant", + "scanPartialSuccess": "Explorada amb dā€™errors", + "scanPending": "Analisi en espĆØra", + "scanProgress": "Exploracion ({progress})", + "scanSuccess": "Explorat", + "sharingLink": "Ligam de partatge" + }, + "link": { + "scan": "Explorar ara ", + "scanDetails": "Detalhs" + }, + "message": { + "scanLaunched": "Exploracion lanƧada", + "scanSkipped": "Exploracion sautada (la darriĆØra es trĆ²p recenta)" + }, + "meta": { + "failedTracks": "Pistas en error : {tracks}", + "lastUpdate": "DarriĆØra actualizacion : ", + "tracks": "Cap de pista | {n} pista | {n} pistas" + }, + "modal": { + "unfollow": { + "content": { + "warning": "En quitar de seguir aquesta bibliotĆØca, perdretz lā€™accĆØs a son contengut." + }, + "header": "Quitar de seguir aquesta bibliotĆØca ?" + } + }, + "tooltip": { + "private": "Aquesta bibliotĆØca es privada e son proprietari deu validar vĆ²stra demanda dā€™accĆØs per que accediscatz a son contengut", + "public": "Aqueste bibliotĆØca es publica e podĆØtz accedir a son contengut liurament" + } + }, + "Home": { + "button": { + "refresh": "Actualizar" + }, + "description": { + "remoteLibraries": "Las bibliotĆØcas alonhadas apertenon a dā€™autres utilizaires del malhum. I podĆØtz accedir tant que siĆ”n publicas o quā€™ajatz lā€™autorizacion." + }, + "header": { + "knownLibraries": "BibliotĆØcas conegudas", + "remoteLibraries": "BibliotĆØcas alonhadas" + }, + "loading": { + "remoteLibraries": "Cargament de las bibliotĆØcas alonhadasā€¦" + } + }, + "ScanForm": { + "button": { + "submit": "Enviar la recĆØrca" + }, + "header": { + "failure": "Error en recuperar la bibliotĆØca alonhada" + }, + "label": { + "search": "Cercar una bibliotĆØca alonhada" + }, + "placeholder": { + "url": "Picatz lā€™URL dā€™una bibliotĆØca" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artistas", - "playlists": "Listas de lectura", - "podcasts": "Podcast", - "radios": "RĆ dios", - "series": "Serias", - "tags": "Etiquetas", - "tracks": "Pistas" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotĆØca per veire son contengut.", + "upload": "Aquesta bibliotĆØca es voida, deuriatz enviar quicĆ²m !" + } }, - "header": { - "search": "Recercar", - "remote": "Cercar un objĆØcte distant", - "rss": "Sā€™abonar al flux RSS dā€™un podcast" + "DetailOverview": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotĆØca per veire son contengut.", + "upload": "Aquesta bibliotĆØca es voida, deuriatz enviar quicĆ²m !" + } }, - "button": { - "submit": "Enviar la requĆØsta" + "DetailTracks": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotĆØca per veire son contengut.", + "upload": "Aquesta bibliotĆØca es voida, deuriatz enviar quicĆ²m !" + } + }, + "Edit": { + "button": { + "accept": "Acceptar", + "reject": "Regetar" + }, + "empty": { + "noFollowers": "Degun sĆØc pas aquesta bibliotĆØca" + }, + "header": { + "followers": "Seguidors", + "libraryContents": "Contengut de la bibliotĆØca" + }, + "loading": { + "followers": "Cargament dels seguidorsā€¦" + }, + "table": { + "action": { + "header": { + "action": "Accion", + "date": "Data", + "status": "Estatut", + "user": "Utilizaire" + }, + "status": { + "accepted": "Acceptat", + "pending": "En espĆØra de validacion", + "rejected": "Regetat" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Modificar", + "upload": "MandadĆ­s" + }, + "description": { + "sharingLink": "Partejatz aqueste ligam amb dā€™autres utilizaires per que pĆ²scan accedir a vĆ²stra bibliotĆØca en lo copiar-pegar dins la barra de recĆØrca de lor instĆ ncia." + }, + "label": { + "instance": "Restrenches", + "private": "Privada", + "public": "Public", + "sharingLink": "Ligam de partatge" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins lā€™interfĆ cia de moderacion", + "owner": "Lo proprietari es {username}", + "tracks": "Pistas" + }, + "meta": { + "tracks": "Cap de pista | {n} pista | {n} pistas" + }, + "title": "BibliotĆØca", + "tooltip": { + "instance": "Aquesta bibliotĆØca es restrencha als utilizaires dā€™aquesta instĆ ncia solament", + "private": "Aquesta bibliotĆØca es privada e son proprietari deu validar vĆ²stra demanda dā€™accĆØs per que accediscatz a son contengut", + "public": "Aqueste bibliotĆØca es publica e podĆØtz accedir a son contengut liurament" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir la lista de lectura", + "delete": "Suprimir", + "edit": "Modificar", + "embed": "Integrar", + "playAll": "O legir tot", + "stopEdit": "Arrestar la modificacion" + }, + "empty": { + "noTracks": "I a pas encara de pistas ajustadas a aquesta lista de lectura" + }, + "header": { + "tracks": "Pistas" + }, + "meta": { + "tracks": "Lista de lectura contenent {n} pista, per {username} | Lista de lectura contenent {n} pistas, per {username}" + }, + "modal": { + "delete": { + "content": { + "warning": "AquĆ² escafarĆ  aquesta lista de lectura per totjorn e poirĆ  pas ĆØsser anullat." + }, + "header": "VolĆØtz suprimir la lista de lectura Ā« {playlist} Ā» ?" + }, + "embed": { + "header": "Integrar aquesta lista de lectura a un site web" + } + }, + "title": "Lista de lectura" + }, "List": { + "button": { + "create": "Crear una lista de lectura", + "manage": "Gerir vĆ²stras listas de lectura", + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" + }, + "header": { + "browse": "PercĆ³rrer las listas de lectura", + "playlists": "Listas de lectura" + }, + "label": { + "search": "Recercar" + }, "ordering": { "direction": { "ascending": "Ascendent", @@ -4159,58 +4517,11 @@ }, "label": "ƒrdre" }, - "header": { - "browse": "PercĆ³rrer las listas de lectura", - "playlists": "Listas de lectura" - }, - "button": { - "create": "Crear una lista de lectura", - "manage": "Gerir vĆ²stras listas de lectura", - "search": "Recercar" - }, - "placeholder": { - "search": "EscrivĆØtz un nom de lista de lecturaā€¦" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vĆ²stra recĆØrca" - }, "pagination": { "results": "Resultats per pagina" }, - "label": { - "search": "Recercar" - } - }, - "Detail": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir", - "confirm": "Suprimir la lista de lectura", - "edit": "Modificar", - "embed": "Integrar", - "playAll": "O legir tot", - "stopEdit": "Arrestar la modificacion" - }, - "modal": { - "delete": { - "header": "VolĆØtz suprimir la lista de lectura Ā« { playlist } Ā» ?", - "content": { - "warning": "AquĆ² escafarĆ  aquesta lista de lectura per totjorn e poirĆ  pas ĆØsser anullat." - } - }, - "embed": { - "header": "Integrar aquesta lista de lectura a un site web" - } - }, - "title": "Lista de lectura", - "meta": { - "tracks": "Lista de lectura contenent { n } pista, per { username } | Lista de lectura contenent { n } pistas, per { username }" - }, - "empty": { - "noTracks": "I a pas encara de pistas ajustadas a aquesta lista de lectura" - }, - "header": { - "tracks": "Pistas" + "placeholder": { + "search": "EscrivĆØtz un nom de lista de lecturaā€¦" } } }, @@ -4218,289 +4529,25 @@ "Detail": { "button": { "confirm": "Suprimir la rĆ dio", + "delete": "Suprimir", "edit": "Modificarā€¦" }, - "modal": { - "delete": { - "header": "VolĆØtz suprimir la rĆ dio Ā« { playlist } Ā» ?", - "content": { - "warning": "AquĆ² escafarĆ  aquesta rĆ dio per totjorn e poirĆ  pas ĆØsser anullat." - } - } - }, "empty": { "noTracks": "I a pas encara de pistas ajustadas a aquesta rĆ dio" }, - "title": "RĆ dio", "header": { "tracks": "Pistas" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } pista ajustada a la fila | { n } pistas ajustadas a la fila" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "AccĆØs als fichiĆØrs Ć udio, bibliotĆØcas, artistas, albums e pistas", - "label": "BibliotĆØca e mandadĆ­s" - }, - "filters": { - "description": "AccĆØs als filtre de contengut", - "label": "Filtres de contengut" - }, - "profile": { - "description": "AccĆØs als corriĆØls, nom dā€™utilizaire e informacions del perfil", - "label": "Perfil" - }, - "edits": { - "description": "AccĆØs a las modificacions", - "label": "Modificacions" - }, - "follows": { - "description": "AccĆØs al seguiment", - "label": "Seguir" - }, - "listenings": { - "description": "AccĆØs a lā€™istoric dā€™escota", - "label": "Escotas" - }, - "reports": { - "description": "AccĆØs als senhalaments de moderacion", - "label": "Senhalaments" - }, - "notifications": { - "description": "AccĆØs a las notificacions", - "label": "Notificacions" - }, - "playlists": { - "description": "AccĆØs a las listas de lectura", - "label": "Listas de lectura" - }, - "radios": { - "description": "AccĆØs a las rĆ dios", - "label": "RĆ dios" - }, - "security": { - "description": "Accedir als paramĆØtres de seguretat coma lo senhal e las autorizacions", - "label": "Seguretat" - }, - "favorites": { - "label": "Favorits" - } }, - "filters": { - "accessedDate": "Data dā€™accĆØs", - "albumTitle": "Nom de lā€™album", - "artistName": "Nom de lā€™artista", - "bitrate": "Debit", - "creationDate": "Data de creacion", - "domain": "Domenu", - "duration": "Durada", - "expirationDate": "Data dā€™expiracion", - "firstSeen": "Data de primiĆØra aparicion", - "followers": "Seguidors", - "itemsCount": "Elements", - "lastActivity": "DarriĆØra activitat", - "lastSeen": "DarriĆØra visita", - "modificationDate": "Data de modificacion", - "name": "Nom", - "receivedMessages": "Messatges recebuts", - "releaseDate": "Data de sortida", - "dateJoined": "Data dā€™inscripcion", - "size": "Talha", - "trackTitle": "Nom de la pista", - "uploads": "MandadĆ­s", - "username": "Nom dā€™utilizaire", - "users": "Utilizaires" - }, - "fields": { - "privacyLevel": { - "label": "Visibilitat de lā€™activitat", - "help": "Determinatz lo nivĆØl de visibilitat de vĆ²stra activitat", - "shortChoices": { - "public": "Tot lo monde", - "instance": "InstĆ ncia", - "private": "Privat" + "modal": { + "delete": { + "content": { + "warning": "AquĆ² escafarĆ  aquesta rĆ dio per totjorn e poirĆ  pas ĆØsser anullat." }, - "choices": { - "instance": "Lo monde dā€™aquesta instĆ ncia", - "public": "Tot lo monde, per totas las instĆ ncias", - "private": "Degun fĆ²ra ieu" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoria", - "choices": { - "illegalContent": "Contengut illegal", - "invalidMetadata": "Metadonada invalida", - "offensiveContent": "Contengut ofensiu", - "other": "Autre", - "takedownRequest": "Demanda de retrait" - } - }, - "importStatus": { - "label": "Clicar per mostrar mai dā€™informacion tocant lo processĆŗs dā€™import dā€™aqueste mandadĆ­s", - "choices": { - "draft": { - "label": "Borrolhon", - "help": "La pista es enviada mas pas encara prevista per tractament pel servidor pel moment" - }, - "errored": { - "label": "Perturbat", - "help": "Una error sā€™es producha en tractar aquesta pista, asseguratz-vos quā€™es corrĆØctament etiquetada" - }, - "finished": { - "label": "Acabat", - "help": "Importat" - }, - "pending": { - "label": "En espĆØra", - "help": "La pista es enviada mas pas encara tractada pel servidor" - }, - "skipped": { - "label": "Ignorat", - "help": "La pista ja presenta dins una de vĆ²stras bibliotĆØcas" - } - } - }, - "contentCategory": { - "label": "Categoria del contengut", - "choices": { - "music": "Musica", - "other": "Autre", - "podcast": "Podcast" - } + "header": "VolĆØtz suprimir la rĆ dio Ā« {radio} Ā» ?" } - } + }, + "title": "RĆ dio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Compte" - }, - "album": { - "typeLabel": "Album", - "label": "Senhalar aqueste albumā€¦" - }, - "artist": { - "typeLabel": "Artista", - "label": "Senhalar aqueste artistaā€¦" - }, - "channel": { - "typeLabel": "Cadena", - "label": "Senhalar aquesta cadenaā€¦" - }, - "library": { - "typeLabel": "BibliotĆØca", - "label": "Senhalar aquesta bibliotĆØcaā€¦" - }, - "playlist": { - "typeLabel": "Lista de lectura", - "label": "Senhalar aquesta lista de lecturaā€¦" - }, - "track": { - "label": "Senhalar aquesta pistaā€¦", - "typeLabel": "Pista" - } - }, - "useReportConfigs": { - "account": { - "label": "Compte", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Data de sortida", - "title": "TĆ­tol" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Cadena" - }, - "track": { - "copyright": "Copyright", - "license": "LicĆ©ncia", - "position": "Posicions", - "title": "TĆ­tol", - "label": "Pista" - }, - "creationDate": { - "label": "Data de creacion" - }, - "library": { - "description": "Descripcion", - "label": "BibliotĆØca" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Nom" - }, - "playlist": { - "label": "Lista de lectura" - }, - "tags": { - "label": "Etiquetas" - }, - "visibility": { - "label": "Visibilitat" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "LicĆ©ncia", - "position": "Posicions", - "title": "TĆ­tol" - }, - "cover": { - "label": "Jaqueta" - }, - "description": { - "label": "Descripcion" - }, - "artist": { - "name": "Nom" - }, - "album": { - "releaseDate": "Data de sortida", - "title": "TĆ­tol" - }, - "tags": { - "label": "Etiquetas" - } - } - }, - "useThemeList": { - "darkTheme": "Escur", - "lightTheme": "Clar" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Una nĆ²va version de lā€™aplicacion es disponibla.", - "actions": { - "later": "Mai tard", - "update": "Actualizar" - } - }, - "axios": { - "rateLimitDelay": "AvĆØtz realizat trĆ²pas de requĆØstas e sĆØtz estat limitat, volgatz tornar ensajar dā€™aquĆ­ { delay }", - "rateLimitLater": "AvĆØtz realizat trĆ²pas de requĆØstas e sĆØtz estat limitat, volgatz tornar ensajar mai tard" } } } From b8ed2ccd5c334cb778ca2968d207d1d4042e9b3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Azn=C3=B6rth=20Niryn?= <nathanael.barentin@disroot.org> Date: Mon, 4 Dec 2023 19:38:20 +0000 Subject: [PATCH 185/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index eb1e482fb..ea05ccd2c 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -16,7 +16,7 @@ "findApp": "Trouver une application", "funkwhale": "Une plateforme sociale pour apprĆ©cier et partager la musique", "publicContent": "Parcourir le contenu public", - "signup": "Inscription" + "signup": "Sā€™inscrire" }, "help": { "closedRegistrations": "Les inscriptions sont closes sur ce pod. Vous pouvez vous inscrire sur un autre pod en utilisant le lien ci-dessous." @@ -33,7 +33,7 @@ "noDescription": "Pas de description disponible" }, "stat": { - "activeUsers": "{ n } compte actif | { n } comptes actifs", + "activeUsers": "Pas de comptes actifs | { n } compte actif | { n } comptes actifs", "hoursOfMusic": "heure de musique | heures de musique" }, "title": "ƀ propos" From d112ea4bc6899647154c11b8d3810ea414764fc0 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:40:10 +0000 Subject: [PATCH 186/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index ea05ccd2c..87ee6712b 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -33,7 +33,7 @@ "noDescription": "Pas de description disponible" }, "stat": { - "activeUsers": "Pas de comptes actifs | { n } compte actif | { n } comptes actifs", + "activeUsers": "Pas dā€™utilisateurs actifs | { n } utilisateur actif | { n } utilisateurs actifs", "hoursOfMusic": "heure de musique | heures de musique" }, "title": "ƀ propos" From efffeac280e018dd0db6ec1318f27a6eeb197468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Azn=C3=B6rth=20Niryn?= <nathanael.barentin@disroot.org> Date: Mon, 4 Dec 2023 19:40:18 +0000 Subject: [PATCH 187/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 87ee6712b..0781d775d 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -34,7 +34,7 @@ }, "stat": { "activeUsers": "Pas dā€™utilisateurs actifs | { n } utilisateur actif | { n } utilisateurs actifs", - "hoursOfMusic": "heure de musique | heures de musique" + "hoursOfMusic": "0 heures de musique | {n} heure de musique | {n} heures de musique" }, "title": "ƀ propos" }, From 60db27dfbad4061316fa6bd3d03dcb083c114f24 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 4 Dec 2023 19:41:34 +0000 Subject: [PATCH 188/371] Translated using Weblate (French) Currently translated at 99.9% (2181 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 0781d775d..b4c74d1a3 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -34,7 +34,7 @@ }, "stat": { "activeUsers": "Pas dā€™utilisateurs actifs | { n } utilisateur actif | { n } utilisateurs actifs", - "hoursOfMusic": "0 heures de musique | {n} heure de musique | {n} heures de musique" + "hoursOfMusic": "0 heure de musique | {n} heure de musique | {n} heures de musique" }, "title": "ƀ propos" }, From 369b80bb1c0ba7579adb58702efae1badbd70374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= <correoxm@disroot.org> Date: Tue, 5 Dec 2023 03:58:51 +0000 Subject: [PATCH 189/371] Translated using Weblate (Galician) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/gl/ --- front/src/locales/gl.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index e63b5a558..c340c2c32 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -763,7 +763,7 @@ "loginFailure": "Non podemos darche acceso" }, "help": { - "approvalRequired": "Se te rexistraches recentemente, poderĆ­as ter que agardar un pouco para que se revise a conta ou verifique o teu email.", + "approvalRequired": "Se te rexistraches recentemente, poderĆ­as ter que agardar un pouco para que se revise a conta ou verifique o teu enderezo de correo.", "invalidCredentials": "Comproba que as credenciais son correctas e asegĆŗrate de ter verificado o email." }, "label": { @@ -1280,7 +1280,7 @@ "label": { "language": "Idioma", "shortcuts": "Atallos de teclado", - "theme": "Decorado" + "theme": "Cambiar aparencia" }, "link": { "about": "Acerca de", @@ -1307,7 +1307,7 @@ "label": { "language": "Idioma", "shortcuts": "Atallos de teclado", - "theme": "Decorado" + "theme": "Cambiar aparencia" }, "link": { "about": "Acerca de", @@ -1539,7 +1539,7 @@ }, "modal": { "embed": { - "header": "InclĆŗe esta canciĆ³n no teu sitio web" + "header": "InclĆŗe o traballo desta autora no teu sitio web" } }, "title": "Artista" @@ -1658,7 +1658,7 @@ }, "header": { "failure": "Erro Ć³ gardar o axuste", - "recentEdits": "Recentemente engadida", + "recentEdits": "EdiciĆ³ns recentes", "success": "Enviouse correctamente a ediciĆ³n.", "unreviewed": "EdiciĆ³ns recentes agardando revisiĆ³n" }, @@ -1749,9 +1749,9 @@ "header": { "newChannels": "Novas canles", "playlists": "Listas de reproduciĆ³n", - "recentlyAdded": "Recentemente engadida", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" + "recentlyAdded": "ƚltimas engadidas", + "recentlyFavorited": "ƚltimas favorecidas", + "recentlyListened": "ƚltimas escoitadas" }, "title": "Biblioteca" }, @@ -2087,7 +2087,7 @@ "artist": "Artista", "creationDate": "Data de creaciĆ³n", "domain": "Dominio", - "name": "TĆ­tulo", + "name": "Nome", "releaseDate": "Data da Ćŗltima vista", "tracks": "CanciĆ³ns" } @@ -2485,7 +2485,7 @@ } }, "tooltip": { - "blockAll": "Bloquear todo desta conta ou dominio. Isto evitarĆ” calquera interacciĆ³n coa entidade, e eliminarĆ” o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", + "blockAll": "Bloquear todo desta conta ou dominio. Isto evitarĆ” calquera interacciĆ³n coa entidade, e eliminarĆ” o contido relacionado (subidas, bibliotecas, seguimentos, etc.", "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condiciĆ³n sen eliminala completamente.", "rejectMedia": "Non baixar ningĆŗn ficheiro de medios (audio, portada, avatar da contaā€¦) desta conta ou dominio. Esto eliminarĆ” tamĆ©n o contido existente.", "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", @@ -4015,8 +4015,8 @@ "ProfileActivity": { "header": { "playlists": "Listas de reproduciĆ³n", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" + "recentlyFavorited": "ƚltimas favorecidas", + "recentlyListened": "ƚltimas escoitadas" } }, "ProfileBase": { @@ -4103,7 +4103,7 @@ "header": "Eliminar esta Canle?" }, "embed": { - "header": "InclĆŗe esta canciĆ³n no teu sitio web" + "header": "InclĆŗe o traballo desta artista no teu sitio web" }, "subscribe": { "fediverse": { From 5cc021919604eb4001c69e4a4efe149b0fcbbf58 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sat, 9 Dec 2023 12:30:22 +0000 Subject: [PATCH 190/371] Added translation using Weblate (Bengali (Bangladesh)) --- front/src/locales/bn_BD.json | 4616 ++++++++++++++++++++++++++++++++++ 1 file changed, 4616 insertions(+) create mode 100644 front/src/locales/bn_BD.json diff --git a/front/src/locales/bn_BD.json b/front/src/locales/bn_BD.json new file mode 100644 index 000000000..7261c92dc --- /dev/null +++ b/front/src/locales/bn_BD.json @@ -0,0 +1,4616 @@ +{ + "App": { + "loading": "" + }, + "components": { + "About": { + "description": { + "findApp": "", + "funkwhale": "", + "publicContent": "", + "quota": "", + "signup": "" + }, + "header": { + "aboutPod": "", + "findApp": "", + "funkwhale": "", + "publicContent": "", + "signup": "" + }, + "help": { + "closedRegistrations": "" + }, + "link": { + "findOtherPod": "", + "learnMore": "" + }, + "message": { + "greeting": "", + "loggedIn": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "AboutPod": { + "feature": { + "allowList": "", + "anonymousAccess": "", + "federation": "", + "quota": "", + "registrations": "", + "status": { + "closed": "", + "disabled": "", + "enabled": "", + "open": "" + }, + "version": "" + }, + "header": { + "about": "", + "contact": "", + "features": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "link": { + "about": "", + "features": "", + "introduction": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "message": { + "contact": "" + }, + "notApplicable": "", + "placeholder": { + "noDescription": "", + "noRules": "", + "noTerms": "" + }, + "stat": { + "activeUsers": "", + "albumsCount": "", + "artistsCount": "", + "hoursOfMusic": "", + "listeningsCount": "", + "tracksCount": "" + }, + "title": "" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "", + "paragraph2": "" + }, + "quota": "", + "signup": "" + }, + "header": { + "about": "", + "aboutFunkwhale": "", + "contact": "", + "links": "", + "login": "", + "newAlbums": "", + "newChannels": "", + "signup": "", + "statistics": "", + "welcome": "" + }, + "help": { + "registrationsClosed": "" + }, + "link": { + "findOtherPod": "", + "funkwhale": "", + "learnMore": "", + "mobileApps": { + "description": "", + "label": "" + }, + "publicContent": { + "description": "", + "label": "" + }, + "rules": "", + "userGuides": { + "description": "", + "label": "" + }, + "viewMore": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "PageNotFound": { + "header": { + "pageNotFound": "" + }, + "link": { + "home": "" + }, + "message": { + "pageNotFound": "" + }, + "title": "" + }, + "Queue": { + "button": { + "clear": "", + "close": "", + "stopRadio": "" + }, + "header": { + "failure": "", + "noSources": "", + "radio": "" + }, + "label": { + "addArtistContentFilter": "", + "duration": "", + "enterFullscreen": "", + "exitFullscreen": "", + "favorite": "", + "next": "", + "pause": "", + "play": "", + "populatingRadio": "", + "previous": "", + "queue": "", + "remove": "", + "restart": "", + "selectTrack": "", + "showCoverArt": "", + "showVisualizer": "" + }, + "message": { + "automaticPlay": "", + "radio": "", + "webglUnsupported": "" + }, + "meta": { + "end": "", + "queuePosition": "", + "startTime": "", + "unknownAlbum": "", + "unknownArtist": "" + }, + "warning": { + "connectivity": "" + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "", + "rss": "", + "search": "" + }, + "description": { + "fediverse": "", + "rss": "" + }, + "error": { + "fetchFailed": "" + }, + "header": { + "fetchFailed": "" + }, + "label": { + "fediverse": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + }, + "rss": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + } + }, + "warning": { + "unsupported": "" + } + }, + "SetInstanceModal": { + "button": { + "cancel": "", + "submit": "" + }, + "header": { + "chooseInstance": "", + "failure": "", + "suggestions": "" + }, + "help": { + "notFunkwhaleServer": "", + "selectPod": "", + "serverDown": "" + }, + "label": { + "url": "" + }, + "message": { + "currentConnection": "", + "newUrl": "" + } + }, + "ShortcutsModal": { + "button": { + "close": "" + }, + "header": { + "modal": "" + }, + "shortcut": { + "audio": { + "clearQueue": "", + "decreaseVolume": "", + "expandQueue": "", + "increaseVolume": "", + "label": "", + "playNext": "", + "playPause": "", + "playPrevious": "", + "seekBack30": "", + "seekBack5": "", + "seekForward30": "", + "seekForward5": "", + "shuffleQueue": "", + "toggleFavorite": "", + "toggleLoop": "", + "toggleMute": "" + }, + "general": { + "focus": "", + "label": "", + "show": "", + "unfocus": "" + } + } + }, + "Sidebar": { + "header": { + "administration": "", + "explore": "", + "library": "", + "main": "", + "more": "" + }, + "label": { + "add": "", + "administration": "", + "edits": "", + "follows": "", + "language": "", + "main": "", + "play": "", + "reports": "", + "theme": "" + }, + "link": { + "about": "", + "albums": "", + "artists": "", + "browse": "", + "channels": "", + "createAccount": "", + "favorites": "", + "home": "", + "library": "", + "login": "", + "moderation": "", + "playlists": "", + "podcasts": "", + "radios": "", + "search": "", + "settings": "", + "switchInstance": "", + "users": "" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "" + }, + "header": { + "error": "", + "image": "" + }, + "message": { + "success": "" + } + }, + "SignupFormBuilder": { + "button": { + "add": "", + "edit": "", + "preview": "" + }, + "help": { + "additionalFields": "", + "helpText": "" + }, + "label": { + "additionalField": "", + "additionalFields": "", + "delete": "", + "helpText": "", + "moveDown": "", + "moveUp": "" + }, + "table": { + "additionalFields": { + "header": { + "actions": "", + "label": "", + "required": "", + "type": "" + }, + "required": { + "false": "", + "true": "" + }, + "type": { + "long": "", + "short": "" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "ChannelEntries": { + "help": { + "subscribe": "" + } + }, + "ChannelForm": { + "header": { + "error": "" + }, + "help": { + "discography": "", + "podcast": "", + "podcastFields": "", + "username": "" + }, + "label": { + "category": "", + "description": "", + "discography": "", + "email": "", + "image": "", + "language": "", + "name": "", + "owner": "", + "podcast": "", + "subcategory": "", + "tags": "", + "username": "" + }, + "legend": { + "purpose": "" + }, + "loader": { + "loading": "" + }, + "placeholder": { + "name": "", + "username": "" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "" + } + }, + "ChannelSeries": { + "button": { + "showMore": "" + }, + "help": { + "subscribe": "" + } + }, + "ChannelsWidget": { + "button": { + "showMore": "" + } + }, + "EmbedWizard": { + "button": { + "copy": "" + }, + "header": { + "preview": "" + }, + "help": { + "anonymous": "", + "embed": "", + "width": "" + }, + "label": { + "embed": "", + "height": "", + "width": "" + }, + "message": { + "copy": "" + }, + "warning": { + "anonymous": "" + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "", + "follow": "", + "unfollow": "" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "", + "addToQueue": "", + "discretePlay": "", + "episodeDetails": "", + "hideArtist": "", + "playAlbum": "", + "playArtist": "", + "playNext": "", + "playNow": "", + "playPlaylist": "", + "playTrack": "", + "playTracks": "", + "report": "", + "startRadio": "", + "trackDetails": "" + }, + "title": { + "more": "", + "unavailable": "" + } + }, + "Player": { + "header": { + "player": "" + }, + "label": { + "addArtistContentFilter": "", + "audioPlayer": "", + "clearQueue": "", + "expandQueue": "", + "loopingDisabled": "", + "loopingSingle": "", + "loopingWholeQueue": "", + "mute": "", + "nextTrack": "", + "pause": "", + "play": "", + "previousTrack": "", + "shuffleQueue": "", + "unmute": "" + }, + "meta": { + "position": "", + "unknownAlbum": "", + "unknownArtist": "" + } + }, + "PlayerControls": { + "labels": { + "next": "", + "pause": "", + "play": "", + "previous": "" + } + }, + "Search": { + "empty": { + "noAlbums": "", + "noArtists": "" + }, + "header": { + "albums": "", + "artists": "", + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "SearchBar": { + "empty": { + "noResults": "" + }, + "header": { + "noResults": "" + }, + "label": { + "album": "", + "artist": "", + "category": { + "federation": "", + "podcasts": "" + }, + "search": "", + "tag": "", + "track": "" + }, + "link": { + "fediverse": "", + "more": "", + "rss": "" + }, + "placeholder": { + "search": "" + } + }, + "VolumeControl": { + "button": { + "mute": "", + "unmute": "" + }, + "label": { + "slider": "" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "", + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + }, + "Table": { + "table": { + "header": { + "album": "", + "artist": "", + "title": "" + } + } + }, + "Widget": { + "button": { + "more": "" + }, + "empty": { + "noResults": "" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "" + }, + "header": { + "appDetails": "", + "appSecretWarning": "", + "editApp": "" + }, + "help": { + "appDetails": "" + }, + "label": { + "accessToken": "", + "appId": "", + "appSecret": "" + }, + "link": { + "settings": "" + }, + "message": { + "appSecretWarning": "" + }, + "title": "" + }, + "ApplicationForm": { + "button": { + "create": "", + "update": "" + }, + "header": { + "failure": "" + }, + "help": { + "redirectUri": "" + }, + "label": { + "name": "", + "redirectUri": "", + "scopes": { + "description": "", + "label": "", + "read": { + "description": "", + "label": "" + }, + "write": { + "description": "", + "label": "" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "" + }, + "title": "" + }, + "Authorize": { + "button": { + "authorize": "" + }, + "header": { + "access": "", + "allScopes": "", + "authorize": "", + "authorizeFailure": "", + "fetchFailure": "", + "readOnly": "", + "writeOnly": "" + }, + "help": { + "copyCode": "", + "pasteCode": "", + "redirect": "" + }, + "message": { + "unknownPermissions": "" + }, + "title": "" + }, + "LoginForm": { + "button": { + "login": "" + }, + "header": { + "loginFailure": "" + }, + "help": { + "approvalRequired": "", + "invalidCredentials": "" + }, + "label": { + "password": "", + "username": "" + }, + "link": { + "createAccount": "", + "resetPassword": "" + }, + "message": { + "redirect": "" + }, + "placeholder": { + "username": "" + } + }, + "Logout": { + "button": { + "logout": "" + }, + "header": { + "confirm": "", + "unauthenticated": "" + }, + "link": { + "login": "" + }, + "message": { + "loggedIn": "" + }, + "title": "" + }, + "Plugin": { + "button": { + "save": "", + "scan": "" + }, + "description": { + "library": "" + }, + "header": { + "failure": "" + }, + "label": { + "library": "", + "pluginEnabled": "" + }, + "link": { + "documentation": "" + } + }, + "Settings": { + "button": { + "delete": "", + "deleteAccount": "", + "deleteAccountConfirm": "", + "disableSubsonic": "", + "edit": "", + "password": "", + "refresh": "", + "remove": "", + "removeApp": "", + "revoke": "", + "revokeAccess": "", + "update": "", + "updateSettings": "" + }, + "description": { + "authorizedApps": "", + "changeEmail": "", + "changePassword": { + "paragraph1": "", + "paragraph2": "" + }, + "contentFilters": "", + "deleteAccount": "", + "plugins": "", + "yourApps": "" + }, + "header": { + "accountFailure": "", + "accountSettings": "", + "authorizedApps": "", + "avatar": "", + "avatarFailure": "", + "changeEmail": "", + "changePassword": "", + "contentFilters": "", + "deleteAccount": "", + "emailFailure": "", + "hiddenArtists": "", + "noApps": "", + "noPersonalApps": "", + "passwordFailure": "", + "plugins": "", + "settingsUpdated": "", + "updateFailure": "", + "yourApps": "" + }, + "help": { + "changePassword": "", + "noApps": "", + "noPersonalApps": "" + }, + "label": { + "avatar": "", + "currentPassword": "", + "newEmail": "", + "newPassword": "", + "password": "" + }, + "link": { + "managePlugins": "", + "newApp": "" + }, + "message": { + "confirmDelete": "", + "currentEmail": "" + }, + "modal": { + "changePassword": { + "content": { + "logout": "", + "subsonic": "", + "warning": "" + }, + "header": "" + }, + "deleteAccount": { + "content": { + "warning": "" + }, + "header": "" + }, + "deleteApp": { + "content": { + "warning": "" + }, + "header": "" + }, + "revokeApp": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "", + "name": "" + } + }, + "authorizedApps": { + "header": { + "application": "", + "permissions": "" + } + }, + "yourApps": { + "header": { + "application": "", + "creationDate": "", + "scopes": "" + } + } + }, + "title": "", + "warning": { + "deleteAccount": "" + } + }, + "SignupForm": { + "button": { + "create": "" + }, + "header": { + "login": "", + "signupFailure": "" + }, + "label": { + "email": "", + "invitation": "", + "password": "", + "username": "" + }, + "message": { + "accountCreated": "", + "awaitingReview": "", + "registrationClosed": "", + "requiresReview": "" + }, + "placeholder": { + "email": "", + "invitation": "", + "username": "" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "", + "confirmNewPassword": "", + "disable": "", + "newPassword": "" + }, + "description": { + "subsonic": { + "paragraph1": "", + "paragraph2": "", + "paragraph3": "" + } + }, + "header": { + "error": "", + "subsonic": "" + }, + "label": { + "subsonicField": "" + }, + "link": { + "apps": "" + }, + "message": { + "accessDisabled": "", + "passwordUpdated": "", + "unavailable": "" + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "" + }, + "header": "" + }, + "newPassword": { + "content": { + "warning": "" + }, + "header": "" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "" + }, + "label": { + "albumTitle": "" + } + }, + "AlbumModal": { + "button": { + "cancel": "", + "create": "" + }, + "header": { + "newAlbum": "", + "newSeries": "" + } + }, + "AlbumSelect": { + "label": { + "album": "", + "series": "" + }, + "meta": { + "tracks": "" + }, + "option": { + "none": "" + } + }, + "LicenseSelect": { + "label": { + "license": "" + }, + "link": { + "license": "" + }, + "option": { + "none": "" + } + }, + "SubscribeButton": { + "help": { + "auth": "" + }, + "title": { + "subscribe": "", + "unsubscribe": "" + } + }, + "UploadForm": { + "button": { + "edit": "", + "ignore": "", + "remove": "", + "resume": "", + "retry": "" + }, + "description": { + "extensions": "" + }, + "header": { + "error": "" + }, + "help": { + "license": "" + }, + "label": { + "channel": "", + "openBrowser": "" + }, + "message": { + "dragAndDrop": "", + "pending": "" + }, + "status": { + "errored": "", + "pending": "", + "uploading": "" + }, + "warning": { + "quota": "" + } + }, + "UploadMetadataForm": { + "label": { + "description": "", + "image": "", + "position": "", + "tags": "", + "title": "" + } + }, + "UploadModal": { + "button": { + "cancel": "", + "close": "", + "finishLater": "", + "next": "", + "previous": "", + "publish": "", + "update": "" + }, + "header": { + "processing": "", + "publish": "", + "uploadDetails": "", + "uploadFiles": "" + }, + "meta": { + "files": "", + "quota": "" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "", + "go": "", + "launch": "", + "refresh": "", + "select": "", + "selectAll": "", + "selectCurrentPage": "", + "selectElement": "", + "selected": "" + }, + "header": { + "error": "" + }, + "label": { + "actions": "", + "performAction": "" + }, + "message": { + "needsRefresh": "", + "success": "" + }, + "modal": { + "performAction": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "" + }, + "header": { + "failure": "" + }, + "help": { + "upload": "" + }, + "label": { + "upload": "" + }, + "loader": { + "uploading": "" + } + }, + "CollapseLink": { + "button": { + "collapse": "", + "expand": "" + } + }, + "ContentForm": { + "button": { + "preview": "", + "write": "" + }, + "empty": { + "noContent": "" + }, + "help": { + "markdown": "" + }, + "placeholder": { + "input": "" + } + }, + "CopyInput": { + "button": { + "copy": "" + }, + "message": { + "success": "" + } + }, + "DangerousButton": { + "button": { + "cancel": "", + "confirm": "" + }, + "header": { + "confirm": "" + } + }, + "Duration": { + "meta": { + "hours": "", + "minutes": "" + } + }, + "EmptyState": { + "button": { + "refresh": "" + }, + "header": { + "noResults": "" + } + }, + "ExpandableDiv": { + "button": { + "less": "", + "more": "" + } + }, + "InlineSearchBar": { + "button": { + "clear": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "LoginModal": { + "description": { + "noAccess": "" + }, + "header": { + "unauthenticated": "" + }, + "link": { + "login": "", + "signup": "" + } + }, + "RenderedDescription": { + "button": { + "cancel": "", + "edit": "", + "less": "", + "more": "", + "update": "" + }, + "empty": { + "noDescription": "" + }, + "header": { + "failure": "" + } + }, + "UserLink": { + "link": { + "username": "" + } + }, + "UserMenu": { + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + }, + "UserModal": { + "button": { + "switchInstance": "" + }, + "header": { + "options": "" + }, + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "" + }, + "header": { + "favorites": "" + }, + "link": { + "library": "" + }, + "loader": { + "loading": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "title": "" + }, + "TrackFavoriteIcon": { + "button": { + "add": "", + "remove": "" + }, + "label": { + "inFavorites": "" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "", + "reload": "" + }, + "description": { + "failure": "", + "pending": "", + "skipped": "", + "success": "" + }, + "header": { + "failure": "", + "pending": "", + "refresh": "", + "saveFailure": "", + "skipped": "", + "success": "" + }, + "loader": { + "awaitingResult": "", + "fetchRequest": "" + }, + "table": { + "error": { + "label": { + "detail": "", + "type": "" + }, + "value": { + "connectionError": "", + "httpError": "", + "httpStatus": "", + "invalidAttributesError": "", + "invalidJsonError": "", + "timeoutError": "", + "unknownError": "" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "" + }, + "empty": { + "noMatch": "" + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "" + }, + "message": { + "copy": "" + }, + "title": "" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "" + }, + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "AlbumDetail": { + "description": { + "libraries": "" + }, + "header": { + "episodes": "", + "libraries": "", + "tracks": "" + }, + "meta": { + "volume": "" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "", + "delete": "", + "edit": "", + "embed": "", + "more": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Albums": { + "button": { + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "link": { + "addMusic": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "ArtistBase": { + "button": { + "cancel": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "", + "wikipedia": "" + }, + "meta": { + "albums": "", + "tracks": "" + }, + "modal": { + "embed": { + "header": "" + } + }, + "title": "" + }, + "ArtistDetail": { + "button": { + "filter": "", + "more": "" + }, + "description": { + "library": "" + }, + "header": { + "album": "", + "library": "", + "track": "" + }, + "link": { + "filter": "" + }, + "message": { + "filter": "" + } + }, + "ArtistEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Artists": { + "button": { + "search": "", + "upload": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "excludeCompilation": "", + "search": "", + "tags": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "EditCard": { + "button": { + "approve": "", + "delete": "", + "reject": "" + }, + "header": { + "modification": "" + }, + "link": { + "track": "" + }, + "modal": { + "content": { + "warning": "" + }, + "delete": { + "header": "" + } + }, + "status": { + "applied": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "table": { + "update": { + "header": { + "field": "", + "newValue": "", + "oldValue": "" + }, + "notApplicable": "" + } + } + }, + "EditForm": { + "button": { + "cancel": "", + "clear": "", + "new": "", + "reset": "", + "showAll": "", + "showUnreviewed": "", + "submit": "", + "suggest": "" + }, + "empty": { + "suggestEdit": "" + }, + "header": { + "failure": "", + "recentEdits": "", + "success": "", + "unreviewed": "" + }, + "label": { + "summary": "" + }, + "message": { + "noPermission": "" + }, + "notApplicable": "", + "placeholder": { + "summary": "" + } + }, + "FileUpload": { + "button": { + "cancel": "", + "retry": "" + }, + "description": { + "import": "", + "previousImport": "" + }, + "empty": { + "noFiles": "" + }, + "header": { + "failure": "", + "local": "", + "server": "", + "status": "" + }, + "label": { + "extensions": "", + "remainingSpace": "", + "uploadWidget": "" + }, + "link": { + "picard": "", + "processing": "", + "uploading": "" + }, + "message": { + "listener": "", + "local": { + "copyright": "", + "format": "", + "message": "", + "tag": "" + } + }, + "table": { + "upload": { + "header": { + "actions": "", + "filename": "", + "size": "", + "status": "" + }, + "progress": "", + "status": { + "pending": "", + "uploaded": "", + "uploading": "" + } + } + }, + "tooltip": { + "denied": "", + "extension": "", + "network": "", + "retry": "", + "size": "", + "timeout": "" + } + }, + "FsBrowser": { + "button": { + "import": "" + } + }, + "FsLogs": { + "empty": { + "notStarted": "" + } + }, + "Home": { + "header": { + "newChannels": "", + "playlists": "", + "recentlyAdded": "", + "recentlyFavorited": "", + "recentlyListened": "" + }, + "title": "" + }, + "ImportStatusModal": { + "button": { + "close": "" + }, + "error": { + "importFailure": "", + "invalidMetadata": { + "label": "", + "message": "" + }, + "unknownError": { + "label": "", + "message": "" + } + }, + "header": { + "importDetail": "" + }, + "link": { + "documentation": "", + "support": "" + }, + "message": { + "importDetail": "", + "importSuccess": "" + }, + "table": { + "error": { + "debug": "", + "errorDetail": "", + "errorType": "", + "help": "" + } + }, + "warning": { + "importSkipped": "" + } + }, + "Podcasts": { + "button": { + "cancel": "", + "channel": "", + "feed": "", + "search": "", + "subscribe": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "Radios": { + "button": { + "add": "", + "create": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "instance": "", + "user": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "TagDetail": { + "header": { + "channels": "", + "tracks": "" + }, + "link": { + "albums": "", + "artists": "", + "moderation": "" + } + }, + "TagSelector": { + "placeholder": { + "search": "" + } + }, + "TrackBase": { + "button": { + "cancel": "", + "delete": "", + "download": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "wikipedia": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "subtitle": { + "with-uploader": "", + "without-uploader": "" + }, + "title": "" + }, + "TrackDetail": { + "description": { + "library": "" + }, + "header": { + "episode": "", + "library": "", + "playlists": "", + "release": "", + "track": "" + }, + "link": { + "musicbrainz": "" + }, + "notApplicable": "", + "table": { + "release": { + "album": "", + "artist": "", + "copyright": "", + "license": "", + "series": "", + "url": "", + "year": "" + }, + "track": { + "bitrate": { + "label": "", + "value": "" + }, + "codec": "", + "downloads": "", + "duration": "", + "size": "" + } + } + }, + "TrackEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "radios": { + "Builder": { + "button": { + "filter": "", + "save": "" + }, + "description": { + "builder": "" + }, + "header": { + "builder": "", + "created": "", + "matches": "", + "updated": "" + }, + "label": { + "description": "", + "filter": "", + "name": "", + "public": "" + }, + "option": { + "filter": "" + }, + "placeholder": { + "description": "", + "name": "" + }, + "table": { + "filter": { + "header": { + "actions": "", + "candidates": "", + "config": "", + "exclude": "", + "name": "" + } + } + }, + "title": "" + }, + "Filter": { + "cancelButton": "", + "excludeLabel": "", + "matchingTracks": "", + "matchingTracksModalHeader": "", + "removeButton": "" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "channel": { + "header": { + "account": "", + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "album": { + "header": { + "artist": "", + "creationDate": "", + "domain": "", + "name": "", + "releaseDate": "", + "tracks": "" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "artist": { + "header": { + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "", + "status": "" + }, + "option": { + "all": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "library": { + "header": { + "account": "", + "creationDate": "", + "domain": "", + "followers": "", + "name": "", + "uploads": "", + "visibility": "" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "tag": { + "header": { + "albums": "", + "artists": "", + "creationDate": "", + "name": "", + "tracks": "" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "track": { + "header": { + "album": "", + "artist": "", + "creationDate": "", + "domain": "", + "license": "", + "title": "" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "status": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "option": { + "all": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "upload": { + "header": { + "accessedDate": "", + "account": "", + "creationDate": "", + "domain": "", + "importStatus": "", + "library": "", + "name": "", + "size": "", + "visibility": "" + } + } + } + } + }, + "moderation": { + "AccountsTable": { + "action": { + "purge": { + "label": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "account": { + "header": { + "domain": "", + "firstSeen": "", + "lastSeen": "", + "moderationRule": "", + "name": "", + "uploads": "" + }, + "moderationRule": "" + } + } + }, + "DomainsTable": { + "action": { + "add": { + "label": "" + }, + "purge": { + "label": "" + }, + "remove": { + "label": "" + } + }, + "empty": { + "noPods": "" + }, + "label": { + "inList": "", + "search": "" + }, + "link": { + "list": "" + }, + "option": { + "all": "", + "no": "", + "yes": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "domain": { + "header": { + "firstSeen": "", + "moderationRule": "", + "name": "", + "receivedMessages": "", + "users": "" + }, + "moderationRule": "" + } + } + }, + "InstancePolicyCard": { + "button": { + "edit": "" + }, + "header": { + "rule": "" + }, + "label": { + "blockAll": "", + "muteActivity": "", + "muteNotifications": "", + "reason": "", + "rejectMedia": "" + }, + "status": { + "enabled": "", + "paused": "" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "", + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "header": { + "addRule": "", + "editRule": "", + "failure": "" + }, + "label": { + "blockAll": "", + "customizeRule": "", + "policyDisabled": "", + "policyEnabled": "", + "policyReason": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "blockAll": "", + "isActive": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "", + "summary": "" + } + }, + "InstancePolicyModal": { + "button": { + "close": "", + "show": "" + }, + "modal": { + "manage": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "NoteForm": { + "button": { + "add": "" + }, + "header": { + "failure": "" + }, + "placeholder": { + "summary": "" + } + }, + "NotesThread": { + "button": { + "delete": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "ReportCard": { + "button": { + "confirmDelete": "", + "delete": "", + "resolve": "", + "unresolve": "" + }, + "header": { + "actions": "", + "message": "", + "notes": "", + "reportedObject": "" + }, + "link": { + "moderation": "", + "publicPage": "", + "report": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "object": { + "account": "", + "domain": "", + "local": "", + "owner": "", + "type": "" + }, + "report": { + "category": "", + "creationDate": "", + "submittedBy": "" + }, + "status": { + "assignedTo": "", + "internalNotes": "", + "resolutionDate": "", + "resolved": "", + "status": "", + "unresolved": "" + } + }, + "warning": { + "objectDeleted": "" + } + }, + "UserRequestCard": { + "button": { + "approve": "", + "reject": "" + }, + "header": { + "actions": "", + "notes": "", + "signup": "" + }, + "link": { + "request": "" + }, + "message": { + "signup": "" + }, + "notApplicable": "", + "table": { + "request": { + "creationDate": "", + "submittedBy": "" + }, + "status": { + "approved": "", + "assignedTo": "", + "internalNotes": "", + "pending": "", + "refused": "", + "resolutionDate": "", + "status": "" + } + } + } + }, + "users": { + "InvitationForm": { + "button": { + "clear": "", + "new": "" + }, + "header": { + "failure": "" + }, + "label": { + "invite": "" + }, + "placeholder": { + "invitation": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "link": "" + } + } + } + }, + "InvitationsTable": { + "action": { + "delete": "" + }, + "label": { + "expired": "", + "search": "", + "status": "", + "unused": "", + "used": "" + }, + "option": { + "all": "", + "expired": "", + "open": "" + }, + "ordering": { + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "creationDate": "", + "expirationDate": "", + "owner": "", + "status": "", + "user": "" + } + } + } + }, + "UsersTable": { + "label": { + "search": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "permission": { + "library": "", + "moderation": "", + "settings": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "user": { + "accountStatus": { + "active": "", + "inactive": "" + }, + "header": { + "accountStatus": "", + "email": "", + "lastActivity": "", + "permissions": "", + "signup": "", + "status": "", + "username": "" + }, + "status": { + "admin": "", + "regular": "", + "staff": "" + } + } + } + } + } + }, + "moderation": { + "FilterModal": { + "button": { + "cancel": "", + "hide": "" + }, + "header": { + "failure": "", + "modal": "" + }, + "help": { + "createFilter": "" + }, + "message": { + "success": "" + }, + "warning": { + "createFilter": { + "listIntro": "", + "listItem1": "", + "listItem2": "", + "listItem3": "", + "listItem4": "" + } + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "" + }, + "option": { + "all": "" + } + }, + "ReportModal": { + "button": { + "cancel": "", + "submit": "" + }, + "description": { + "email": "", + "forwardToDomain": "", + "message": "", + "modal": "" + }, + "error": { + "nodeinfoFetch": "" + }, + "header": { + "disabled": "", + "modal": "", + "submissionFailure": "" + }, + "label": { + "email": "", + "forwardToDomain": "", + "message": "" + }, + "message": { + "submissionSuccess": "" + } + } + }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "", + "markRead": "", + "markUnread": "", + "reject": "" + }, + "message": { + "libraryAcceptFollow": "", + "libraryFollow": "", + "libraryPendingFollow": "", + "libraryReject": "" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Editor": { + "button": { + "addDuplicate": "", + "clear": "", + "copy": "", + "insertFromQueue": "" + }, + "error": { + "sync": "" + }, + "header": { + "editor": "" + }, + "help": { + "reorder": "" + }, + "loading": { + "sync": "" + }, + "message": { + "sync": "" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "warning": { + "duplicate": "" + } + }, + "Form": { + "button": { + "create": "", + "update": "" + }, + "header": { + "createFailure": "", + "createPlaylist": "", + "createSuccess": "", + "updateSuccess": "" + }, + "label": { + "name": "", + "visibility": "" + }, + "placeholder": { + "name": "" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "", + "addToPlaylist": "", + "addTrack": "", + "cancel": "", + "edit": "" + }, + "empty": { + "noPlaylists": "" + }, + "header": { + "addFailure": "", + "addToPlaylist": "", + "available": "", + "manage": "", + "noResults": "", + "track": "" + }, + "label": { + "filter": "" + }, + "placeholder": { + "filterPlaylist": "" + }, + "table": { + "edit": { + "header": { + "edit": "", + "lastModification": "", + "name": "", + "tracks": "" + } + } + }, + "warning": { + "duplicate": "" + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "" + } + }, + "Widget": { + "button": { + "create": "", + "more": "" + }, + "placeholder": { + "noPlaylists": "" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "", + "startPlaylistsRadio": "", + "startRadio": "", + "startTagsRadio": "", + "stopArtistsRadio": "", + "stopPlaylistsRadio": "", + "stopRadio": "", + "stopTagsRadio": "" + }, + "Card": { + "button": { + "edit": "" + } + } + }, + "tags": { + "List": { + "button": { + "more": "" + } + } + }, + "vui": { + "Pagination": { + "label": "", + "next": "", + "previous": "" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "", + "other": "", + "podcast": "" + }, + "label": "" + }, + "importStatus": { + "choices": { + "draft": { + "help": "", + "label": "" + }, + "errored": { + "help": "", + "label": "" + }, + "finished": { + "help": "", + "label": "" + }, + "pending": { + "help": "", + "label": "" + }, + "skipped": { + "help": "", + "label": "" + } + }, + "label": "" + }, + "privacyLevel": { + "choices": { + "instance": "", + "private": "", + "public": "" + }, + "help": "", + "label": "", + "shortChoices": { + "instance": "", + "private": "", + "public": "" + } + }, + "reportType": { + "choices": { + "illegalContent": "", + "invalidMetadata": "", + "offensiveContent": "", + "other": "", + "takedownRequest": "" + }, + "label": "" + }, + "summary": { + "label": "" + } + }, + "filters": { + "accessedDate": "", + "albumTitle": "", + "appliedDate": "", + "artistName": "", + "bitrate": "", + "creationDate": "", + "dateJoined": "", + "domain": "", + "duration": "", + "expirationDate": "", + "firstSeen": "", + "followers": "", + "handledDate": "", + "itemsCount": "", + "lastActivity": "", + "lastSeen": "", + "modificationDate": "", + "name": "", + "receivedMessages": "", + "releaseDate": "", + "size": "", + "trackTitle": "", + "uploads": "", + "username": "", + "users": "" + }, + "scopes": { + "edits": { + "description": "", + "label": "" + }, + "favorites": { + "description": "", + "label": "" + }, + "filters": { + "description": "", + "label": "" + }, + "follows": { + "description": "", + "label": "" + }, + "libraries": { + "description": "", + "label": "" + }, + "listenings": { + "description": "", + "label": "" + }, + "notifications": { + "description": "", + "label": "" + }, + "playlists": { + "description": "", + "label": "" + }, + "profile": { + "description": "", + "label": "" + }, + "radios": { + "description": "", + "label": "" + }, + "reports": { + "description": "", + "label": "" + }, + "security": { + "description": "", + "label": "" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "", + "title": "" + }, + "artist": { + "name": "" + }, + "cover": { + "label": "" + }, + "description": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "license": "", + "position": "", + "title": "" + } + }, + "useReport": { + "account": { + "label": "", + "typeLabel": "" + }, + "album": { + "label": "", + "typeLabel": "" + }, + "artist": { + "label": "", + "typeLabel": "", + "unknownLabel": "" + }, + "channel": { + "label": "", + "typeLabel": "" + }, + "library": { + "label": "", + "typeLabel": "" + }, + "playlist": { + "label": "", + "typeLabel": "" + }, + "track": { + "label": "", + "typeLabel": "" + } + }, + "useReportConfigs": { + "account": { + "label": "", + "summary": "" + }, + "album": { + "label": "", + "releaseDate": "", + "title": "" + }, + "artist": { + "label": "" + }, + "channel": { + "label": "" + }, + "creationDate": { + "label": "" + }, + "library": { + "description": "", + "label": "" + }, + "musicbrainzId": { + "label": "" + }, + "name": { + "label": "" + }, + "playlist": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "label": "", + "license": "", + "position": "", + "title": "" + }, + "visibility": { + "label": "" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "", + "errorReportTitle": "", + "leaveFeedback": "", + "unexpectedError": "" + }, + "useThemeList": { + "browserDefault": "", + "darkTheme": "", + "lightTheme": "" + } + }, + "init": { + "axios": { + "rateLimitDelay": "", + "rateLimitLater": "" + }, + "sentry": { + "allow": "", + "deny": "", + "funkwhaleInstance": "", + "message": "", + "title": "" + }, + "serviceWorker": { + "actions": { + "later": "", + "update": "" + }, + "newAppVersion": "" + } + }, + "views": { + "Notifications": { + "button": { + "read": "", + "submit": "" + }, + "empty": { + "notifications": "" + }, + "header": { + "funkwhaleSupport": "", + "instanceSupport": "", + "messages": "", + "notifications": "" + }, + "label": { + "reminder": "", + "showRead": "" + }, + "link": { + "donate": "", + "help": "" + }, + "loading": { + "notifications": "" + }, + "message": { + "funkwhaleSupport": "" + }, + "option": { + "delay": { + "30": "", + "60": "", + "90": "", + "never": "" + } + }, + "title": "" + }, + "Search": { + "button": { + "submit": "" + }, + "header": { + "remote": "", + "rss": "", + "search": "" + }, + "label": { + "albums": "", + "artists": "", + "playlists": "", + "podcasts": "", + "radios": "", + "series": "", + "tags": "", + "tracks": "" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "", + "openRemote": "", + "refresh": "" + }, + "header": { + "activity": "", + "audioContent": "", + "channelData": "" + }, + "label": { + "local": "" + }, + "link": { + "django": "", + "localProfile": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "edits": "", + "favorited": "", + "firstSeen": "", + "linkedReports": "", + "listenings": "", + "playlists": "" + }, + "audioContent": { + "albums": "", + "cachedSize": "", + "totalSize": "", + "tracks": "", + "uploads": "" + }, + "channelData": { + "account": "", + "category": "", + "description": "", + "domain": "", + "name": "", + "rss": "", + "url": "" + } + }, + "warning": { + "stats": "" + } + }, + "CommonList": { + "title": { + "accounts": "", + "albums": "", + "artists": "", + "channels": "", + "invitations": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "", + "users": "" + } + }, + "Settings": { + "header": { + "channels": "", + "federation": "", + "instanceInfo": "", + "moderation": "", + "music": "", + "playlists": "", + "sections": "", + "security": "", + "settings": "", + "signups": "", + "stats": "", + "subsonic": "", + "ui": "" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "albumData": "", + "audioContent": "", + "local": "" + }, + "link": { + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "album": { + "description": "", + "title": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "ArtistDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "artistData": "", + "audioContent": "", + "local": "" + }, + "link": { + "albums": "", + "category": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "artist": { + "description": "", + "name": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "albums": "", + "artists": "", + "channels": "", + "edits": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "EditsList": { + "header": { + "edits": "" + }, + "title": "" + }, + "LibraryDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "libraryData": "", + "local": "" + }, + "link": { + "account": "", + "albums": "", + "artists": "", + "django": "", + "domain": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "", + "followers": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "library": { + "description": "", + "name": "" + } + }, + "warning": { + "stats": "" + } + }, + "TagDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "tagData": "" + }, + "link": { + "albums": "", + "artists": "", + "django": "", + "localProfile": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "" + }, + "tag": { + "name": "" + } + } + }, + "TrackDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "local": "", + "trackData": "" + }, + "link": { + "album": "", + "albumArtist": "", + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "track": { + "copyright": "", + "description": "", + "discNumber": "", + "license": "", + "position": "", + "title": "" + }, + "trackData": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "UploadDetail": { + "button": { + "delete": "", + "download": "" + }, + "header": { + "activity": "", + "audioContent": "", + "local": "", + "uploadData": "" + }, + "link": { + "account": "", + "django": "", + "domain": "", + "importStatus": "", + "library": "", + "remoteProfile": "", + "type": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "activity": { + "accessedDate": "", + "firstSeen": "" + }, + "audioContent": { + "bitrate": { + "label": "", + "value": "" + }, + "cachedSize": "", + "duration": "", + "size": "", + "track": "" + }, + "upload": { + "name": "" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "" + }, + "description": { + "policy": "" + }, + "header": { + "accountData": "", + "activePolicy": "", + "activity": "", + "audioContent": "", + "localAccount": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "domain": "", + "libraries": "", + "linkedReports": "", + "openProfile": "", + "remoteProfile": "", + "requests": "", + "tracks": "", + "uploads": "" + }, + "notApplicable": "", + "option": { + "permission": { + "library": "", + "moderation": "", + "settings": "" + } + }, + "table": { + "accountData": { + "displayName": "", + "email": "", + "lastActivity": "", + "lastChecked": "", + "loginStatus": { + "disabled": "", + "enabled": "", + "label": "" + }, + "permissions": "", + "signupDate": "", + "userType": "", + "username": "" + }, + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "megabyte": "", + "totalSize": "", + "uploadQuota": "" + } + }, + "tooltip": { + "uploadQuota": "" + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "accounts": "", + "domains": "", + "reports": "", + "userRequests": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "DomainsDetail": { + "button": { + "addPolicy": "", + "addToAllowList": "", + "refreshNodeInfo": "", + "removeFromAllowList": "" + }, + "description": { + "policy": "" + }, + "header": { + "activePolicy": "", + "activity": "", + "audioContent": "", + "instanceData": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "knownAccounts": "", + "libraries": "", + "tracks": "", + "uploads": "", + "website": "" + }, + "notApplicable": "", + "table": { + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "instanceData": { + "domainName": "", + "inAllowList": { + "false": "", + "label": "", + "true": "" + }, + "lastChecked": "", + "nodeInfoStatus": { + "label": "", + "value": "" + }, + "software": { + "label": "", + "value": "" + }, + "totalUsers": "" + } + }, + "warning": { + "stats": "" + } + }, + "DomainsList": { + "button": { + "add": "" + }, + "header": { + "domains": "", + "failure": "" + }, + "label": { + "addDomain": "", + "addToAllowList": "" + }, + "title": "" + }, + "ReportsList": { + "header": { + "reports": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "resolved": "", + "unresolved": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "RequestsList": { + "header": { + "userRequests": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "approved": "", + "pending": "", + "refused": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "users": { + "Base": { + "link": { + "invitations": "", + "users": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "" + } + }, + "EmailConfirm": { + "header": { + "failure": "", + "success": "" + }, + "label": { + "confirmationCode": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "success": "" + }, + "title": "" + }, + "Login": { + "header": { + "login": "" + }, + "title": "" + }, + "PasswordReset": { + "button": { + "requestReset": "" + }, + "header": { + "failure": "", + "reset": "" + }, + "help": { + "form": "" + }, + "label": { + "email": "" + }, + "link": { + "back": "" + }, + "placeholder": { + "email": "" + }, + "title": "" + }, + "PasswordResetConfirm": { + "button": { + "update": "" + }, + "header": { + "failure": "", + "success": "" + }, + "label": { + "newPassword": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "requestSent": "", + "success": "" + }, + "title": "" + }, + "Plugins": { + "title": "" + }, + "ProfileActivity": { + "header": { + "playlists": "", + "recentlyFavorited": "", + "recentlyListened": "" + } + }, + "ProfileBase": { + "label": { + "self": "" + }, + "link": { + "activity": "", + "domainView": "", + "moderation": "", + "overview": "" + }, + "title": "" + }, + "ProfileOverview": { + "button": { + "cancel": "", + "createChannel": "", + "next": "", + "previous": "" + }, + "header": { + "channels": "", + "libraries": "", + "sharedLibraries": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "createChannel": { + "artist": { + "header": "" + }, + "header": "", + "podcast": { + "header": "" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "" + }, + "title": "" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "play": "", + "updateChannel": "", + "upload": "" + }, + "header": { + "artistChannel": "", + "podcastChannel": "" + }, + "link": { + "channelEpisodes": "", + "channelOverview": "", + "channelTracks": "", + "domainView": "", + "mirrored": "", + "moderation": "" + }, + "meta": { + "episodes": "", + "listenings": "", + "subscribers": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "" + }, + "header": "" + }, + "funkwhale": { + "header": "" + }, + "header": "", + "rss": { + "content": { + "help": "" + }, + "header": "" + } + } + }, + "title": "" + }, + "DetailOverview": { + "header": { + "albums": "", + "latestEpisodes": "", + "latestTracks": "", + "series": "", + "uploadsFailure": "", + "uploadsProcessing": "", + "uploadsSuccess": "" + }, + "link": { + "addAlbum": "", + "erroredUploads": "", + "skippedUploads": "" + }, + "message": { + "processing": "" + }, + "meta": { + "progress": "" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "", + "subscribe": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "content": { + "Base": { + "link": { + "libraries": "", + "tracks": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "Home": { + "button": { + "start": "" + }, + "description": { + "channel": { + "1": "", + "2": "" + }, + "follow": "", + "upload": "" + }, + "header": { + "channel": "", + "follow": "", + "upload": "" + }, + "help": { + "uploadQuota": "" + }, + "title": "" + }, + "libraries": { + "Card": { + "button": { + "upload": "" + }, + "label": { + "size": "" + }, + "link": { + "details": "" + }, + "meta": { + "tracks": "" + } + }, + "FilesTable": { + "action": { + "delete": "", + "restartImport": "" + }, + "button": { + "showStatus": "" + }, + "empty": { + "noTracks": "" + }, + "label": { + "importStatus": "", + "search": "" + }, + "notApplicable": "", + "option": { + "status": { + "all": "", + "draft": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "file": { + "header": { + "album": "", + "artist": "", + "duration": "", + "importStatus": "", + "size": "", + "title": "", + "uploadDate": "" + } + } + } + }, + "Form": { + "button": { + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "description": { + "library": "", + "visibility": "" + }, + "header": { + "failure": "" + }, + "label": { + "description": "", + "name": "", + "visibility": "" + }, + "message": { + "libraryCreated": "", + "libraryDeleted": "", + "libraryUpdated": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "placeholder": { + "description": "", + "name": "" + } + }, + "Home": { + "empty": { + "noLibrary": "" + }, + "header": { + "libraries": "" + }, + "link": { + "createLibrary": "" + }, + "loading": { + "libraries": "" + } + }, + "Quota": { + "button": { + "purge": "" + }, + "header": { + "currentUsage": "" + }, + "label": { + "currentUsage": "", + "errored": "", + "pending": "", + "percentUsed": "", + "skipped": "" + }, + "link": { + "viewFiles": "" + }, + "loading": { + "currentUsage": "" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "" + }, + "header": "" + }, + "purgePending": { + "content": { + "description": "" + }, + "header": "" + }, + "purgeSkipped": { + "content": { + "description": "" + }, + "header": "" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "", + "follow": "", + "pending": "", + "unfollow": "" + }, + "error": { + "follow": "", + "unfollow": "" + }, + "label": { + "scanFailure": "", + "scanPartialSuccess": "", + "scanPending": "", + "scanProgress": "", + "scanSuccess": "", + "sharingLink": "" + }, + "link": { + "scan": "", + "scanDetails": "" + }, + "message": { + "scanLaunched": "", + "scanSkipped": "" + }, + "meta": { + "failedTracks": "", + "lastUpdate": "", + "tracks": "" + }, + "modal": { + "unfollow": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "private": "", + "public": "" + } + }, + "Home": { + "button": { + "refresh": "" + }, + "description": { + "remoteLibraries": "" + }, + "header": { + "knownLibraries": "", + "remoteLibraries": "" + }, + "loading": { + "remoteLibraries": "" + } + }, + "ScanForm": { + "button": { + "submit": "" + }, + "header": { + "failure": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "url": "" + } + } + } + }, + "library": { + "DetailAlbums": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailOverview": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailTracks": { + "empty": { + "follow": "", + "upload": "" + } + }, + "Edit": { + "button": { + "accept": "", + "reject": "" + }, + "empty": { + "noFollowers": "" + }, + "header": { + "followers": "", + "libraryContents": "" + }, + "loading": { + "followers": "" + }, + "table": { + "action": { + "header": { + "action": "", + "date": "", + "status": "", + "user": "" + }, + "status": { + "accepted": "", + "pending": "", + "rejected": "" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "", + "upload": "" + }, + "description": { + "sharingLink": "" + }, + "label": { + "instance": "", + "private": "", + "public": "", + "sharingLink": "" + }, + "link": { + "albums": "", + "artists": "", + "domain": "", + "moderation": "", + "owner": "", + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "title": "", + "tooltip": { + "instance": "", + "private": "", + "public": "" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "playAll": "", + "stopEdit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "title": "" + }, + "List": { + "button": { + "create": "", + "manage": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "playlists": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "", + "delete": "", + "edit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "radio": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "title": "" + } + } + } +} From f99de1ef97c7bdeb6497557c7879714a24794167 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sat, 9 Dec 2023 12:26:35 +0000 Subject: [PATCH 191/371] Translated using Weblate (English) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/en/ --- front/src/locales/en_US.json | 4696 +++++++++++++++++----------------- 1 file changed, 2347 insertions(+), 2349 deletions(-) diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index 4165c63e3..7217f55c8 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -1,377 +1,377 @@ { "App": { - "loading": "Loading..." + "loading": "Loadingā€¦" }, "components": { "About": { - "title": "About", - "header": { - "funkwhale": "A social platform to enjoy and share music", - "signup": "Sign up", - "publicContent": "Browse public content", - "findApp": "Find an app", - "aboutPod": "About this pod" - }, "description": { + "findApp": "Use Funkwhale on other devices with our apps.", "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralized, open network.", - "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!", "publicContent": "Listen to public albums and playlists shared on this pod.", - "findApp": "Use Funkwhale on other devices with our apps." + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" }, - "placeholder": { - "noDescription": "No description available" + "header": { + "aboutPod": "About this pod", + "findApp": "Find an app", + "funkwhale": "A social platform to enjoy and share music", + "publicContent": "Browse public content", + "signup": "Sign up" + }, + "help": { + "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "learnMore": "Learn more" }, "message": { "greeting": "Hello {username}", "loggedIn": "You're already signed in!" }, - "link": { - "learnMore": "Learn more", - "findOtherPod": "Find another pod" + "placeholder": { + "noDescription": "No description available" }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "help": { - "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." - } + "title": "About" }, "AboutPod": { - "title": "About", - "notApplicable": "N/A", + "feature": { + "allowList": "Allow-list", + "anonymousAccess": "Anonymous access", + "federation": "Federation", + "quota": "Upload quota", + "registrations": "Registrations", + "status": { + "closed": "Closed", + "disabled": "Disabled", + "enabled": "Enabled", + "open": "Open" + }, + "version": "Funkwhale version" + }, "header": { "about": "About this pod", - "rules": "Rules", - "terms": "Terms and privacy policy", - "features": "Features", "contact": "Contact", - "statistics": "Statistics" + "features": "Features", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" }, + "link": { + "about": "About this pod", + "features": "Features", + "introduction": "Introduction", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" + }, + "message": { + "contact": "Send us an email: { contactEmail }" + }, + "notApplicable": "N/A", "placeholder": { "noDescription": "No description available", "noRules": "No rules available", "noTerms": "No terms available" }, - "message": { - "contact": "Send us an email: { contactEmail }" - }, - "link": { - "about": "About this pod", - "rules": "Rules", - "terms": "Terms and privacy policy", - "features": "Features", - "statistics": "Statistics", - "introduction": "Introduction" - }, - "feature": { - "version": "Funkwhale version", - "federation": "Federation", - "allowList": "Allow-list", - "anonymousAccess": "Anonymous access", - "registrations": "Registrations", - "quota": "Upload quota", - "status": { - "enabled": "Enabled", - "disabled": "Disabled", - "open": "Open", - "closed": "Closed" - } - }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", - "artistsCount": "0 artists | {n} artist | {n} artists", "albumsCount": "0 albums | {n} album | {n} albums", - "tracksCount": "0 tracks | {n} track | {n} tracks", - "listeningsCount": "0 listenings | {n} listening | {n} listenings" - } + "artistsCount": "0 artists | {n} artist | {n} artists", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", + "listeningsCount": "0 listenings | {n} listening | {n} listenings", + "tracksCount": "0 tracks | {n} track | {n} tracks" + }, + "title": "About" }, "Home": { - "title": "Home", - "header": { - "welcome": "Welcome to {podName}!", - "about": "About this Funkwhale pod", - "statistics": "Statistics", - "contact": "Contact", - "aboutFunkwhale": "About Funkwhale", - "login": "Log in", - "signup": "Sign up", - "links": "Useful links", - "newAlbums": "Recently added albums", - "newChannels": "New channels" - }, "description": { - "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!", "funkwhale": { "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network.", "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers." - } + }, + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" + }, + "header": { + "about": "About this Funkwhale pod", + "aboutFunkwhale": "About Funkwhale", + "contact": "Contact", + "links": "Useful links", + "login": "Log in", + "newAlbums": "Recently added albums", + "newChannels": "New channels", + "signup": "Sign up", + "statistics": "Statistics", + "welcome": "Welcome to {podName}!" + }, + "help": { + "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "funkwhale": "Visit funkwhale.audio", + "learnMore": "Learn more", + "mobileApps": { + "description": "Use Funkwhale on other devices with our apps", + "label": "Mobile apps" + }, + "publicContent": { + "description": "Listen to public albums and playlists shared on this pod.", + "label": "Browse public content" + }, + "rules": "Server rules", + "userGuides": { + "description": "Discover everything you need to know about Funkwhale and its features", + "label": "User guides" + }, + "viewMore": "View moreā€¦" }, "placeholder": { "noDescription": "No description available" }, - "link": { - "learnMore": "Learn more", - "rules": "Server rules", - "funkwhale": "Visit funkwhale.audio", - "findOtherPod": "Find another pod", - "viewMore": "View moreā€¦", - "publicContent": { - "label": "Browse public content", - "description": "Listen to public albums and playlists shared on this pod." - }, - "mobileApps": { - "label": "Mobile apps", - "description": "Use Funkwhale on other devices with our apps" - }, - "userGuides": { - "label": "User guides", - "description": "Discover everything you need to know about Funkwhale and its features" - } - }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "help": { - "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." - } + "title": "Home" }, "PageNotFound": { - "title": "Page not found", "header": { "pageNotFound": "Page not found!" }, + "link": { + "home": "Go to home page" + }, "message": { "pageNotFound": "Sorry, the page you asked for does not exist:" }, - "link": { - "home": "Go to home page" - } + "title": "Page not found" }, "Queue": { - "label": { - "queue": "Queue", - "populatingRadio": "Fetching radio track...", - "duration": "Duration", - "addArtistContentFilter": "Hide content from this artistā€¦", - "restart": "Restart track", - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play", - "remove": "Remove", - "selectTrack": "Select track", - "favorite": "Favorite track", - "enterFullscreen": "Enter fullscreen mode", - "exitFullscreen": "Exit fullscreen mode", - "showCoverArt": "Show Cover Art", - "showVisualizer": "Show MoonDrop visualizer" + "button": { + "clear": "Clear", + "close": "Close", + "stopRadio": "Stop radio" }, "header": { "failure": "The track cannot be loaded", - "radio": "You have a radio playing", - "noSources": "The track has no available sources." + "noSources": "The track has no available sources.", + "radio": "You have a radio playing" + }, + "label": { + "addArtistContentFilter": "Hide content from this artistā€¦", + "duration": "Duration", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "favorite": "Favorite track", + "next": "Next track", + "pause": "Pause", + "play": "Play", + "populatingRadio": "Fetching radio trackā€¦", + "previous": "Previous track", + "queue": "Queue", + "remove": "Remove", + "restart": "Restart track", + "selectTrack": "Select track", + "showCoverArt": "Show Cover Art", + "showVisualizer": "Show MoonDrop visualizer" }, "message": { "automaticPlay": "The next track will play automatically in a few secondsā€¦", "radio": "New tracks will be appended here automatically.", "webglUnsupported": "Your browser doesn't appear to support WebGL2." }, - "warning": { - "connectivity": "You may have a connectivity issue." - }, - "button": { - "close": "Close", - "clear": "Clear", - "stopRadio": "Stop radio" - }, "meta": { + "end": "End", "queuePosition": "Track {index} of {length}", "startTime": "00:00", - "unknownArtist": "Unknown Artist", "unknownAlbum": "Unknown Album", - "end": "End" + "unknownArtist": "Unknown Artist" + }, + "warning": { + "connectivity": "You may have a connectivity issue." } }, "RemoteSearchForm": { - "label": { - "rss": { - "title": "Subscribe to a podcast RSS feed", - "fieldLabel": "RSS feed location", - "fieldPlaceholder": "https://website.example.com/rss.xml" - }, - "fediverse": { - "title": "Fediverse object", - "fieldLabel": "Fediverse object", - "fieldPlaceholder": "{'@'}username{'@'}example.com" - } + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Search" + }, + "description": { + "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", + "rss": "Use this form to subscribe to an RSS feed from its URL." + }, + "error": { + "fetchFailed": "This object cannot be retrieved" }, "header": { "fetchFailed": "Error while fetching object" }, - "description": { - "rss": "Use this form to subscribe to an RSS feed from its URL.", - "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse." - }, - "button": { - "search": "Search", - "rss": "RSS", - "fediverse": "Fediverse" - }, - "error": { - "fetchFailed": "This object cannot be retrieved" + "label": { + "fediverse": { + "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}username{'@'}example.com", + "title": "Fediverse object" + }, + "rss": { + "fieldLabel": "RSS feed location", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Subscribe to a podcast RSS feed" + } }, "warning": { "unsupported": "This kind of object isn't supported yet" } }, "SetInstanceModal": { + "button": { + "cancel": "Cancel", + "submit": "Submit" + }, "header": { "chooseInstance": "Choose your instance", "failure": "It is not possible to connect to the given URL", "suggestions": "Suggested choices" }, - "message": { - "newUrl": "You are now using the Funkwhale instance at {url}", - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted." - }, "help": { - "serverDown": "The server might be down", "notFunkwhaleServer": "The given address is not a Funkwhale server", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." - }, - "button": { - "submit": "Submit", - "cancel": "Cancel" + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" }, "label": { "url": "Instance URL" + }, + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" } }, "ShortcutsModal": { - "header": { - "modal": "Keyboard shortcuts" - }, "button": { "close": "Close" }, + "header": { + "modal": "Keyboard shortcuts" + }, "shortcut": { + "audio": { + "clearQueue": "Clear queue", + "decreaseVolume": "Decrease volume", + "expandQueue": "Expand queue/player view", + "increaseVolume": "Increase volume", + "label": "Audio player shortcuts", + "playNext": "Play next track", + "playPause": "Pause/play the current track", + "playPrevious": "Play previous track", + "seekBack30": "Seek backwards 30s", + "seekBack5": "Seek backwards 5s", + "seekForward30": "Seek forwards 30s", + "seekForward5": "Seek forwards 5s", + "shuffleQueue": "Shuffle queue", + "toggleFavorite": "Toggle favorite", + "toggleLoop": "Toggle queue looping", + "toggleMute": "Toggle mute" + }, "general": { + "focus": "Focus searchbar", "label": "General shortcuts", "show": "Show available keyboard shortcuts", - "focus": "Focus searchbar", "unfocus": "Unfocus searchbar" - }, - "audio": { - "label": "Audio player shortcuts", - "playPause": "Pause/play the current track", - "seekBack5": "Seek backwards 5s", - "seekForward5": "Seek forwards 5s", - "seekBack30": "Seek backwards 30s", - "seekForward30": "Seek forwards 30s", - "playPrevious": "Play previous track", - "playNext": "Play next track", - "increaseVolume": "Increase volume", - "decreaseVolume": "Decrease volume", - "toggleMute": "Toggle mute", - "expandQueue": "Expand queue/player view", - "toggleLoop": "Toggle queue looping", - "shuffleQueue": "Shuffle queue", - "clearQueue": "Clear queue", - "toggleFavorite": "Toggle favorite" } } }, "Sidebar": { + "header": { + "administration": "Administration", + "explore": "Explore", + "library": "My library", + "main": "Main navigation", + "more": "More" + }, "label": { + "add": "Add content", + "administration": "Administration", + "edits": "Pending review edits", + "follows": "Pending follow requests", + "language": "Language", "main": "Main menu", "play": "Play this track", - "follows": "Pending follow requests", - "edits": "Pending review edits", "reports": "Pending review reports", - "language": "Language", - "theme": "Theme", - "add": "Add content", - "administration": "Administration" - }, - "header": { - "main": "Main navigation", - "explore": "Explore", - "more": "More", - "library": "My library", - "administration": "Administration" + "theme": "Theme" }, "link": { - "home": "Home", - "search": "Search", - "browse": "Browse", - "podcasts": "Podcasts", + "about": "About this pod", "albums": "Albums", "artists": "Artists", - "playlists": "Playlists", - "radios": "Radios", - "favorites": "Favorites", + "browse": "Browse", "channels": "Channels", - "about": "About this pod", - "switchInstance": "Switch instance", - "moderation": "Moderation", - "users": "Users", + "createAccount": "Create account", + "favorites": "Favorites", + "home": "Home", "library": "Library", - "settings": "Settings", "login": "Login", - "createAccount": "Create account" + "moderation": "Moderation", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "search": "Search", + "settings": "Settings", + "switchInstance": "Switch instance", + "users": "Users" } }, "admin": { "SettingsGroup": { + "button": { + "save": "Save" + }, "header": { "error": "Error while saving settings.", "image": "Current image" }, "message": { "success": "Settings updated successfully." - }, - "button": { - "save": "Save" } }, "SignupFormBuilder": { - "label": { - "delete": "Delete", - "moveUp": "Move up", - "moveDown": "Move down", - "additionalField": "Additional field", - "helpText": "Help text", - "additionalFields": "Additional fields" - }, "button": { + "add": "Add a new field", "edit": "Edit form", - "preview": "Preview Form", - "add": "Add a new field" + "preview": "Preview Form" }, "help": { - "helpText": "An optional text to be displayed at the start of the sign-up form.", - "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled." + "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", + "helpText": "An optional text to be displayed at the start of the sign-up form." + }, + "label": { + "additionalField": "Additional field", + "additionalFields": "Additional fields", + "delete": "Delete", + "helpText": "Help text", + "moveDown": "Move down", + "moveUp": "Move up" }, "table": { "additionalFields": { "header": { + "actions": "Actions", "label": "Field label", - "type": "Field type", "required": "Required", - "actions": "Actions" - }, - "type": { - "short": "Short text", - "long": "Long text" + "type": "Field type" }, "required": { - "true": "True", - "false": "False" + "false": "False", + "true": "True" + }, + "type": { + "long": "Long text", + "short": "Short text" } } } @@ -379,11 +379,11 @@ }, "audio": { "ChannelCard": { - "title": "Updated on {date}", "meta": { "episodes": "No episodes | {n} episode | {n} episodes", "tracks": "No tracks | {n} track | {n} tracks" - } + }, + "title": "Updated on {date}" }, "ChannelEntries": { "help": { @@ -391,38 +391,38 @@ } }, "ChannelForm": { - "label": { - "podcast": "Podcasts", - "discography": "Artist Discography", - "name": "Name", - "username": "Fediverse handle", - "image": "Channel Picture", - "tags": "Tags", - "language": "Language", - "description": "Description", - "category": "Category", - "subcategory": "Subcategory", - "email": "Owner e-mail address", - "owner": "Owner name" - }, - "help": { - "podcast": "Host your episodes and keep your community updated.", - "discography": "Publish music you make as a nice discography of albums and singles.", - "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later.", - "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes." - }, - "placeholder": { - "name": "Awesome channel name", - "username": "awesomechannelname" - }, "header": { "error": "Error while saving channel." }, + "help": { + "discography": "Publish music you make as a nice discography of albums and singles.", + "podcast": "Host your episodes and keep your community updated.", + "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", + "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." + }, + "label": { + "category": "Category", + "description": "Description", + "discography": "Artist Discography", + "email": "Owner e-mail address", + "image": "Channel Picture", + "language": "Language", + "name": "Name", + "owner": "Owner name", + "podcast": "Podcasts", + "subcategory": "Subcategory", + "tags": "Tags", + "username": "Fediverse handle" + }, "legend": { "purpose": "What will this channel be used for?" }, "loader": { "loading": "Loading" + }, + "placeholder": { + "name": "Awesome channel name", + "username": "awesomechannelname" } }, "ChannelSerieCard": { @@ -444,8 +444,11 @@ } }, "EmbedWizard": { - "warning": { - "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." + "button": { + "copy": "Copy" + }, + "header": { + "preview": "Preview" }, "help": { "anonymous": "Please contact your admins and ask them to update the corresponding setting.", @@ -453,44 +456,41 @@ "width": "Leave empty for a responsive widget" }, "label": { - "width": "Widget width", + "embed": "Embed code", "height": "Widget height", - "embed": "Embed code" - }, - "button": { - "copy": "Copy" - }, - "header": { - "preview": "Preview" + "width": "Widget width" }, "message": { "copy": "Text copied to clipboard!" + }, + "warning": { + "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." } }, "LibraryFollowButton": { "button": { - "unfollow": "Unfollow", "cancel": "Cancel follow request", - "follow": "Follow" + "follow": "Follow", + "unfollow": "Unfollow" } }, "PlayButton": { "button": { - "playNow": "Play now", - "addToQueue": "Add to current queue", - "playNext": "Play next", - "startRadio": "Play similar songs", - "report": "Reportā€¦", "addToPlaylist": "Add to playlist", + "addToQueue": "Add to current queue", + "discretePlay": "Play", + "episodeDetails": "Episode details", "hideArtist": "Hide content from this artist", - "playTrack": "Play track", "playAlbum": "Play album", "playArtist": "Play artist", + "playNext": "Play next", + "playNow": "Play now", "playPlaylist": "Play playlist", + "playTrack": "Play track", "playTracks": "Play tracks", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "discretePlay": "Play" + "report": "Reportā€¦", + "startRadio": "Play similar songs", + "trackDetails": "Track details" }, "title": { "more": "Moreā€¦", @@ -498,70 +498,78 @@ } }, "Player": { + "header": { + "player": "Audio player and controls" + }, "label": { + "addArtistContentFilter": "Hide content from this artistā€¦", "audioPlayer": "Media player", - "previousTrack": "Previous track", - "play": "Play", - "pause": "Pause", - "nextTrack": "Next track", - "unmute": "Unmute", - "mute": "Mute", + "clearQueue": "Clear your queue", "expandQueue": "Expand queue", "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", + "mute": "Mute", + "nextTrack": "Next track", + "pause": "Pause", + "play": "Play", + "previousTrack": "Previous track", "shuffleQueue": "Shuffle your queue", - "clearQueue": "Clear your queue", - "addArtistContentFilter": "Hide content from this artistā€¦" - }, - "header": { - "player": "Audio player and controls" + "unmute": "Unmute" }, "meta": { "position": "{index} of {length}", - "unknownArtist": "Unknown Artist", - "unknownAlbum": "Unknown Album" + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + } + }, + "PlayerControls": { + "labels": { + "next": "Next track", + "pause": "Pause", + "play": "Play", + "previous": "Previous track" } }, "Search": { - "header": { - "search": "Search for some music", - "artists": "Artists", - "albums": "Albums" - }, "empty": { - "noArtists": "No artist matched your query", - "noAlbums": "No album matched your query" + "noAlbums": "No album matched your query", + "noArtists": "No artist matched your query" + }, + "header": { + "albums": "Albums", + "artists": "Artists", + "search": "Search for some music" }, "placeholder": { "search": "Artist, album, trackā€¦" } }, "SearchBar": { - "placeholder": { - "search": "Search for artists, albums, tracksā€¦" - }, - "label": { - "search": "Search for content", - "artist": "Artist", - "album": "Album", - "track": "Track", - "tag": "Tag", - "category": { - "federation": "Federation", - "podcasts": "Podcasts" - } - }, - "link": { - "rss": "Subscribe to podcast via RSS", - "fediverse": "Search on the fediverse", - "more": "More results šŸ”’" + "empty": { + "noResults": "Sorry, there are no results for this search" }, "header": { "noResults": "No matches found" }, - "empty": { - "noResults": "Sorry, there are no results for this search" + "label": { + "album": "Album", + "artist": "Artist", + "category": { + "federation": "Federation", + "podcasts": "Podcasts" + }, + "search": "Search for content", + "tag": "Tag", + "track": "Track" + }, + "link": { + "fediverse": "Search on the fediverse", + "more": "More results šŸ”’", + "rss": "Subscribe to podcast via RSS" + }, + "placeholder": { + "search": "Search for artists, albums, tracksā€¦" } }, "VolumeControl": { @@ -588,8 +596,8 @@ "artist": { "Card": { "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "episodes": "No episodes | {n} episode | {n} episodes" + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" } }, "Widget": { @@ -607,18 +615,18 @@ "Modal": { "button": { "addToFavorites": "Add to favorites", - "removeFromFavorites": "Remove from favorites", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "seriesDetails": "View series", - "albumDetails": "View album", - "channelDetails": "View channel", - "artistDetails": "View artist", - "startRadio": "Play radio", - "playNow": "Play now", + "addToPlaylist": "Add to playlist", "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", "playNext": "Play next", - "addToPlaylist": "Add to playlist" + "playNow": "Play now", + "removeFromFavorites": "Remove from favorites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" } } }, @@ -631,26 +639,26 @@ "Modal": { "button": { "addToFavorites": "Add to favorites", - "removeFromFavorites": "Remove from favorites", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "seriesDetails": "View series", - "albumDetails": "View album", - "channelDetails": "View channel", - "artistDetails": "View artist", - "startRadio": "Play radio", - "playNow": "Play now", + "addToPlaylist": "Add to playlist", "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", "playNext": "Play next", - "addToPlaylist": "Add to playlist" + "playNow": "Play now", + "removeFromFavorites": "Remove from favorites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" } }, "Table": { "table": { "header": { - "title": "Title", "album": "Album", - "artist": "Artist" + "artist": "Artist", + "title": "Title" } } }, @@ -662,102 +670,94 @@ "noResults": "Nothing found" } } - }, - "PlayerControls": { - "labels": { - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play" - } } }, "auth": { "ApplicationEdit": { - "title": "Edit application", - "link": { - "settings": "Back to settings" + "button": { + "regenerateToken": "Regenerate token" }, "header": { "appDetails": "Application Details", - "editApp": "Edit application", - "appSecretWarning": "Keep a copy of this token in a safe place." - }, - "message": { - "appSecretWarning": "You won't be able to see it again once you leave this screen." + "appSecretWarning": "Keep a copy of this token in a safe place.", + "editApp": "Edit application" }, "help": { "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." }, "label": { + "accessToken": "Access token", "appId": "Application ID", - "appSecret": "Application secret", - "accessToken": "Access token" + "appSecret": "Application secret" }, - "button": { - "regenerateToken": "Regenerate token" - } + "link": { + "settings": "Back to settings" + }, + "message": { + "appSecretWarning": "You won't be able to see it again once you leave this screen." + }, + "title": "Edit application" }, "ApplicationForm": { + "button": { + "create": "Create application", + "update": "Update application" + }, "header": { "failure": "We cannot save your changes" }, + "help": { + "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + }, "label": { "name": "Name", "redirectUri": "Redirect URI", "scopes": { - "label": "Scopes", "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", + "label": "Scopes", "read": { - "label": "Read", - "description": "Read-only access to user data" + "description": "Read-only access to user data", + "label": "Read" }, "write": { - "label": "Write", - "description": "Write-only access to user data" + "description": "Write-only access to user data", + "label": "Write" } } - }, - "button": { - "update": "Update application", - "create": "Create application" - }, - "help": { - "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." } }, "ApplicationNew": { - "title": "Create a new application", "link": { "settings": "Back to settings" - } + }, + "title": "Create a new application" }, "Authorize": { - "title": "Allow application", + "button": { + "authorize": "Authorize {app}" + }, "header": { + "access": "{app_name} wants to access your Funkwhale account", + "allScopes": "Full access", "authorize": "Authorize third-party app", "authorizeFailure": "Error while fetching application data", "fetchFailure": "Error while fetching application data", - "access": "{app_name} wants to access your Funkwhale account", - "writeOnly": "Write-only", "readOnly": "Read-only", - "allScopes": "Full access" + "writeOnly": "Write-only" + }, + "help": { + "copyCode": "You will be shown a code to copy-past in the application", + "pasteCode": "Copy-paste the following code in the application:", + "redirect": "You will be redirected to { 0 }" }, "message": { "unknownPermissions": "The application is also requesting the following unknown permissions:" }, - "button": { - "authorize": "Authorize {app}" - }, - "help": { - "copyCode": "You will be shown a code to copy-past in the application", - "redirect": "You will be redirected to { 0 }", - "pasteCode": "Copy-paste the following code in the application:" - } + "title": "Allow application" }, "LoginForm": { - "placeholder": { - "username": "Enter your username or e-mail address" + "button": { + "login": "Login" }, "header": { "loginFailure": "We cannot log you in" @@ -767,160 +767,156 @@ "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." }, "label": { - "username": "Username or e-mail address", - "password": "Password" - }, - "button": { - "login": "Login" + "password": "Password", + "username": "Username or e-mail address" }, "link": { - "resetPassword": "Reset your password", - "createAccount": "Create an account" + "createAccount": "Create an account", + "resetPassword": "Reset your password" }, "message": { "redirect": "You will be redirected to {domain} to authenticate" + }, + "placeholder": { + "username": "Enter your username or e-mail address" } }, "Logout": { - "title": "Log out", + "button": { + "logout": "Yes, log me out!" + }, "header": { "confirm": "Are you sure you want to log out?", "unauthenticated": "You aren't currently logged in" }, - "button": { - "logout": "Yes, log me out!" - }, "link": { "login": "Log in!" }, "message": { "loggedIn": "You are currently logged in as {username}" - } + }, + "title": "Log out" }, "Plugin": { - "header": { - "failure": "Error while saving plugin" - }, - "link": { - "documentation": "Documentation" - }, "button": { "save": "Save", "scan": "Scan" }, + "description": { + "library": "Library where files should be imported." + }, + "header": { + "failure": "Error while saving plugin" + }, "label": { "library": "Library", "pluginEnabled": "Enabled" }, - "description": { - "library": "Library where files should be imported." + "link": { + "documentation": "Documentation" } }, "Settings": { - "title": "Account Settings", - "message": { - "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", - "currentEmail": "Your current e-mail address is {email}" - }, - "header": { - "accountSettings": "Account settings", - "settingsUpdated": "Settings updated", - "updateFailure": "Your settings can't be updated", - "avatar": "Avatar", - "avatarFailure": "Your avatar cannot be saved", - "changePassword": "Change my password", - "passwordFailure": "Your password cannot be changed", - "contentFilters": "Content filters", - "hiddenArtists": "Hidden artists", - "authorizedApps": "Authorized apps", - "noApps": "You don't have any application connected with your account.", - "yourApps": "Your applications", - "noPersonalApps": "You don't have registered any application yet.", - "plugins": "Plugins", - "changeEmail": "Change my e-mail address", - "emailFailure": "We cannot change your e-mail address", - "deleteAccount": "Delete my account", - "accountFailure": "We cannot delete your account" + "button": { + "delete": "Delete", + "deleteAccount": "Delete my accountā€¦", + "deleteAccountConfirm": "Delete my account", + "disableSubsonic": "Disable access", + "edit": "Edit", + "password": "Change password", + "refresh": "Refresh", + "remove": "Remove", + "removeApp": "Remove application", + "revoke": "Revoke", + "revokeAccess": "Revoke access", + "update": "Update", + "updateSettings": "Update settings" }, "description": { + "authorizedApps": "This is the list of applications that have access to your account data.", + "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", "changePassword": { "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", "paragraph2": "You will have to update your password on your clients that use this password." }, "contentFilters": "Content filters help you hide content you don't want to see on the service.", - "authorizedApps": "This is the list of applications that have access to your account data.", - "yourApps": "This is the list of applications that you have registered.", + "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.", "plugins": "Use plugins to extend Funkwhale and get additional features.", - "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", - "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." + "yourApps": "This is the list of applications that you have registered." }, - "button": { - "update": "Update", - "updateSettings": "Update settings", - "password": "Change password", - "disableSubsonic": "Disable access", - "refresh": "Refresh", - "delete": "Delete", - "revoke": "Revoke", - "revokeAccess": "Revoke access", - "edit": "Edit", - "remove": "Remove", - "removeApp": "Remove application", - "deleteAccount": "Delete my accountā€¦", - "deleteAccountConfirm": "Delete my account" + "header": { + "accountFailure": "We cannot delete your account", + "accountSettings": "Account settings", + "authorizedApps": "Authorized apps", + "avatar": "Avatar", + "avatarFailure": "Your avatar cannot be saved", + "changeEmail": "Change my e-mail address", + "changePassword": "Change my password", + "contentFilters": "Content filters", + "deleteAccount": "Delete my account", + "emailFailure": "We cannot change your e-mail address", + "hiddenArtists": "Hidden artists", + "noApps": "You don't have any application connected with your account.", + "noPersonalApps": "You don't have registered any application yet.", + "passwordFailure": "Your password cannot be changed", + "plugins": "Plugins", + "settingsUpdated": "Settings updated", + "updateFailure": "Your settings can't be updated", + "yourApps": "Your applications" }, "help": { "changePassword": "Please double-check your password is correct", "noApps": "If you authorize third-party applications to access your data, those applications will be listed here.", "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." }, - "warning": { - "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." - }, - "link": { - "newApp": "Register a new application", - "managePlugins": "Manage plugins" - }, "label": { "avatar": "Avatar", - "password": "Password", "currentPassword": "Current password", + "newEmail": "New e-mail address", "newPassword": "New password", - "newEmail": "New e-mail address" + "password": "Password" + }, + "link": { + "managePlugins": "Manage plugins", + "newApp": "Register a new application" + }, + "message": { + "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", + "currentEmail": "Your current e-mail address is {email}" }, "modal": { "changePassword": { - "header": "Change your password?", "content": { - "warning": "Changing your password will have the following consequences", "logout": "You will be logged out from this session and have to log in with the new one", - "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" - } - }, - "revokeApp": { - "header": "Revoke access for application {app}?", - "content": { - "warning": "This will prevent this application from accessing the service on your behalf." - } - }, - "deleteApp": { - "header": "Remove application {app}?", - "content": { - "warning": "This will permanently remove the application and all the associated tokens." - } + "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password", + "warning": "Changing your password will have the following consequences" + }, + "header": "Change your password?" }, "deleteAccount": { - "header": "Do you want to delete your account?", "content": { "warning": "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." - } + }, + "header": "Do you want to delete your account?" + }, + "deleteApp": { + "content": { + "warning": "This will permanently remove the application and all the associated tokens." + }, + "header": "Remove application {app}?" + }, + "revokeApp": { + "content": { + "warning": "This will prevent this application from accessing the service on your behalf." + }, + "header": "Revoke access for application {app}?" } }, "table": { "artists": { "header": { - "name": "Name", - "creationDate": "Creation date" + "creationDate": "Creation date", + "name": "Name" } }, "authorizedApps": { @@ -932,50 +928,48 @@ "yourApps": { "header": { "application": "Application", - "scopes": "Scopes", - "creationDate": "Creation date" + "creationDate": "Creation date", + "scopes": "Scopes" } } + }, + "title": "Account Settings", + "warning": { + "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." } }, "SignupForm": { - "placeholder": { - "invitation": "Enter your invitation code (case insensitive)", - "username": "Enter your username", - "email": "Enter your e-mail address" - }, - "message": { - "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", - "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", - "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", - "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + "button": { + "create": "Create my account" }, "header": { "login": "Log in to your Funkwhale account", "signupFailure": "Your account cannot be created." }, "label": { - "username": "Username", "email": "E-mail address", + "invitation": "Invitation code", "password": "Password", - "invitation": "Invitation code" + "username": "Username" }, - "button": { - "create": "Create my account" + "message": { + "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", + "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", + "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", + "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + }, + "placeholder": { + "email": "Enter your e-mail address", + "invitation": "Enter your invitation code (case insensitive)", + "username": "Enter your username" } }, "SubsonicTokenForm": { - "label": { - "subsonicField": "Your subsonic API password" - }, - "message": { - "passwordUpdated": "Password updated", - "accessDisabled": "Access disabled", - "unavailable": "The Subsonic API is not available on this Funkwhale instance." - }, - "header": { - "subsonic": "Subsonic API password", - "error": "Error" + "button": { + "confirmDisable": "Disable access", + "confirmNewPassword": "Request a password", + "disable": "Disable Subsonic access", + "newPassword": "Request a new password" }, "description": { "subsonic": { @@ -984,27 +978,33 @@ "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below." } }, + "header": { + "error": "Error", + "subsonic": "Subsonic API password" + }, + "label": { + "subsonicField": "Your subsonic API password" + }, "link": { "apps": "Discover how to use Funkwhale from other apps" }, - "button": { - "newPassword": "Request a new password", - "confirmNewPassword": "Request a password", - "disable": "Disable Subsonic access", - "confirmDisable": "Disable access" + "message": { + "accessDisabled": "Access disabled", + "passwordUpdated": "Password updated", + "unavailable": "The Subsonic API is not available on this Funkwhale instance." }, "modal": { - "newPassword": { - "header": "Request a new Subsonic API password?", - "content": { - "warning": "This will log you out from existing devices that use the current password." - } - }, "disableSubsonic": { - "header": "Disable Subsonic API access?", "content": { "warning": "This will completely disable access to the Subsonic API using from account." - } + }, + "header": "Disable Subsonic API access?" + }, + "newPassword": { + "content": { + "warning": "This will log you out from existing devices that use the current password." + }, + "header": "Request a new Subsonic API password?" } } } @@ -1019,157 +1019,157 @@ } }, "AlbumModal": { - "header": { - "newSeries": "New series", - "newAlbum": "New album" - }, "button": { "cancel": "Cancel", "create": "Create" + }, + "header": { + "newAlbum": "New album", + "newSeries": "New series" } }, "AlbumSelect": { "label": { - "series": "Series", - "album": "Album" - }, - "option": { - "none": "None" + "album": "Album", + "series": "Series" }, "meta": { "tracks": "No tracks | {n} track | {n} tracks" + }, + "option": { + "none": "None" } }, "LicenseSelect": { "label": { "license": "Licence" }, - "option": { - "none": "None" - }, "link": { "license": "About this license" + }, + "option": { + "none": "None" } }, "SubscribeButton": { - "title": { - "unsubscribe": "Unsubscribe", - "subscribe": "Subscribe" - }, "help": { "auth": "You need to be logged in to subscribe to this channel" + }, + "title": { + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe" } }, "UploadForm": { + "button": { + "edit": "Edit", + "ignore": "Ignore", + "remove": "Remove", + "resume": "Resume", + "retry": "Retry" + }, + "description": { + "extensions": "Supported extensions {extensions}" + }, "header": { "error": "Error while publishing" }, + "help": { + "license": "Add a license to your upload to ensure some freedoms to your public." + }, "label": { "channel": "Channel", "openBrowser": "Browseā€¦" }, "message": { - "pending": "You have some draft uploads pending publication.", - "dragAndDrop": "Drag and drop your files here or open the browser to upload your files" + "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", + "pending": "You have some draft uploads pending publication." }, - "button": { - "edit": "Edit", - "ignore": "Ignore", - "resume": "Resume", - "remove": "Remove", - "retry": "Retry" - }, - "help": { - "license": "Add a license to your upload to ensure some freedoms to your public." + "status": { + "errored": "Errored", + "pending": "Pending", + "uploading": "Uploading" }, "warning": { "quota": "You don't have any space left to upload your files. Please contact the moderators." - }, - "status": { - "uploading": "Uploading", - "errored": "Errored", - "pending": "Pending" - }, - "description": { - "extensions": "Supported extensions {extensions}" } }, "UploadMetadataForm": { "label": { - "title": "Title", - "tags": "Tags", - "image": "Track Picture", "description": "Description", - "position": "Position" + "image": "Track Picture", + "position": "Position", + "tags": "Tags", + "title": "Title" } }, "UploadModal": { + "button": { + "cancel": "Cancel", + "close": "Close", + "finishLater": "Finish later", + "next": "Next", + "previous": "Previous step", + "publish": "Publish", + "update": "Update" + }, + "header": { + "processing": "Processing uploads", + "publish": "Publish audio", + "uploadDetails": "Upload details", + "uploadFiles": "Files to upload" + }, "meta": { "files": "no files | {n} file | {n} files", "quota": "Remaining storage space: {space}" - }, - "header": { - "publish": "Publish audio", - "uploadFiles": "Files to upload", - "uploadDetails": "Upload details", - "processing": "Processing uploads" - }, - "button": { - "cancel": "Cancel", - "previous": "Previous step", - "update": "Update", - "next": "Next", - "publish": "Publish", - "finishLater": "Finish later", - "close": "Close" } } }, "common": { "ActionTable": { - "header": { - "error": "Error while applying action" - }, - "message": { - "needsRefresh": "Content has been updated, click refresh to see up-to-date content", - "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" - }, "button": { - "refresh": "Refresh table content", + "allSelected": "No elements selected | {n} element selected | All {n} elements selected", "go": "Go", "launch": "Launch", + "refresh": "Refresh table content", "select": "Select", - "selected": "{ n } on {total} selected", "selectAll": "Select all items", - "allSelected": "No elements selected | {n} element selected | All {n} elements selected", + "selectCurrentPage": "Select only current page", "selectElement": "Select one element | Select all {n} elements", - "selectCurrentPage": "Select only current page" + "selected": "{ n } on {total} selected" + }, + "header": { + "error": "Error while applying action" }, "label": { "actions": "Actions", "performAction": "Perform actions" }, + "message": { + "needsRefresh": "Content has been updated, click refresh to see up-to-date content", + "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" + }, "modal": { "performAction": { - "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?", "content": { "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." - } + }, + "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?" } } }, "AttachmentInput": { + "button": { + "remove": "Remove" + }, "header": { "failure": "Your attachment cannot be saved" }, - "label": { - "upload": "Upload New Pictureā€¦" - }, "help": { "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." }, - "button": { - "remove": "Remove" + "label": { + "upload": "Upload New Pictureā€¦" }, "loader": { "uploading": "Uploading fileā€¦" @@ -1177,23 +1177,23 @@ }, "CollapseLink": { "button": { - "expand": "Expand", - "collapse": "Collapse" + "collapse": "Collapse", + "expand": "Expand" } }, "ContentForm": { - "placeholder": { - "input": "Write a few words hereā€¦" - }, "button": { - "write": "Write", - "preview": "Preview" + "preview": "Preview", + "write": "Write" }, "empty": { "noContent": "Nothing to preview" }, "help": { "markdown": "Markdown syntax is supported" + }, + "placeholder": { + "input": "Write a few words hereā€¦" } }, "CopyInput": { @@ -1205,12 +1205,12 @@ } }, "DangerousButton": { - "header": { - "confirm": "Do you want to confirm this action?" - }, "button": { "cancel": "Cancel", "confirm": "Confirm" + }, + "header": { + "confirm": "Do you want to confirm this action?" } }, "Duration": { @@ -1234,41 +1234,41 @@ } }, "InlineSearchBar": { - "placeholder": { - "search": "Searchā€¦" + "button": { + "clear": "Clear" }, "label": { "search": "Search" }, - "button": { - "clear": "Clear" + "placeholder": { + "search": "Searchā€¦" } }, "LoginModal": { + "description": { + "noAccess": "You don't have access" + }, "header": { "unauthenticated": "Unauthenticated" }, "link": { "login": "Log in", "signup": "Sign up" - }, - "description": { - "noAccess": "You don't have access" } }, "RenderedDescription": { "button": { - "more": "Show more", - "less": "Show less", - "edit": "Edit", "cancel": "Cancel", + "edit": "Edit", + "less": "Show less", + "more": "Show more", "update": "Update description" }, - "header": { - "failure": "Error while updating description" - }, "empty": { "noDescription": "No description available" + }, + "header": { + "failure": "Error while updating description" } }, "UserLink": { @@ -1279,83 +1279,83 @@ "UserMenu": { "label": { "language": "Change language", - "theme": "Change theme", - "shortcuts": "Keyboard shortcuts" + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" }, "link": { - "profile": "Profile", - "settings": "Settings", - "logout": "Log out", "about": "About", - "support": "Help", - "forum": "Forum", - "docs": "Documentation", "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", "git": "Issue tracker", "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", "signup": "Sign up", - "notifications": "Notifications" + "support": "Help" } }, "UserModal": { - "header": { - "options": "Options" - }, "button": { "switchInstance": "Use another instance" }, + "header": { + "options": "Options" + }, "label": { "language": "Change language", - "theme": "Change theme", - "shortcuts": "Keyboard shortcuts" + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" }, "link": { - "profile": "Profile", - "settings": "Settings", - "logout": "Log out", "about": "About", - "support": "Help", - "forum": "Forum", - "docs": "Documentation", "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", "git": "Issue tracker", "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", "signup": "Sign up", - "notifications": "Notifications" + "support": "Help" } } }, "favorites": { "List": { - "title": "Your favorites", - "header": { - "favorites": "No favorites | {n} favorite | {n} favorites" - }, "empty": { "noFavorites": "No tracks have been added to your favorites yet" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Order", - "ascending": "Ascending", - "descending": "Descending" - } - }, - "pagination": { - "results": "Results per page" + "header": { + "favorites": "No favorites | {n} favorite | {n} favorites" }, "link": { "library": "Browse the library" }, "loader": { "loading": "Loading your favoritesā€¦" - } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "title": "Your favorites" }, "TrackFavoriteIcon": { "button": { - "remove": "Remove from favorites", - "add": "Add to favorites" + "add": "Add to favorites", + "remove": "Remove from favorites" }, "label": { "inFavorites": "In favorites" @@ -1364,41 +1364,41 @@ }, "federation": { "FetchButton": { - "header": { - "refresh": "Refreshing object from remote serverā€¦", - "skipped": "Refresh was skipped", - "success": "Refresh successful", - "failure": "Refresh error", - "pending": "Refresh pending", - "saveFailure": "Error while saving settings" - }, - "description": { - "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", - "success": "Data was refreshed successfully from remote server.", - "failure": "An error occurred while trying to refresh data:", - "pending": "The refresh request hasn't been processed in time by our server. It will be processed later." - }, "button": { "close": "Close", "reload": "Close and reload page" }, + "description": { + "failure": "An error occurred while trying to refresh data:", + "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", + "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", + "success": "Data was refreshed successfully from remote server." + }, + "header": { + "failure": "Refresh error", + "pending": "Refresh pending", + "refresh": "Refreshing object from remote serverā€¦", + "saveFailure": "Error while saving settings", + "skipped": "Refresh was skipped", + "success": "Refresh successful" + }, "loader": { - "fetchRequest": "Requesting a fetchā€¦", - "awaitingResult": "Waiting for resultā€¦" + "awaitingResult": "Waiting for resultā€¦", + "fetchRequest": "Requesting a fetchā€¦" }, "table": { "error": { "label": { - "type": "Error type", - "detail": "Error detail" + "detail": "Error detail", + "type": "Error type" }, "value": { - "httpStatus": "The remote server answered with HTTP {status}", - "httpError": "An HTTP error occurred while contacting the remote server", - "timeoutError": "The remote server didn't respond quickly enough", "connectionError": "Impossible to connect to the remote server", - "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "httpError": "An HTTP error occurred while contacting the remote server", + "httpStatus": "The remote server answered with HTTP {status}", "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", + "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "timeoutError": "The remote server didn't respond quickly enough", "unknownError": "Unknown error" } } @@ -1415,64 +1415,64 @@ }, "forms": { "PasswordInput": { - "title": "Show/hide password", "button": { "copy": "Copy" }, "message": { "copy": "Text copied to clipboard!" - } + }, + "title": "Show/hide password" } }, "library": { "AlbumBase": { - "title": "Album", - "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "episodes": "No episodes | {n} episode | {n} episodes" - }, "link": { "addDescription": "Add a descriptionā€¦" - } + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Album" }, "AlbumDetail": { - "header": { - "episodes": "Episodes", - "tracks": "Tracks", - "libraries": "User libraries" - }, "description": { "libraries": "This album is present in the following libraries:" }, + "header": { + "episodes": "Episodes", + "libraries": "User libraries", + "tracks": "Tracks" + }, "meta": { "volume": "Volume {number}" } }, "AlbumDropdown": { "button": { - "more": "Moreā€¦", "cancel": "Cancel", - "embed": "Embed", + "delete": "Delete", "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "embed": { - "header": "Embed this album on your website" - }, - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." - } - } + "embed": "Embed", + "more": "Moreā€¦" }, "link": { - "domain": "View on {domain}", - "musicbrainz": "View on MusicBrainz", "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", "moderation": "Open in moderation interface", - "django": "View in Django's admin" + "musicbrainz": "View on MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this album?" + }, + "embed": { + "header": "Embed this album on your website" + } } }, "AlbumEdit": { @@ -1485,83 +1485,83 @@ } }, "Albums": { - "title": "Albums", - "placeholder": { - "search": "Enter album titleā€¦" + "button": { + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing albums" }, - "button": { - "search": "Search" - }, "label": { "search": "Search", "tags": "Tags" }, + "link": { + "addMusic": "Add some music" + }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" + "placeholder": { + "search": "Enter album titleā€¦" }, - "link": { - "addMusic": "Add some music" - } + "title": "Albums" }, "ArtistBase": { - "title": "Artist", - "meta": { - "tracks": "0 tracks in | {count} track in | {count} tracks in", - "albums": "0 albums | {n} album | {n} albums" - }, "button": { - "play": "Play all albums", - "edit": "Edit", "cancel": "Cancel", + "edit": "Edit", "embed": "Embed", - "more": "Moreā€¦" + "more": "Moreā€¦", + "play": "Play all albums" }, "link": { - "django": "View in Django's admin", - "musicbrainz": "View on MusicBrainz", - "wikipedia": "Search on Wikipedia", - "domain": "View on {domain}", "discogs": "Search on Discogs", - "moderation": "Open in moderation interface" + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz", + "wikipedia": "Search on Wikipedia" + }, + "meta": { + "albums": "0 albums | {n} album | {n} albums", + "tracks": "0 tracks in | {count} track in | {count} tracks in" }, "modal": { "embed": { "header": "Embed this artist work on your website" } - } + }, + "title": "Artist" }, "ArtistDetail": { - "header": { - "album": "Albums by this artist", - "track": "New tracks by this artist", - "library": "User libraries" + "button": { + "filter": "Remove filter", + "more": "Load moreā€¦" }, "description": { "library": "This artist is present in the following libraries:" }, - "button": { - "more": "Load moreā€¦", - "filter": "Remove filter" - }, - "message": { - "filter": "You are currently hiding content related to this artist." + "header": { + "album": "Albums by this artist", + "library": "User libraries", + "track": "New tracks by this artist" }, "link": { "filter": "Review my filters" + }, + "message": { + "filter": "You are currently hiding content related to this artist." } }, "ArtistEdit": { @@ -1574,44 +1574,57 @@ } }, "Artists": { - "title": "Artists", - "placeholder": { - "search": "Searchā€¦" + "button": { + "search": "Search", + "upload": "Add some music" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing artists" }, "label": { + "excludeCompilation": "Exclude Compilation Artists", "search": "Artist name", - "tags": "Tags", - "excludeCompilation": "Exclude Compilation Artists" - }, - "button": { - "search": "Search", - "upload": "Add some music" + "tags": "Tags" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" - } + "placeholder": { + "search": "Searchā€¦" + }, + "title": "Artists" }, "EditCard": { + "button": { + "approve": "Approve", + "delete": "Delete", + "reject": "Reject" + }, "header": { "modification": "Modification {id}" }, "link": { "track": "Track #{id} - {name}" }, + "modal": { + "content": { + "warning": "The suggestion will be completely removed, this action is irreversible." + }, + "delete": { + "header": "Delete this suggestion?" + } + }, "status": { "applied": "Approved and applied", "approved": "Approved", @@ -1622,117 +1635,104 @@ "update": { "header": { "field": "Field", - "oldValue": "Old value", - "newValue": "New value" + "newValue": "New value", + "oldValue": "Old value" }, "notApplicable": "N/A" } - }, - "button": { - "approve": "Approve", - "reject": "Reject", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this suggestion?" - }, - "content": { - "warning": "The suggestion will be completely removed, this action is irreversible." - } } }, "EditForm": { - "notApplicable": "N/A", - "placeholder": { - "summary": "A short summary describing your changes." - }, - "header": { - "success": "Your edit was successfully submitted.", - "failure": "Error while submitting edit", - "recentEdits": "Recent edits", - "unreviewed": "Restrict to unreviewed edits" - }, "button": { + "cancel": "Cancel", + "clear": "Clear", + "new": "Submit another edit", + "reset": "Reset to initial value", "showAll": "Show all edits", "showUnreviewed": "Restrict to unreviewed edits", - "new": "Submit another edit", - "clear": "Clear", - "reset": "Reset to initial value", "submit": "Submit and apply edit", - "cancel": "Cancel", "suggest": "Submit suggestion" }, "empty": { "suggestEdit": "Suggest a change using the form below" }, + "header": { + "failure": "Error while submitting edit", + "recentEdits": "Recent edits", + "success": "Your edit was successfully submitted.", + "unreviewed": "Restrict to unreviewed edits" + }, "label": { "summary": "Summary (optional)" }, "message": { "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "A short summary describing your changes." } }, "FileUpload": { - "tooltip": { - "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", - "size": "Cannot upload this file, ensure it is not too big", - "network": "A network error occurred while uploading this file", - "timeout": "Upload timeout, please try again", - "retry": "Retry", - "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}" - }, - "message": { - "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", - "local": { - "message": "You are about to upload music to your library. Before proceeding, please ensure that:", - "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", - "tag": "The music files you are uploading are tagged properly.", - "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format" - } - }, - "link": { - "uploading": "Uploading", - "processing": "Processing", - "picard": "We recommend using Picard for that purpose." - }, - "empty": { - "noFiles": "0" - }, - "label": { - "remainingSpace": "Remaining storage space", - "uploadWidget": "Click to select files to upload or drag and drop files or directories", - "extensions": "Supported extensions: {extensions}" - }, - "header": { - "local": "Upload music from '~/your local storage", - "server": "Import music from your server", - "failure": "Error while launching import", - "status": "Import status" - }, - "table": { - "upload": { - "header": { - "filename": "Filename", - "size": "Size", - "status": "Status", - "actions": "Actions" - }, - "status": { - "uploaded": "Uploaded", - "uploading": "Uploadingā€¦", - "pending": "Pending" - }, - "progress": "{percent}%" - } - }, "button": { - "retry": "Retry failed uploads", - "cancel": "Cancel" + "cancel": "Cancel", + "retry": "Retry failed uploads" }, "description": { "import": "Import status", "previousImport": "Results of your previous import:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error while launching import", + "local": "Upload music from '~/your local storage", + "server": "Import music from your server", + "status": "Import status" + }, + "label": { + "extensions": "Supported extensions: {extensions}", + "remainingSpace": "Remaining storage space", + "uploadWidget": "Click to select files to upload or drag and drop files or directories" + }, + "link": { + "picard": "We recommend using Picard for that purpose.", + "processing": "Processing", + "uploading": "Uploading" + }, + "message": { + "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", + "local": { + "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", + "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", + "message": "You are about to upload music to your library. Before proceeding, please ensure that:", + "tag": "The music files you are uploading are tagged properly." + } + }, + "table": { + "upload": { + "header": { + "actions": "Actions", + "filename": "Filename", + "size": "Size", + "status": "Status" + }, + "progress": "{percent}%", + "status": { + "pending": "Pending", + "uploaded": "Uploaded", + "uploading": "Uploadingā€¦" + } + } + }, + "tooltip": { + "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", + "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}", + "network": "A network error occurred while uploading this file", + "retry": "Retry", + "size": "Cannot upload this file, ensure it is not too big", + "timeout": "Upload timeout, please try again" } }, "FsBrowser": { @@ -1746,17 +1746,21 @@ } }, "Home": { - "title": "Library", "header": { - "recentlyListened": "Recently listened", - "recentlyFavorited": "Recently favorited", + "newChannels": "New channels", "playlists": "Playlists", "recentlyAdded": "Recently added", - "newChannels": "New channels" - } + "recentlyFavorited": "Recently favorited", + "recentlyListened": "Recently listened" + }, + "title": "Library" }, "ImportStatusModal": { + "button": { + "close": "Close" + }, "error": { + "importFailure": "An error occurred during upload processing. You will find more information below.", "invalidMetadata": { "label": "Invalid metadata", "message": "The metadata included in the file is invalid or some mandatory fields are missing." @@ -1764,39 +1768,41 @@ "unknownError": { "label": "Unknown error", "message": "An unknown error occurred" - }, - "importFailure": "An error occurred during upload processing. You will find more information below." + } }, "header": { "importDetail": "Import detail" }, - "message": { - "importDetail": "Upload is still pending and will soon be processed by the server.", - "importSuccess": "Upload was successfully processed by the server." - }, - "warning": { - "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." - }, - "table": { - "error": { - "errorType": "Error type", - "errorDetail": "Error detail", - "help": "Getting help", - "debug": "Debug information" - } - }, "link": { "documentation": "Read our documentation for this error", "support": "Open a support thread (include the debug information below in your message)" }, - "button": { - "close": "Close" + "message": { + "importDetail": "Upload is still pending and will soon be processed by the server.", + "importSuccess": "Upload was successfully processed by the server." + }, + "table": { + "error": { + "debug": "Debug information", + "errorDetail": "Error detail", + "errorType": "Error type", + "help": "Getting help" + } + }, + "warning": { + "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." } }, "Podcasts": { - "title": "Podcasts", - "placeholder": { - "search": "Searchā€¦" + "button": { + "cancel": "Cancel", + "channel": "Create a Channel", + "feed": "Subscribe to feed", + "search": "Search", + "subscribe": "Subscribe" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing podcasts" @@ -1805,76 +1811,69 @@ "search": "Podcast title", "tags": "Tags" }, - "button": { - "search": "Search", - "cancel": "Cancel", - "subscribe": "Subscribe", - "channel": "Create a Channel", - "feed": "Subscribe to feed" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, - "pagination": { - "results": "Results per page" - }, - "empty": { - "noResults": "No results matching your query" - }, "modal": { "subscription": { "header": "Subscription" } - } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Searchā€¦" + }, + "title": "Podcasts" }, "Radios": { - "title": "Radios", - "placeholder": { - "search": "Enter a radio nameā€¦" + "button": { + "add": "Create a radio", + "create": "Create your own radio", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing radios", "instance": "Instance radios", "user": "User radios" }, - "link": {}, "label": { "search": "Search" }, - "button": { - "search": "Search", - "create": "Create your own radio", - "add": "Create a radio" - }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" - } + "placeholder": { + "search": "Enter a radio nameā€¦" + }, + "title": "Radios" }, "TagDetail": { - "link": { - "moderation": "Open in moderation interface", - "artists": "Artists", - "albums": "Albums" - }, "header": { "channels": "Channels", "tracks": "Tracks" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "moderation": "Open in moderation interface" } }, "TagSelector": { @@ -1883,73 +1882,73 @@ } }, "TrackBase": { - "title": "Track", + "button": { + "cancel": "Cancel", + "delete": "Delete", + "download": "Download", + "edit": "Edit", + "embed": "Embed", + "more": "Moreā€¦", + "play": "Play" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "wikipedia": "Search on Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this track?" + }, + "embed": { + "header": "Embed this track on your website" + } + }, "subtitle": { "with-uploader": "Uploaded by {0} on {1}", "without-uploader": "Uploaded on {0}" }, - "button": { - "download": "Download", - "more": "Moreā€¦", - "play": "Play", - "cancel": "Cancel", - "embed": "Embed", - "edit": "Edit", - "delete": "Delete" - }, - "link": { - "domain": "View on {domain}", - "wikipedia": "Search on Wikipedia", - "discogs": "Search on Discogs", - "moderation": "Open in moderation interface", - "django": "View in Django's admin" - }, - "modal": { - "embed": { - "header": "Embed this track on your website" - }, - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." - } - } - } + "title": "Track" }, "TrackDetail": { - "notApplicable": "N/A", - "header": { - "track": "Track details", - "episode": "Episode details", - "release": "Release Details", - "playlists": "Related Playlists", - "library": "Related libraries" - }, "description": { "library": "This track is present in the following libraries:" }, + "header": { + "episode": "Episode details", + "library": "Related libraries", + "playlists": "Related Playlists", + "release": "Release Details", + "track": "Track details" + }, "link": { "musicbrainz": "View on MusicBrainz" }, + "notApplicable": "N/A", "table": { + "release": { + "album": "Album", + "artist": "Artist", + "copyright": "Copyright", + "license": "License", + "series": "Serie", + "url": "URL", + "year": "Year" + }, "track": { - "duration": "Duration", - "size": "Size", - "codec": "Codec", "bitrate": { "label": "Bitrate", "value": "{bitrate}/s" }, - "downloads": "Downloads" - }, - "release": { - "copyright": "Copyright", - "year": "Year", - "license": "License", - "url": "URL", - "artist": "Artist", - "album": "Album", - "series": "Serie" + "codec": "Codec", + "downloads": "Downloads", + "duration": "Duration", + "size": "Size" } } }, @@ -1959,146 +1958,143 @@ "suggest": "Suggest an edit on this track" }, "message": { - "remote": " This object is managed by another server, you cannot edit it." + "remote": "This object is managed by another server, you cannot edit it." } }, "radios": { "Builder": { - "title": "Radio Builder", - "placeholder": { - "name": "My awesome radio", - "description": "My awesome description" - }, - "header": { - "builder": "Builder", - "updated": "Radio updated", - "created": "Radio created", - "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters" + "button": { + "filter": "Add filter", + "save": "Save" }, "description": { "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." }, - "label": { - "name": "Radio name", - "description": "Description", - "public": "Display publicly", - "filter": "Add filters to customize your radio" + "header": { + "builder": "Builder", + "created": "Radio created", + "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters", + "updated": "Radio updated" }, - "button": { - "save": "Save", - "filter": "Add filter" + "label": { + "description": "Description", + "filter": "Add filters to customize your radio", + "name": "Radio name", + "public": "Display publicly" }, "option": { "filter": "Select a filter" }, + "placeholder": { + "description": "My awesome description", + "name": "My awesome radio" + }, "table": { "filter": { "header": { - "name": "Filter name", - "exclude": "Exclude", - "config": "Config", + "actions": "Actions", "candidates": "Candidates", - "actions": "Actions" + "config": "Config", + "exclude": "Exclude", + "name": "Filter name" } } - } + }, + "title": "Radio Builder" }, "Filter": { + "cancelButton": "Cancel", "excludeLabel": "Exclude", "matchingTracks": "0 tracks matching filter | {n} track matching filter | {n} tracks matching filter", "matchingTracksModalHeader": "Tracks matching filter", - "cancelButton": "Cancel", "removeButton": "Remove" } } }, "manage": { "ChannelsTable": { - "placeholder": { - "search": "Search by domain, name, accountā€¦" + "label": { + "category": "Category", + "search": "Search" }, "link": { - "moderation": "Open in moderation interface", - "local": "Local" - }, - "label": { - "search": "Search", - "category": "Category" + "local": "Local", + "moderation": "Open in moderation interface" }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, accountā€¦" }, "table": { "channel": { "header": { - "name": "Name", "account": "Account", - "domain": "Domain", "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "library": { "AlbumsTable": { - "notApplicable": "N/A", - "placeholder": { - "search": "Search by domain, title, artist, MusicBrainz IDā€¦" - }, - "link": { - "moderation": "Open in moderation interface", - "local": "Local" - }, - "label": { - "search": "Search" - }, "action": { "delete": { "label": "Delete", "warning": "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." } }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "notApplicable": "N/A", "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, MusicBrainz IDā€¦" }, "table": { "album": { "header": { - "name": "Name", "artist": "Artist", + "creationDate": "Creation date", "domain": "Domain", - "tracks": "Tracks", + "name": "Name", "releaseDate": "Release date", - "creationDate": "Creation date" + "tracks": "Tracks" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "ArtistsTable": { - "placeholder": { - "search": "Search by domain, name, MusicBrainz IDā€¦" - }, "action": { "delete": { "label": "Delete", @@ -2106,68 +2102,68 @@ } }, "label": { - "search": "Search", - "category": "Category" + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local" }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, MusicBrainz IDā€¦" }, "table": { "artist": { "header": { - "name": "Name", - "domain": "Domain", "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" } } - }, - "link": { - "local": "Local" - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "EditsCardList": { - "placeholder": { - "search": "Search by account, summary, domainā€¦" - }, "label": { "search": "Search", "status": "Status" }, "option": { "all": "All", - "pending": "Pending review", "approved": "Approved", + "pending": "Pending review", "rejected": "Rejected" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by account, summary, domainā€¦" } }, "LibrariesTable": { - "placeholder": { - "search": "Search by domain, actor, name, descriptionā€¦" - }, "action": { "delete": { "label": "Delete", @@ -2178,41 +2174,41 @@ "search": "Search", "visibility": "Visibility" }, + "link": { + "local": "Local" + }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, - "link": { - "local": "Local" + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, actor, name, descriptionā€¦" }, "table": { "library": { "header": { - "name": "Name", "account": "Account", + "creationDate": "Creation date", "domain": "Domain", - "visibility": "Visibility", - "uploads": "Uploads", "followers": "Followers", - "creationDate": "Creation date" + "name": "Name", + "uploads": "Uploads", + "visibility": "Visibility" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "TagsTable": { - "placeholder": { - "search": "Search by name" - }, "action": { "delete": { "label": "Delete", @@ -2223,33 +2219,32 @@ "search": "Search" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } - }, - "link": {}, - "table": { - "tag": { - "header": { - "name": "Name", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" - } - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artists", + "creationDate": "Creation date", + "name": "Name", + "tracks": "Tracks" + } + } } }, "TracksTable": { - "placeholder": { - "search": "Search by domain, title, artist, album, MusicBrainz IDā€¦" - }, "action": { "delete": { "label": "Delete", @@ -2259,38 +2254,38 @@ "label": { "search": "Search" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "link": { "local": "Local" }, - "table": { - "track": { - "header": { - "title": "Title", - "album": "Album", - "artist": "Artist", - "domain": "Domain", - "license": "License", - "creationDate": "Creation date" - } - } + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, title, artist, album, MusicBrainz IDā€¦" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "license": "License", + "title": "Title" + } + } + } }, "UploadsTable": { - "placeholder": { - "search": "Search by domain, actor, name, reference, sourceā€¦" - }, "action": { "delete": { "label": "Delete", @@ -2299,46 +2294,49 @@ }, "label": { "search": "Search", - "visibility": "Visibility", - "status": "Import status" - }, - "option": { - "all": "All", - "pending": "Pending", - "skipped": "Skipped", - "failed": "Failed", - "finished": "Finished" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } + "status": "Import status", + "visibility": "Visibility" }, "link": { "local": "Local" }, - "table": { - "upload": { - "header": { - "name": "Name", - "library": "Library", - "account": "Account", - "domain": "Domain", - "visibility": "Visibility", - "importStatus": "Import status", - "size": "Size", - "creationDate": "Creation date", - "accessedDate": "Accessed date" - } - } + "notApplicable": "N/A", + "option": { + "all": "All", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, actor, name, reference, sourceā€¦" + }, + "table": { + "upload": { + "header": { + "accessedDate": "Accessed date", + "account": "Account", + "creationDate": "Creation date", + "domain": "Domain", + "importStatus": "Import status", + "library": "Library", + "name": "Name", + "size": "Size", + "visibility": "Visibility" + } + } + } } }, "moderation": { @@ -2348,99 +2346,95 @@ "label": "Purge" } }, - "placeholder": { - "search": "Search by domain, username, bioā€¦" - }, "label": { "search": "Search" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "link": { "local": "Local account" }, - "table": { - "account": { - "header": { - "name": "Name", - "domain": "Domain", - "uploads": "Uploads", - "firstSeen": "First seen", - "lastSeen": "Last seen", - "moderationRule": "Under moderation rule" - }, - "moderationRule": "Yes" - } + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, username, bioā€¦" + }, + "table": { + "account": { + "header": { + "domain": "Domain", + "firstSeen": "First seen", + "lastSeen": "Last seen", + "moderationRule": "Under moderation rule", + "name": "Name", + "uploads": "Uploads" + }, + "moderationRule": "Yes" + } } }, "DomainsTable": { "action": { - "purge": { - "label": "Purge" - }, "add": { "label": "Add to allow-list" }, + "purge": { + "label": "Purge" + }, "remove": { "label": "Remove from allow-list" } }, - "placeholder": { - "search": "Search by nameā€¦" + "empty": { + "noPods": "No other pods found" + }, + "label": { + "inList": "Is present on allow-list", + "search": "Search" }, "link": { "list": "This domain is present in your allow-list" }, - "label": { - "search": "Search", - "inList": "Is present on allow-list" - }, "option": { "all": "All", - "yes": "Yes", - "no": "No" + "no": "No", + "yes": "Yes" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by nameā€¦" }, "table": { "domain": { "header": { - "name": "Name", - "users": "Users", - "receivedMessages": "Received messages", "firstSeen": "First seen", - "moderationRule": "Under moderation rule" + "moderationRule": "Under moderation rule", + "name": "Name", + "receivedMessages": "Received messages", + "users": "Users" }, "moderationRule": "Yes" } - }, - "empty": { - "noPods": "No other pods found" - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "InstancePolicyCard": { - "status": { - "enabled": "Enabled", - "paused": "Paused" - }, "button": { "edit": "Edit" }, @@ -2451,73 +2445,77 @@ "blockAll": "Block everything", "muteActivity": "Mute activity", "muteNotifications": "Mute notifications", - "rejectMedia": "Reject media", - "reason": "Reason" + "reason": "Reason", + "rejectMedia": "Reject media" + }, + "status": { + "enabled": "Enabled", + "paused": "Paused" } }, "InstancePolicyForm": { - "tooltip": { - "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place.", - "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.", - "silenceActivity": "Hide account or domain content, except from followers.", - "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", - "rejectMedia": "Hide account or domain content, except from followers." - }, - "label": { - "silenceActivity": "Mute activity", - "silenceNotifications": "Mute notifications", - "rejectMedia": "Reject media", - "policyEnabled": "Enabled", - "policyDisabled": "Disabled", - "policyReason": "Reason", - "blockAll": "Block everything", - "customizeRule": "Or customize your rule" - }, - "header": { - "editRule": "Edit moderation rule", - "addRule": "Add a new moderation rule", - "failure": "Error while creating rule" - }, "button": { "cancel": "Cancel", - "update": "Update", + "confirm": "Delete moderation rule", "create": "Create", "delete": "Delete", - "confirm": "Delete moderation rule" + "update": "Update" + }, + "header": { + "addRule": "Add a new moderation rule", + "editRule": "Edit moderation rule", + "failure": "Error while creating rule" + }, + "label": { + "blockAll": "Block everything", + "customizeRule": "Or customize your rule", + "policyDisabled": "Disabled", + "policyEnabled": "Enabled", + "policyReason": "Reason", + "rejectMedia": "Reject media", + "silenceActivity": "Mute activity", + "silenceNotifications": "Mute notifications" }, "modal": { "delete": { - "header": "Delete this moderation rule?", "content": { "warning": "This action is irreversible" - } + }, + "header": "Delete this moderation rule?" } + }, + "tooltip": { + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.", + "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", + "rejectMedia": "Hide account or domain content, except from followers.", + "silenceActivity": "Hide account or domain content, except from followers.", + "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", + "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place." } }, "InstancePolicyModal": { "button": { - "show": "Moderation rulesā€¦", - "close": "Close" + "close": "Close", + "show": "Moderation rulesā€¦" }, "modal": { "manage": { - "header": "Manage moderation rules for {obj}", "content": { "warning": "This entity is subject to specific moderation rules" - } + }, + "header": "Manage moderation rules for {obj}" } } }, "NoteForm": { - "placeholder": { - "summary": "Describe what actions have been taken, or any other related updatesā€¦" + "button": { + "add": "Add note" }, "header": { "failure": "Error while submitting note" }, - "button": { - "add": "Add note" + "placeholder": { + "summary": "Describe what actions have been taken, or any other related updatesā€¦" } }, "NotesThread": { @@ -2526,115 +2524,115 @@ }, "modal": { "delete": { - "header": "Delete this note?", "content": { "warning": "The note will be deleted. This action is irreversible." - } + }, + "header": "Delete this note?" } } }, "ReportCard": { - "modal": { - "delete": { - "header": "Delete reported object?", - "content": { - "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." - } - } - }, "button": { + "confirmDelete": "Delete", "delete": "Delete reported object", "resolve": "Resolve", - "unresolve": "Unresolve", - "confirmDelete": "Delete" - }, - "link": { - "report": "Report {id}", - "publicPage": "View public page", - "moderation": "Open in moderation interface" - }, - "table": { - "report": { - "submittedBy": "Submitted by", - "category": "Category", - "creationDate": "Creation date" - }, - "status": { - "status": "Status", - "resolved": "Resolved", - "unresolved": "Unresolved", - "assignedTo": "Assigned to", - "resolutionDate": "Resolution date", - "internalNotes": "Internal notes" - }, - "object": { - "type": "Type", - "owner": "Owner", - "account": "Account", - "domain": "Domain", - "local": "Local" - } + "unresolve": "Unresolve" }, "header": { + "actions": "Actions", "message": "Message", - "reportedObject": "Reported object", "notes": "Internal notes", - "actions": "Actions" + "reportedObject": "Reported object" }, - "warning": { - "objectDeleted": "The object associated with this report was deleted." - }, - "notApplicable": "N/A" - }, - "UserRequestCard": { "link": { - "request": "Request {id}" + "moderation": "Open in moderation interface", + "publicPage": "View public page", + "report": "Report {id}" }, - "table": { - "request": { - "submittedBy": "Submitted by", - "creationDate": "Creation date" - }, - "status": { - "status": "Status", - "pending": "Pending", - "refused": "Refused", - "approved": "Approved", - "assignedTo": "Assigned to", - "resolutionDate": "Resolution date", - "internalNotes": "Internal notes" + "modal": { + "delete": { + "content": { + "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." + }, + "header": "Delete reported object?" } }, "notApplicable": "N/A", + "table": { + "object": { + "account": "Account", + "domain": "Domain", + "local": "Local", + "owner": "Owner", + "type": "Type" + }, + "report": { + "category": "Category", + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "resolutionDate": "Resolution date", + "resolved": "Resolved", + "status": "Status", + "unresolved": "Unresolved" + } + }, + "warning": { + "objectDeleted": "The object associated with this report was deleted." + } + }, + "UserRequestCard": { + "button": { + "approve": "Approve", + "reject": "Refuse" + }, "header": { - "signup": "Message", "actions": "Actions", - "notes": "Internal notes" + "notes": "Internal notes", + "signup": "Message" + }, + "link": { + "request": "Request {id}" }, "message": { "signup": "This user wants to sign-up on your pod." }, - "button": { - "approve": "Approve", - "reject": "Refuse" + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "approved": "Approved", + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "pending": "Pending", + "refused": "Refused", + "resolutionDate": "Resolution date", + "status": "Status" + } } } }, "users": { "InvitationForm": { - "placeholder": { - "invitation": "Leave empty for a random code" - }, - "header": { - "failure": "Error while creating invitation" - }, "button": { "clear": "Clear", "new": "Get a new invitation" }, + "header": { + "failure": "Error while creating invitation" + }, "label": { "invite": "Invitation code" }, + "placeholder": { + "invitation": "Leave empty for a random code" + }, "table": { "invitation": { "header": { @@ -2648,41 +2646,56 @@ "action": { "delete": "Delete" }, - "placeholder": { - "search": "Search by username, e-mail address, codeā€¦" - }, "label": { + "expired": "Expired", "search": "Search", "status": "Status", - "used": "Used", - "expired": "Expired", - "unused": "Not used" + "unused": "Not used", + "used": "Used" + }, + "option": { + "all": "All", + "expired": "Expired/used", + "open": "Open" }, "ordering": { "label": "Ordering" }, - "option": { - "all": "All", - "open": "Open", - "expired": "Expired/used" + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, + "placeholder": { + "search": "Search by username, e-mail address, codeā€¦" }, "table": { "invitation": { "header": { - "owner": "Owner", - "status": "Status", + "code": "Code", "creationDate": "Creation date", "expirationDate": "Expiration date", - "user": "User", - "code": "Code" + "owner": "Owner", + "status": "Status", + "user": "User" } } - }, - "pagination": { - "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" } }, "UsersTable": { + "label": { + "search": "Search" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, "permission": { "library": "Library", "moderation": "Moderation", @@ -2691,54 +2704,46 @@ "placeholder": { "search": "Search by username, e-mail address, nameā€¦" }, - "label": { - "search": "Search" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "table": { "user": { - "header": { - "username": "Username", - "email": "Email", - "accountStatus": "Account status", - "signup": "Sign-up", - "lastActivity": "Last activity", - "permissions": "Permissions", - "status": "Status" - }, "accountStatus": { "active": "Active", "inactive": "Inactive" }, + "header": { + "accountStatus": "Account status", + "email": "Email", + "lastActivity": "Last activity", + "permissions": "Permissions", + "signup": "Sign-up", + "status": "Status", + "username": "Username" + }, "status": { "admin": "Admin", - "staff": "Staff member", - "regular": "Regular user" + "regular": "Regular user", + "staff": "Staff member" } } - }, - "notApplicable": "N/A", - "pagination": { - "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" } } } }, "moderation": { "FilterModal": { - "message": { - "success": "Content filter successfully added" + "button": { + "cancel": "Cancel", + "hide": "Hide content" }, "header": { - "modal": "Do you want to hide content from artist \"{name}\"?", - "failure": "Error while creating filter" + "failure": "Error while creating filter", + "modal": "Do you want to hide content from artist \"{name}\"?" + }, + "help": { + "createFilter": "You can manage your filters any time from your account settings." + }, + "message": { + "success": "Content filter successfully added" }, "warning": { "createFilter": { @@ -2748,13 +2753,6 @@ "listItem3": "In artists and album listings", "listItem4": "In radio suggestions" } - }, - "help": { - "createFilter": "You can manage your filters any time from your account settings." - }, - "button": { - "cancel": "Cancel", - "hide": "Hide content" } }, "ReportCategoryDropdown": { @@ -2766,47 +2764,47 @@ } }, "ReportModal": { - "message": { - "submissionSuccess": "Report successfully submitted, thank you" + "button": { + "cancel": "Cancel", + "submit": "Submit report" + }, + "description": { + "email": "We'll use this e-mail address if we need to contact you regarding this report.", + "forwardToDomain": "Forward an anonymized copy of your report to the server hosting this element.", + "message": "Use this field to provide additional context to the moderator that will handle your report.", + "modal": "Use this form to submit a report to our moderation team" }, "error": { "nodeinfoFetch": "Cannot fetch Node Info: {error}" }, "header": { + "disabled": "Anonymous reports are disabled, please sign-in to submit a report.", "modal": "Do you want to report this object?", - "submissionFailure": "Error while submitting report", - "disabled": "Anonymous reports are disabled, please sign-in to submit a report." - }, - "description": { - "modal": "Use this form to submit a report to our moderation team", - "email": "We'll use this e-mail address if we need to contact you regarding this report.", - "message": "Use this field to provide additional context to the moderator that will handle your report.", - "forwardToDomain": "Forward an anonymized copy of your report to the server hosting this element." + "submissionFailure": "Error while submitting report" }, "label": { "email": "Email", - "message": "Message", - "forwardToDomain": "Forward to {domain}" + "forwardToDomain": "Forward to {domain}", + "message": "Message" }, - "button": { - "cancel": "Cancel", - "submit": "Submit report" + "message": { + "submissionSuccess": "Report successfully submitted, thank you" } } }, "notifications": { "NotificationRow": { "button": { + "approve": "Approve", "markRead": "Mark as read", "markUnread": "Mark as unread", - "reject": "Reject", - "approve": "Approve" + "reject": "Reject" }, "message": { - "libraryFollow": "{username} followed your library \"{library}\"", "libraryAcceptFollow": "{username} accepted your follow on library \"{library}\"", - "libraryReject": "You rejected {username}'s request to follow \"{library}\"", - "libraryPendingFollow": "{username} wants to follow your library \"{library}\"" + "libraryFollow": "{username} followed your library \"{library}\"", + "libraryPendingFollow": "{username} wants to follow your library \"{library}\"", + "libraryReject": "You rejected {username}'s request to follow \"{library}\"" } } }, @@ -2818,94 +2816,94 @@ }, "Editor": { "button": { - "copy": "Copy the current queue to this playlist", "addDuplicate": "Add anyways", "clear": "Clear playlist", + "copy": "Copy the current queue to this playlist", "insertFromQueue": "Insert from queue ({n} track) | Insert from queue ({n} tracks" }, - "header": { - "editor": "Playlist editor" - }, - "loading": { - "sync": "Syncing changes to serverā€¦" - }, "error": { "sync": "An error occurred while saving your changes" }, - "warning": { - "duplicate": "Some tracks in your queue are already in this playlist:" - }, - "message": { - "sync": "Changes synced with server" + "header": { + "editor": "Playlist editor" }, "help": { "reorder": "Drag and drop rows to reorder tracks in the playlist" }, + "loading": { + "sync": "Syncing changes to serverā€¦" + }, + "message": { + "sync": "Changes synced with server" + }, "modal": { "clearPlaylist": { - "header": "Do you want to clear the playlist \"{playlist}\"?", "content": { "warning": "This will remove all tracks from this playlist and cannot be undone." - } + }, + "header": "Do you want to clear the playlist \"{playlist}\"?" } + }, + "warning": { + "duplicate": "Some tracks in your queue are already in this playlist:" } }, "Form": { - "placeholder": { - "name": "My awesome playlist" + "button": { + "create": "Create playlist", + "update": "Update playlist" }, "header": { + "createFailure": "The playlist could not be created", "createPlaylist": "Create a new playlist", - "updateSuccess": "Playlist updated", "createSuccess": "Playlist created", - "createFailure": "The playlist could not be created" + "updateSuccess": "Playlist updated" }, "label": { "name": "Playlist name", "visibility": "Playlist visiblity" }, - "button": { - "update": "Update playlist", - "create": "Create playlist" + "placeholder": { + "name": "My awesome playlist" } }, "PlaylistModal": { - "placeholder": { - "filterPlaylist": "Enter playlist name" - }, "button": { + "addDuplicate": "Add anyways", "addToPlaylist": "Add to this playlist", "addTrack": "Add track", "cancel": "Cancel", - "addDuplicate": "Add anyways", "edit": "Edit" }, - "header": { - "addToPlaylist": "Add to playlist", - "track": "{title}, by {artist}", - "manage": "Manage playlists", - "addFailure": "The track can't be added to a playlist", - "available": "Available playlists", - "noResults": "No results matching your filter" + "empty": { + "noPlaylists": "No playlists have been created yet" }, - "warning": { - "duplicate": "{ 0 } is already in { 1 }." + "header": { + "addFailure": "The track can't be added to a playlist", + "addToPlaylist": "Add to playlist", + "available": "Available playlists", + "manage": "Manage playlists", + "noResults": "No results matching your filter", + "track": "{title}, by {artist}" + }, + "label": { + "filter": "Filter" + }, + "placeholder": { + "filterPlaylist": "Enter playlist name" }, "table": { "edit": { "header": { "edit": "Edit", - "name": "Name", "lastModification": "Last modification", + "name": "Name", "tracks": "Tracks" } } }, - "label": { - "filter": "Filter" - }, - "empty": { - "noPlaylists": "No playlists have been created yet" + "warning": { + "duplicate": "{ 0 } is already in { 1 }." } }, "TrackPlaylistIcon": { @@ -2914,25 +2912,25 @@ } }, "Widget": { - "placeholder": { - "noPlaylists": "No playlists have been created yet" - }, "button": { "create": "Create playlist", "more": "Show more" + }, + "placeholder": { + "noPlaylists": "No playlists have been created yet" } } }, "radios": { "Button": { - "stopTagsRadio": "Stop tags radio", + "startArtistsRadio": "Start artists radio", + "startPlaylistsRadio": "Start playlists radio", + "startRadio": "Play radio", "startTagsRadio": "Start tags radio", "stopArtistsRadio": "Stop artists radio", - "startArtistsRadio": "Start artists radio", "stopPlaylistsRadio": "Stop playlists radio", - "startPlaylistsRadio": "Start playlists radio", "stopRadio": "Stop radio", - "startRadio": "Play radio" + "stopTagsRadio": "Stop tags radio" }, "Card": { "button": { @@ -2950,23 +2948,12 @@ "vui": { "Pagination": { "label": "Pagination", - "previous": "Previous Page", - "next": "Next Page" + "next": "Next Page", + "previous": "Previous Page" } } }, "composables": { - "useErrorHandler": { - "unexpectedError": "An unexpected error occurred.", - "errorReportTitle": "An unexpected error occured.", - "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", - "leaveFeedback": "Leave feedback" - }, - "useThemeList": { - "browserDefault": "Browser default", - "lightTheme": "Light", - "darkTheme": "Dark" - }, "audio": { "usePlayOptions": { "addToQueueMessage": "{n} tracks were added to your queue | {n} track was added to your queue | {n} tracks were added to your queue" @@ -2975,169 +2962,169 @@ "locale": { "useSharedLabels": { "fields": { - "privacyLevel": { - "label": "Activity visibility", - "help": "Determine the visiblity level of your activity", + "contentCategory": { + "choices": { + "music": "Music", + "other": "Other", + "podcast": "Podcast" + }, + "label": "Content category" + }, + "importStatus": { + "choices": { + "draft": { + "help": "This track has been uploaded, but hasn't been scheduled for processing yet", + "label": "Draft" + }, + "errored": { + "help": "This track could not be processed, please make sure it is tagged correctly", + "label": "Errored" + }, + "finished": { + "help": "Imported", + "label": "Finished" + }, + "pending": { + "help": "This track has been uploaded, but hasn't been processed by the server yet", + "label": "Pending" + }, + "skipped": { + "help": "This track is already present in one of your libraries", + "label": "Skipped" + } + }, + "label": "Click to display more information about the import process for this upload" + }, + "privacyLevel": { "choices": { - "private": "Nobody except me", "instance": "Everyone on this instance", + "private": "Nobody except me", "public": "Everyone, across all instances" }, + "help": "Determine the visiblity level of your activity", + "label": "Activity visibility", "shortChoices": { - "private": "Private", "instance": "Instance", + "private": "Private", "public": "Everyone" } }, - "importStatus": { - "label": "Click to display more information about the import process for this upload", - "choices": { - "skipped": { - "label": "Skipped", - "help": "This track is already present in one of your libraries" - }, - "draft": { - "label": "Draft", - "help": "This track has been uploaded, but hasn't been scheduled for processing yet" - }, - "pending": { - "label": "Pending", - "help": "This track has been uploaded, but hasn't been processed by the server yet" - }, - "errored": { - "label": "Errored", - "help": "This track could not be processed, please make sure it is tagged correctly" - }, - "finished": { - "label": "Finished", - "help": "Imported" - } - } - }, "reportType": { - "label": "Category", "choices": { - "takedownRequest": "Takedown request", - "invalidMetadata": "Invalid metadata", "illegalContent": "Illegal content", + "invalidMetadata": "Invalid metadata", "offensiveContent": "Offensive content", - "other": "Other" - } + "other": "Other", + "takedownRequest": "Takedown request" + }, + "label": "Category" }, "summary": { "label": "Bio" - }, - "contentCategory": { - "label": "Content category", - "choices": { - "podcast": "Podcast", - "music": "Music", - "other": "Other" - } } }, "filters": { - "creationDate": "Creation date", - "releaseDate": "Release date", "accessedDate": "Accessed date", + "albumTitle": "Album name", "appliedDate": "Applied date", - "handledDate": "Handled date", + "artistName": "Artist name", + "bitrate": "Bitrate", + "creationDate": "Creation date", + "dateJoined": "Sign-up date", + "domain": "Domain", + "duration": "Duration", + "expirationDate": "Expiration date", "firstSeen": "First seen date", + "followers": "Followers", + "handledDate": "Handled date", + "itemsCount": "Items", + "lastActivity": "Last activity", "lastSeen": "Last seen date", "modificationDate": "Modification date", - "expirationDate": "Expiration date", - "trackTitle": "Track name", - "albumTitle": "Album name", - "artistName": "Artist name", "name": "Name", - "itemsCount": "Items", - "size": "Size", - "bitrate": "Bitrate", - "duration": "Duration", - "dateJoined": "Sign-up date", - "lastActivity": "Last activity", - "username": "Username", - "domain": "Domaimn", - "users": "Users", "receivedMessages": "Received messages", + "releaseDate": "Release date", + "size": "Size", + "trackTitle": "Track name", "uploads": "Uploads", - "followers": "Followers" + "username": "Username", + "users": "Users" }, "scopes": { - "profile": { - "label": "Profile", - "description": "Access to e-mail, username, and profile information" - }, - "libraries": { - "label": "Libraries and uploads", - "description": "Access to audio files, libraries, artists, albums and tracks" + "edits": { + "description": "Access to edits", + "label": "Edits" }, "favorites": { - "label": "Favorites", - "description": "Access to favorites" - }, - "listenings": { - "label": "Listenings", - "description": "Access to listening history" - }, - "follows": { - "label": "Follows", - "description": "Access to follows" - }, - "playlists": { - "label": "Playlists", - "description": "Access to playlists" - }, - "radios": { - "label": "Radios", - "description": "Access to radios" + "description": "Access to favorites", + "label": "Favorites" }, "filters": { - "label": "Content filters", - "description": "Access to content filters" + "description": "Access to content filters", + "label": "Content filters" + }, + "follows": { + "description": "Access to follows", + "label": "Follows" + }, + "libraries": { + "description": "Access to audio files, libraries, artists, albums and tracks", + "label": "Libraries and uploads" + }, + "listenings": { + "description": "Access to listening history", + "label": "Listenings" }, "notifications": { - "label": "Notifications", - "description": "Access to notifications" + "description": "Access to notifications", + "label": "Notifications" }, - "edits": { - "label": "Edits", - "description": "Access to edits" + "playlists": { + "description": "Access to playlists", + "label": "Playlists" }, - "security": { - "label": "Security", - "description": "Access to security settings such as password and authorization" + "profile": { + "description": "Access to e-mail, username, and profile information", + "label": "Profile" + }, + "radios": { + "description": "Access to radios", + "label": "Radios" }, "reports": { - "label": "Reports", - "description": "Access to moderation reports" + "description": "Access to moderation reports", + "label": "Reports" + }, + "security": { + "description": "Access to security settings such as password and authorization", + "label": "Security" } } } }, "moderation": { "useEditConfigs": { - "description": { - "label": "Description" - }, - "cover": { - "label": "Cover" - }, - "tags": { - "label": "Tags" + "album": { + "releaseDate": "Release date", + "title": "Title" }, "artist": { "name": "Name" }, - "album": { - "title": "Title", - "releaseDate": "Release date" + "cover": { + "label": "Cover" + }, + "description": { + "label": "Description" + }, + "tags": { + "label": "Tags" }, "track": { - "title": "Title", - "position": "Position", "copyright": "Copyright", - "license": "Licence" + "license": "Licence", + "position": "Position", + "title": "Title" } }, "useReport": { @@ -3145,78 +3132,89 @@ "label": "Report {'@'}{username}", "typeLabel": "Account" }, - "track": { - "label": "Report this trackā€¦", - "typeLabel": "Track" - }, "album": { "label": "Report this albumā€¦", "typeLabel": "Album" }, - "channel": { - "label": "Report this channelā€¦", - "typeLabel": "Channel" - }, "artist": { "label": "Report this artistā€¦", "typeLabel": "Artist", "unknownLabel": "Unknown artist" }, - "playlist": { - "label": "Report this playlistā€¦", - "typeLabel": "Playlist" + "channel": { + "label": "Report this channelā€¦", + "typeLabel": "Channel" }, "library": { "label": "Report this libraryā€¦", "typeLabel": "Library" + }, + "playlist": { + "label": "Report this playlistā€¦", + "typeLabel": "Playlist" + }, + "track": { + "label": "Report this trackā€¦", + "typeLabel": "Track" } }, "useReportConfigs": { - "tags": { - "label": "Tags" - }, - "name": { - "label": "Name" - }, - "creationDate": { - "label": "Creation date" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "visibility": { - "label": "Visibility" - }, - "artist": { - "label": "Artist" - }, - "album": { - "label": "Album", - "title": "Title", - "releaseDate": "Release date" - }, - "track": { - "label": "Track", - "title": "Title", - "position": "Position", - "copyright": "Copyright", - "license": "Licence" - }, - "library": { - "label": "Library", - "description": "Description" - }, - "playlist": { - "label": "Playlist" - }, "account": { "label": "Account", "summary": "Bio" }, + "album": { + "label": "Album", + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "label": "Artist" + }, "channel": { "label": "Channel" + }, + "creationDate": { + "label": "Creation date" + }, + "library": { + "description": "Description", + "label": "Library" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Name" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "label": "Track", + "license": "Licence", + "position": "Position", + "title": "Title" + }, + "visibility": { + "label": "Visibility" } } + }, + "useErrorHandler": { + "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", + "errorReportTitle": "An unexpected error occured.", + "leaveFeedback": "Leave feedback", + "unexpectedError": "An unexpected error occurred." + }, + "useThemeList": { + "browserDefault": "Browser default", + "darkTheme": "Dark", + "lightTheme": "Light" } }, "init": { @@ -3225,33 +3223,46 @@ "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" }, "sentry": { - "title": "To enhance the quality of our services, we would like to collect information about crashes during your session.", - "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", - "funkwhaleInstance": "Funkwhale's official Glitchtip instance", "allow": "Allow", - "deny": "Deny" + "deny": "Deny", + "funkwhaleInstance": "Funkwhale's official Glitchtip instance", + "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", + "title": "To enhance the quality of our services, we would like to collect information about crashes during your session." }, "serviceWorker": { - "newAppVersion": "A new version of the app is available.", "actions": { - "update": "Update", - "later": "Later" - } + "later": "Later", + "update": "Update" + }, + "newAppVersion": "A new version of the app is available." } }, "views": { "Notifications": { - "title": "Notifications", + "button": { + "read": "Mark all as read", + "submit": "Got it!" + }, + "empty": { + "notifications": "No notification to show" + }, "header": { - "messages": "Your messages", - "instanceSupport": "Support this Funkwhale pod", "funkwhaleSupport": "Do you like Funkwhale?", + "instanceSupport": "Support this Funkwhale pod", + "messages": "Your messages", "notifications": "Your notifications" }, "label": { "reminder": "Remind me in:", "showRead": "Show read notifications" }, + "link": { + "donate": "Donate", + "help": "Discover other ways to help" + }, + "loading": { + "notifications": "Loading notificationsā€¦" + }, "message": { "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" }, @@ -3263,96 +3274,83 @@ "never": "Never" } }, - "button": { - "submit": "Got it!", - "read": "Mark all as read" - }, - "link": { - "donate": "Donate", - "help": "Discover other ways to help" - }, - "loading": { - "notifications": "Loading notificationsā€¦" - }, - "empty": { - "notifications": "No notification to show" - } + "title": "Notifications" }, "Search": { - "header": { - "search": "Search", - "rss": "Subscribe to a podcast RSS feed", - "remote": "Search a remote object" - }, - "label": { - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "playlists": "Playlists", - "radios": "Radios", - "tags": "Tags", - "podcasts": "Podcasts", - "series": "Series" - }, "button": { "submit": "Submit Search Query" + }, + "header": { + "remote": "Search a remote object", + "rss": "Subscribe to a podcast RSS feed", + "search": "Search" + }, + "label": { + "albums": "Albums", + "artists": "Artists", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Tags", + "tracks": "Tracks" } }, "admin": { "ChannelDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "openRemote": "Open remote profile", + "refresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "channelData": "Channel data" }, "label": { "local": "Local" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin" - }, - "button": { - "refresh": "Refresh from remote server", - "openRemote": "Open remote profile", - "delete": "Delete" + "django": "View in Django's admin", + "localProfile": "Open local profile" }, "modal": { "delete": { - "header": "Delete this channel?", "content": { "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." - } + }, + "header": "Delete this channel?" } }, - "header": { - "channelData": "Channel data", - "activity": "Activity", - "audioContent": "Audio content" - }, "table": { - "channelData": { - "name": "Name", - "category": "Category", - "account": "Account", - "domain": "Domain", - "description": "Description", - "url": "URL", - "rss": "RSS feed" - }, "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", + "edits": "Edits", "favorited": "Favorited tracks", - "playlists": "Playlists", + "firstSeen": "First seen", "linkedReports": "Linked reports", - "edits": "Edits" + "listenings": "Listenings", + "playlists": "Playlists" }, "audioContent": { + "albums": "Albums", "cachedSize": "Cached size", "totalSize": "Total size", - "uploads": "Uploads", - "albums": "Albums", - "tracks": "Tracks" + "tracks": "Tracks", + "uploads": "Uploads" + }, + "channelData": { + "account": "Account", + "category": "Category", + "description": "Description", + "domain": "Domain", + "name": "Name", + "rss": "RSS feed", + "url": "URL" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "CommonList": { @@ -3371,189 +3369,182 @@ }, "Settings": { "header": { - "settings": "Instance Settings", - "instanceInfo": "Instance Information", - "signups": "Sign-ups", - "security": "Security", - "music": "Music", "channels": "Channels", - "playlists": "Playlists", - "moderation": "Moderation", "federation": "Federation", - "subsonic": "Subsonic", + "instanceInfo": "Instance Information", + "moderation": "Moderation", + "music": "Music", + "playlists": "Playlists", + "sections": "Sections", + "security": "Security", + "settings": "Instance Settings", + "signups": "Sign-ups", "stats": "Statistics", - "ui": "User Interface", - "sections": "Sections" + "subsonic": "Subsonic", + "ui": "User Interface" } }, "library": { "AlbumDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" }, "header": { - "local": "Local", + "activity": "Activity", "albumData": "Album data", - "activity": "Activity", - "audioContent": "Audio content" + "audioContent": "Audio content", + "local": "Local" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", "artist": "Artist", + "django": "View in Django's admin", "domain": "Domain", - "reports": "Linked reports", "edits": "Edits", "libraries": "Libraries", - "uploads": "Uploads", - "tracks": "Tracks" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } - } - }, - "table": { - "album": { - "title": "Title", - "description": "Description" - }, - "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", - "favorited": "Favorited tracks", - "playlists": "Playlists" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - } - } - }, - "ArtistDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "header": { - "local": "Local", - "artistData": "Artist data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { "localProfile": "Open local profile", - "django": "View in Django's admin", "musicbrainz": "Open on MusicBrainz", "remoteProfile": "Open remote profile", - "category": "Category", - "domain": "Domain", "reports": "Linked reports", - "edits": "Edits", - "libraries": "Libraries", - "uploads": "Uploads", - "albums": "Albums", - "tracks": "Tracks" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this artist?", - "content": { - "warning": "The artist will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } - } - }, - "table": { - "artist": { - "name": "Name", - "description": "Description" - }, - "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", - "favorited": "Favorited tracks", - "playlists": "Playlists" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - } - } - }, - "Base": { - "title": "Manage Library", - "menu": { - "secondary": "Secondary menu" - }, - "link": { - "edits": "Edits", - "channels": "Channels", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "libraries": "Libraries", - "uploads": "Uploads", - "tags": "Tags" - } - }, - "EditsList": { - "title": "Edits", - "header": { - "edits": "Library edits" - } - }, - "LibraryDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "header": { - "local": "Local", - "libraryData": "Library data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "visibility": "Visibility", - "account": "Account", - "reports": "Linked reports", - "domain": "Domain", - "artists": "Artists", - "albums": "Albums", "tracks": "Tracks", "uploads": "Uploads" }, - "button": { - "delete": "Delete" - }, "modal": { "delete": { - "header": "Delete this library?", "content": { - "warning": "The library will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } + "warning": "The album will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this album?" } }, "table": { - "library": { - "name": "Name", - "description": "Description" + "activity": { + "favorited": "Favorited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" }, + "album": { + "description": "Description", + "title": "Title" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "ArtistDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "artistData": "Artist data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Category", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The artist will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this artist?" + } + }, + "table": { + "activity": { + "favorited": "Favorited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "artist": { + "description": "Description", + "name": "Name" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "edits": "Edits", + "libraries": "Libraries", + "tags": "Tags", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Manage Library" + }, + "EditsList": { + "header": { + "edits": "Library edits" + }, + "title": "Edits" + }, + "LibraryDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "libraryData": "Library data", + "local": "Local" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "domain": "Domain", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The library will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this library?" + } + }, + "table": { "activity": { "firstSeen": "First seen", "followers": "Followers" @@ -3561,158 +3552,188 @@ "audioContent": { "cachedSize": "Cached size", "totalSize": "Total size" + }, + "library": { + "description": "Description", + "name": "Name" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "TagDetail": { - "header": { - "tagData": "Tag data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, "button": { "delete": "Delete" }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "tagData": "Tag data" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "localProfile": "Open local profile", + "tracks": "Tracks" + }, "modal": { "delete": { - "header": "Delete this tag?", "content": { "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." - } + }, + "header": "Delete this tag?" } }, "table": { - "tag": { - "name": "Name" - }, "activity": { "firstSeen": "First seen" + }, + "tag": { + "name": "Name" } } }, "TrackDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" }, "header": { + "activity": "Activity", "local": "Local", - "trackData": "Track data", - "activity": "Activity" + "trackData": "Track data" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", "album": "Album", + "albumArtist": "Album artist", "artist": "Artist", + "django": "View in Django's admin", "domain": "Domain", - "reports": "Linked reports", "edits": "Edits", "libraries": "Libraries", - "uploads": "Uploads", - "albumArtist": "Album artist" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "uploads": "Uploads" }, "modal": { "delete": { - "header": "Delete this track?", "content": { "warning": "The track will be deleted, as well as associated uploads, favorites and listening history. This action is irreversible." - } + }, + "header": "Delete this track?" } }, "table": { - "track": { - "title": "Title", - "position": "Position", - "discNumber": "Disc number", - "copyright": "Copyright", - "license": "License", - "description": "Description" - }, "activity": { + "favorited": "Favorited tracks", "firstSeen": "First seen", "listenings": "Listenings", - "favorited": "Favorited tracks", "playlists": "Playlists" }, + "track": { + "copyright": "Copyright", + "description": "Description", + "discNumber": "Disc number", + "license": "License", + "position": "Position", + "title": "Title" + }, "trackData": { "cachedSize": "Cached size", "totalSize": "Total size" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "UploadDetail": { - "header": { - "local": "Local", - "uploadData": "Upload data", - "activity": "Activity", - "audioContent": "Audio content" - }, "button": { - "download": "Download", - "delete": "Delete" + "delete": "Delete", + "download": "Download" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "local": "Local", + "uploadData": "Upload data" }, "link": { - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "visibility": "Visibility", "account": "Account", + "django": "View in Django's admin", "domain": "Domain", "importStatus": "Import status", "library": "Library", - "type": "Type" + "remoteProfile": "Open remote profile", + "type": "Type", + "visibility": "Visibility" }, "modal": { "delete": { - "header": "Delete this upload?", "content": { "warning": "The upload will be removed. This action is irreversible." - } + }, + "header": "Delete this upload?" } }, + "notApplicable": "N/A", "table": { - "upload": { - "name": "Name" - }, "activity": { - "firstSeen": "First seen", - "accessedDate": "Accessed date" + "accessedDate": "Accessed date", + "firstSeen": "First seen" }, "audioContent": { - "track": "Track", - "cachedSize": "Cached size", - "size": "Size", "bitrate": { "label": "Bitrate", "value": "{bitrate}/s" }, - "duration": "Duration" + "cachedSize": "Cached size", + "duration": "Duration", + "size": "Size", + "track": "Track" + }, + "upload": { + "name": "Name" } - }, - "notApplicable": "N/A" + } } }, "moderation": { "AccountsDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "addPolicy": "Add a moderation policy" }, - "tooltip": { - "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" }, + "header": { + "accountData": "Account data", + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activty", + "audioContent": "Audio content", + "localAccount": "Local account", + "noPolicy": "You don't have any rule in place for this account." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "domain": "Domain", + "libraries": "Libraries", + "linkedReports": "Linked reports", + "openProfile": "Open profile", + "remoteProfile": "Open remote profile", + "requests": "Requests", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "notApplicable": "N/A", "option": { "permission": { "library": "Library", @@ -3720,142 +3741,121 @@ "settings": "Settings" } }, - "header": { - "localAccount": "Local account", - "noPolicy": "You don't have any rule in place for this account.", - "activePolicy": "This domain is subject to specific moderation rules", - "accountData": "Account data", - "activity": "Activty", - "audioContent": "Audio content" - }, - "link": { - "openProfile": "Open profile", - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "domain": "Domain", - "linkedReports": "Linked reports", - "requests": "Requests", - "channels": "Channels", - "libraries": "Libraries", - "uploads": "Uploads", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account" - }, - "button": { - "addPolicy": "Add a moderation policy" - }, "table": { "accountData": { - "username": "Username", "displayName": "Display name", "email": "Email address", + "lastActivity": "Last activity", + "lastChecked": "Last checked", "loginStatus": { - "label": "Login status", + "disabled": "Disabled", "enabled": "Enabled", - "disabled": "Disabled" + "label": "Login status" }, "permissions": "Permissions", - "userType": "Type", - "lastChecked": "Last checked", "signupDate": "Sign-up date", - "lastActivity": "Last activity" + "userType": "Type", + "username": "Username" }, "activity": { - "firstSeen": "First seen", + "emittedFollows": "Emitted library follows", "emittedMessages": "Emitted messages", - "receivedFollows": "Received library follows", - "emittedFollows": "Emitted library follows" + "firstSeen": "First seen", + "receivedFollows": "Received library follows" }, "audioContent": { "cachedSize": "Cached size", - "uploadQuota": "Upload quota", "megabyte": "MB", - "totalSize": "Total size" + "totalSize": "Total size", + "uploadQuota": "Upload quota" } }, - "notApplicable": "N/A" + "tooltip": { + "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } }, "Base": { - "title": "Moderation", + "link": { + "accounts": "Accounts", + "domains": "Domains", + "reports": "Reports", + "userRequests": "User Requests" + }, "menu": { "secondary": "Secondary menu" }, - "link": { - "reports": "Reports", - "userRequests": "User Requests", - "domains": "Domains", - "accounts": "Accounts" - } + "title": "Moderation" }, "DomainsDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "link": { - "website": "Open website", - "django": "View in Django's admin", - "knownAccounts": "Known accounts", - "channels": "Channels", - "libraries": "Libraries", - "uploads": "Uploads", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, "button": { - "removeFromAllowList": "Remove from allow-list", - "addToAllowList": "Add to allow-list", "addPolicy": "Add a moderation policy", - "refreshNodeInfo": "Refresh node info" - }, - "header": { - "noPolicy": "You don't have any rule in place for this domain.", - "activePolicy": "This domain is subject to specific moderation rules", - "instanceData": "Instance data", - "activity": "Activty", - "audioContent": "Audio content" + "addToAllowList": "Add to allow-list", + "refreshNodeInfo": "Refresh node info", + "removeFromAllowList": "Remove from allow-list" }, "description": { "policy": "Moderation policies help you control how your instance interact with a given domain or account" }, + "header": { + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activty", + "audioContent": "Audio content", + "instanceData": "Instance data", + "noPolicy": "You don't have any rule in place for this domain." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "knownAccounts": "Known accounts", + "libraries": "Libraries", + "tracks": "Tracks", + "uploads": "Uploads", + "website": "Open website" + }, + "notApplicable": "N/A", "table": { + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, "instanceData": { + "domainName": "Name", "inAllowList": { + "false": "No", "label": "Is present on allow-list", - "true": "Yes", - "false": "No" + "true": "Yes" }, "lastChecked": "Last checked", + "nodeInfoStatus": { + "label": "Status", + "value": "Error while fetching node info" + }, "software": { "label": "Software", "value": "{name} ({version})" }, - "domainName": "Name", - "totalUsers": "Total users", - "nodeInfoStatus": { - "label": "Status", - "value": "Error while fetching node info" - } - }, - "activity": { - "firstSeen": "First seen", - "emittedMessages": "Emitted messages", - "receivedFollows": "Received library follows", - "emittedFollows": "Emitted library follows" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" + "totalUsers": "Total users" } }, - "notApplicable": "N/A" + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } }, "DomainsList": { - "title": "Domains", + "button": { + "add": "Add" + }, "header": { "domains": "Domains", "failure": "Error while creating domain" @@ -3864,18 +3864,12 @@ "addDomain": "Add a domain", "addToAllowList": "Add to allow-list" }, - "button": { - "add": "Add" - } + "title": "Domains" }, "ReportsList": { - "title": "Reports", "header": { "reports": "Reports" }, - "placeholder": { - "search": "Search by account, summary, domainā€¦" - }, "label": { "search": "Search", "status": "Status" @@ -3888,19 +3882,19 @@ } }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by account, summary, domainā€¦" + }, + "title": "Reports" }, "RequestsList": { - "title": "User Requests", - "placeholder": { - "search": "Search by username" - }, "header": { "userRequests": "User Requests" }, @@ -3911,31 +3905,35 @@ "option": { "status": { "all": "All", - "pending": "Pending", "approved": "Approved", + "pending": "Pending", "refused": "Refused" } }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by username" + }, + "title": "User Requests" } }, "users": { "Base": { - "title": "Manage users", + "link": { + "invitations": "Invitations", + "users": "Users" + }, "menu": { "secondary": "Secondary menu" }, - "link": { - "users": "Users", - "invitations": "Invitations" - } + "title": "Manage users" } } }, @@ -3946,7 +3944,6 @@ } }, "EmailConfirm": { - "title": "Confirm your e-mail address", "header": { "failure": "Could not confirm your e-mail address", "success": "E-mail address confirmed" @@ -3960,22 +3957,22 @@ }, "message": { "success": "You can now use the service without limitations" - } + }, + "title": "Confirm your e-mail address" }, "Login": { - "title": "Log in", "header": { "login": "Log in to your Funkwhale account" - } + }, + "title": "Log in" }, "PasswordReset": { - "title": "Reset your password", - "placeholder": { - "email": "Enter the e-mail address linked to your account" + "button": { + "requestReset": "Ask for a password reset" }, "header": { - "reset": "Reset your password", - "failure": "Error while asking for a password reset" + "failure": "Error while asking for a password reset", + "reset": "Reset your password" }, "help": { "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." @@ -3986,174 +3983,175 @@ "link": { "back": "Back to login" }, - "button": { - "requestReset": "Ask for a password reset" - } + "placeholder": { + "email": "Enter the e-mail address linked to your account" + }, + "title": "Reset your password" }, "PasswordResetConfirm": { - "title": "Change your password", + "button": { + "update": "Update your password" + }, "header": { "failure": "Error while changing your password", "success": "Password updated successfully" }, - "message": { - "success": "Your password has been updated successfully.", - "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes." + "label": { + "newPassword": "New password" }, "link": { "back": "Back to login", "login": "Proceed to login" }, - "label": { - "newPassword": "New password" + "message": { + "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", + "success": "Your password has been updated successfully." }, - "button": { - "update": "Update your password" - } + "title": "Change your password" }, "Plugins": { "title": "Manage plugins" }, "ProfileActivity": { "header": { - "recentlyListened": "Recently listened", + "playlists": "Playlists", "recentlyFavorited": "Recently favorited", - "playlists": "Playlists" + "recentlyListened": "Recently listened" } }, "ProfileBase": { - "title": "{username}'s profile", - "link": { - "domainView": "View on {domain}", - "moderation": "Open in moderation interface", - "overview": "Overview", - "activity": "Activity" - }, "label": { "self": "This is you!" - } + }, + "link": { + "activity": "Activity", + "domainView": "View on {domain}", + "moderation": "Open in moderation interface", + "overview": "Overview" + }, + "title": "{username}'s profile" }, "ProfileOverview": { - "header": { - "libraries": "User Libraries", - "channels": "Channels", - "sharedLibraries": "This user shared the following libraries" + "button": { + "cancel": "Cancel", + "createChannel": "Create channel", + "next": "Next step", + "previous": "Previous step" }, - "modal": { - "createChannel": { - "header": "Create channel", - "podcast": { - "header": "Podcast channel" - }, - "artist": { - "header": "Artist channel" - } - } + "header": { + "channels": "Channels", + "libraries": "User Libraries", + "sharedLibraries": "This user shared the following libraries" }, "link": { "addNew": "Add New" }, - "button": { - "cancel": "Cancel", - "previous": "Previous step", - "next": "Next step", - "createChannel": "Create channel" + "modal": { + "createChannel": { + "artist": { + "header": "Artist channel" + }, + "header": "Create channel", + "podcast": { + "header": "Podcast channel" + } + } } }, "Signup": { - "title": "Sign up", "header": { "createAccount": "Create a Funkwhale account" - } + }, + "title": "Sign up" } }, "channels": { "DetailBase": { - "title": "Channel", - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks", - "subscribers": "No subscribers | {n} subscriber | {n} subscribers", - "listenings": "No listenings | {n} listening | {n} listenings" + "button": { + "cancel": "Cancel", + "confirm": "Delete", + "delete": "Deleteā€¦", + "edit": "Editā€¦", + "embed": "Embed", + "play": "Play", + "updateChannel": "Update channel", + "upload": "Upload" }, "header": { - "podcastChannel": "Podcast channel", - "artistChannel": "Artist channel" + "artistChannel": "Artist channel", + "podcastChannel": "Podcast channel" + }, + "link": { + "channelEpisodes": "All episodes", + "channelOverview": "Overview", + "channelTracks": "Tracks", + "domainView": "View on {domain}", + "mirrored": "Mirrored from {domain}", + "moderation": "Open in moderation interface" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "listenings": "No listenings | {n} listening | {n} listenings", + "subscribers": "No subscribers | {n} subscriber | {n} subscribers", + "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { - "subscribe": { - "header": "Subscribe to this channel", - "funkwhale": { - "header": "Subscribe on Funkwhale" - }, - "rss": { - "header": "Subscribe via RSS", - "content": { - "help": "Copy paste the following URL in your favorite podcatcher:" - } - }, - "fediverse": { - "header": "Subscribe on the Fediverse", - "content": { - "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" - } - } - }, "delete": { - "header": "Delete this Channel?", "content": { "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." - } + }, + "header": "Delete this Channel?" }, "embed": { "header": "Embed this artist work on your website" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" + }, + "header": "Subscribe on the Fediverse" + }, + "funkwhale": { + "header": "Subscribe on Funkwhale" + }, + "header": "Subscribe to this channel", + "rss": { + "content": { + "help": "Copy paste the following URL in your favorite podcatcher:" + }, + "header": "Subscribe via RSS" + } } }, - "button": { - "cancel": "Cancel", - "embed": "Embed", - "edit": "Editā€¦", - "delete": "Deleteā€¦", - "upload": "Upload", - "play": "Play", - "updateChannel": "Update channel", - "confirm": "Delete" - }, - "link": { - "domainView": "View on {domain}", - "moderation": "Open in moderation interface", - "mirrored": "Mirrored from {domain}", - "channelOverview": "Overview", - "channelEpisodes": "All episodes", - "channelTracks": "Tracks" - } + "title": "Channel" }, "DetailOverview": { "header": { - "uploadsSuccess": "Uploads published successfully", - "uploadsFailure": "Some uploads couldn't be published", - "uploadsProcessing": "Uploads are being processed", + "albums": "Albums", "latestEpisodes": "Latest episodes", "latestTracks": "Latest tracks", "series": "Series", - "albums": "Albums" - }, - "meta": { - "progress": "Processed uploads: {finished}/{total}" + "uploadsFailure": "Some uploads couldn't be published", + "uploadsProcessing": "Uploads are being processed", + "uploadsSuccess": "Uploads published successfully" }, "link": { - "skippedUploads": "View skipped uploads", + "addAlbum": "Add new", "erroredUploads": "View errored uploads", - "addAlbum": "Add new" + "skippedUploads": "View skipped uploads" }, "message": { "processing": "Your uploads are being processed by Funkwhale and will be live very soon." + }, + "meta": { + "progress": "Processed uploads: {finished}/{total}" } }, "SubscriptionsList": { - "title": "Subscribed Channels", - "placeholder": { - "search": "Filter by nameā€¦" + "button": { + "cancel": "Cancel", + "subscribe": "Subscribe" }, "link": { "addNew": "Add new" @@ -4163,58 +4161,58 @@ "header": "Subscription" } }, - "button": { - "cancel": "Cancel", - "subscribe": "Subscribe" - } + "placeholder": { + "search": "Filter by nameā€¦" + }, + "title": "Subscribed Channels" } }, "content": { "Base": { - "title": "Add content", - "menu": { - "secondary": "Secondary menu" - }, "link": { "libraries": "Libraries", "tracks": "Tracks" - } + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Add content" }, "Home": { - "title": "Add and manage content", - "help": { - "uploadQuota": "This instance offers up to {quota} of storage space for every user." - }, - "header": { - "channel": "Publish your work in a channel", - "upload": "Upload third-party content in a library", - "follow": "Follow remote libraries" + "button": { + "start": "Get started" }, "description": { "channel": { "1": "If you are a musician or a podcaster, channels are designed for you!", "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." }, - "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family.", - "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner." + "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", + "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." }, - "button": { - "start": "Get started" - } + "header": { + "channel": "Publish your work in a channel", + "follow": "Follow remote libraries", + "upload": "Upload third-party content in a library" + }, + "help": { + "uploadQuota": "This instance offers up to {quota} of storage space for every user." + }, + "title": "Add and manage content" }, "libraries": { "Card": { - "label": { - "size": "Total size of the files in this library" - }, - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - }, "button": { "upload": "Upload" }, + "label": { + "size": "Total size of the files in this library" + }, "link": { "details": "Library Details" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" } }, "FilesTable": { @@ -4222,64 +4220,61 @@ "delete": "Delete", "restartImport": "Restart import" }, - "placeholder": { - "search": "Search by domain, title, artist, albumā€¦" - }, "button": { "showStatus": "Show information about the upload status for this track" }, - "label": { - "search": "Search", - "importStatus": "Import status" - }, - "option": { - "status": { - "all": "All", - "draft": "Draft", - "pending": "Pending", - "skipped": "Skipped", - "failed": "Failed", - "finished": "Finished" - } - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "empty": { "noTracks": "No tracks have been added to this libray yet" }, - "table": { - "file": { - "header": { - "title": "Title", - "artist": "Artist", - "album": "Album", - "uploadDate": "Upload date", - "importStatus": "Import status", - "duration": "Duration", - "size": "Size" - } + "label": { + "importStatus": "Import status", + "search": "Search" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "All", + "draft": "Draft", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" } }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, title, artist, albumā€¦" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artist", + "duration": "Duration", + "importStatus": "Import status", + "size": "Size", + "title": "Title", + "uploadDate": "Upload date" + } + } + } }, "Form": { - "placeholder": { - "description": "This library contains my personal music, I hope you like it.", - "name": "My awesome library" - }, - "message": { - "libraryUpdated": "Library updated", - "libraryCreated": "Library created", - "libraryDeleted": "LIbrary deleted" + "button": { + "confirm": "Delete library", + "create": "Create library", + "delete": "Delete", + "update": "Update library" }, "description": { "library": "Libraries help you organize and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", @@ -4289,154 +4284,157 @@ "failure": "Error" }, "label": { - "name": "Name", "description": "Description", + "name": "Name", "visibility": "Visibility" }, - "button": { - "update": "Update library", - "create": "Create library", - "delete": "Delete", - "confirm": "Delete library" + "message": { + "libraryCreated": "Library created", + "libraryDeleted": "LIbrary deleted", + "libraryUpdated": "Library updated" }, "modal": { "delete": { - "header": "Delete this library?", "content": { "warning": "The library and all its tracks will be deleted. This can not be undone." - } + }, + "header": "Delete this library?" } + }, + "placeholder": { + "description": "This library contains my personal music, I hope you like it.", + "name": "My awesome library" } }, "Home": { - "loading": { - "libraries": "Loading librariesā€¦" + "empty": { + "noLibrary": "Looks like you don't have a library, it's time to create one." }, "header": { "libraries": "My libraries" }, - "empty": { - "noLibrary": "Looks like you don't have a library, it's time to create one." - }, "link": { "createLibrary": "Create a new library" + }, + "loading": { + "libraries": "Loading librariesā€¦" } }, "Quota": { + "button": { + "purge": "Purge" + }, "header": { "currentUsage": "Current usage" }, - "loading": { - "currentUsage": "Loading usage dataā€¦" - }, "label": { - "percentUsed": "{progress}%", "currentUsage": "{amount} used on {max} allowed", - "skipped": "Skipped files", "errored": "Errored files", - "pending": "Pending files" + "pending": "Pending files", + "percentUsed": "{progress}%", + "skipped": "Skipped files" }, "link": { "viewFiles": "View files" }, - "button": { - "purge": "Purge" + "loading": { + "currentUsage": "Loading usage dataā€¦" }, "modal": { - "purgePending": { - "header": "Purge pending files?", - "content": { - "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." - } - }, - "purgeSkipped": { - "header": "Purge skipped files?", - "content": { - "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." - } - }, "purgeErrored": { - "header": "Purge errored files?", "content": { "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." - } + }, + "header": "Purge errored files?" + }, + "purgePending": { + "content": { + "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." + }, + "header": "Purge pending files?" + }, + "purgeSkipped": { + "content": { + "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." + }, + "header": "Purge skipped files?" } } } }, "remote": { "Card": { - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely" - }, - "message": { - "scanSkipped": "Scan skipped (previous scan is too recent)", - "scanLaunched": "Scan launched" + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "pending": "Follow request pending approval", + "unfollow": "Unfollow" }, "error": { "follow": "Cannot follow remote library: {error}", "unfollow": "Cannot unfollow remote library: {error}" }, - "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "lastUpdate": "Last update: ", - "failedTracks": "Failed tracks: {tracks}" - }, - "button": { - "follow": "Follow", - "pending": "Follow request pending approval", - "cancel": "Cancel follow request", - "unfollow": "Unfollow" - }, - "link": { - "scanDetails": "Details", - "scan": "Scan now " - }, "label": { - "sharingLink": "Sharing link", + "scanFailure": "Problem during scanning", + "scanPartialSuccess": "Scanned with errors", "scanPending": "Scan pending", "scanProgress": "Scanning ({progress})", - "scanFailure": "Problem during scanning", "scanSuccess": "Scanned", - "scanPartialSuccess": "Scanned with errors" + "sharingLink": "Sharing link" + }, + "link": { + "scan": "Scan now ", + "scanDetails": "Details" + }, + "message": { + "scanLaunched": "Scan launched", + "scanSkipped": "Scan skipped (previous scan is too recent)" + }, + "meta": { + "failedTracks": "Failed tracks: {tracks}", + "lastUpdate": "Last update: ", + "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { "unfollow": { - "header": "Unfollow this libary?", "content": { "warning": "By unfollowing this library, you loose access to its content." - } + }, + "header": "Unfollow this libary?" } + }, + "tooltip": { + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" } }, "Home": { - "loading": { - "remoteLibraries": "Loading remote librariesā€¦" - }, - "header": { - "remoteLibraries": "Remote libraries", - "knownLibraries": "Known libraries" + "button": { + "refresh": "Refresh" }, "description": { "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." }, - "button": { - "refresh": "Refresh" + "header": { + "knownLibraries": "Known libraries", + "remoteLibraries": "Remote libraries" + }, + "loading": { + "remoteLibraries": "Loading remote librariesā€¦" } }, "ScanForm": { - "placeholder": { - "url": "Enter a library URL" - }, "button": { "submit": "Submit search" }, + "header": { + "failure": "Could not fetch remote library" + }, "label": { "search": "Search a remote library" }, - "header": { - "failure": "Could not fetch remote library" + "placeholder": { + "url": "Enter a library URL" } } } @@ -4444,174 +4442,174 @@ "library": { "DetailAlbums": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "DetailOverview": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "DetailTracks": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "Edit": { - "header": { - "libraryContents": "Library contents", - "followers": "Followers" - }, "button": { "accept": "Accept", "reject": "Reject" }, + "empty": { + "noFollowers": "Nobody is following this library" + }, + "header": { + "followers": "Followers", + "libraryContents": "Library contents" + }, "loading": { "followers": "Loading followersā€¦" }, "table": { "action": { "header": { - "user": "User", + "action": "Action", "date": "Date", "status": "Status", - "action": "Action" + "user": "User" }, "status": { - "pending": "Pending approval", "accepted": "Accepted", + "pending": "Pending approval", "rejected": "Rejected" } } - }, - "empty": { - "noFollowers": "Nobody is following this library" } }, "LibraryBase": { - "title": "Library", - "label": { - "private": "Private", - "instance": "Restricted", - "public": "Public", - "sharingLink": "Sharing link" - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "instance": "This library is restricted to users on this pod only", - "public": "This library is public and you can access its content freely" + "button": { + "edit": "Edit", + "upload": "Upload" }, "description": { "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." }, + "label": { + "instance": "Restricted", + "private": "Private", + "public": "Public", + "sharingLink": "Sharing link" + }, "link": { + "albums": "Albums", + "artists": "Artists", "domain": "View on {domain}", "moderation": "Open in moderation interface", "owner": "Owned by {username}", - "artists": "Artists", - "albums": "Albums", "tracks": "Tracks" }, "meta": { "tracks": "No tracks | {n} track | {n} tracks" }, - "button": { - "upload": "Upload", - "edit": "Edit" + "title": "Library", + "tooltip": { + "instance": "This library is restricted to users on this pod only", + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" } } }, "playlists": { "Detail": { - "title": "Playlist", - "meta": { - "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" + "button": { + "cancel": "Cancel", + "confirm": "Delete playlist", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "playAll": "Play all", + "stopEdit": "Stop Editing" + }, + "empty": { + "noTracks": "There are no tracks in this playlist yet" }, "header": { "tracks": "Tracks" }, - "button": { - "playAll": "Play all", - "stopEdit": "Stop Editing", - "edit": "Edit", - "embed": "Embed", - "delete": "Delete", - "cancel": "Cancel", - "confirm": "Delete playlist" + "meta": { + "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" }, "modal": { "delete": { - "header": "Do you want to delete the playlist {playlist}?", "content": { "warning": "This will completely delete this playlist and cannot be undone." - } + }, + "header": "Do you want to delete the playlist {playlist}?" }, "embed": { "header": "Embed this playlist on your website" } }, - "empty": { - "noTracks": "There are no tracks in this playlist yet" - } + "title": "Playlist" }, "List": { - "header": { - "playlists": "Playlists", - "browse": "Browsing playlists" - }, - "placeholder": { - "search": "Enter playlist nameā€¦" - }, "button": { - "manage": "Manage your playlists", "create": "Create a playlist", + "manage": "Manage your playlists", "search": "Search" }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing playlists", + "playlists": "Playlists" + }, "label": { "search": "Search" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" + "placeholder": { + "search": "Enter playlist nameā€¦" } } }, "radios": { "Detail": { - "title": "Radio", + "button": { + "confirm": "Delete radio", + "delete": "Delete", + "edit": "Editā€¦" + }, + "empty": { + "noTracks": "No tracks have been hadded to this radio yet" + }, "header": { "radio": "Radio containing {tracks} tracks, by ", "tracks": "Tracks" }, - "button": { - "edit": "Editā€¦", - "delete": "Delete", - "confirm": "Delete radio" - }, "modal": { "delete": { - "header": "Do you want to delete the radio {radio}?", "content": { "warning": "This will completely delete this radio and cannot be undone." - } + }, + "header": "Do you want to delete the radio {radio}?" } }, - "empty": { - "noTracks": "No tracks have been hadded to this radio yet" - } + "title": "Radio" } } } From bc15de7556542fa5d8d08cf9a9e04b617bf2cf4a Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 8 Dec 2023 14:02:48 +0000 Subject: [PATCH 192/371] Translated using Weblate (German) Currently translated at 98.9% (2158 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/de/ --- front/src/locales/de.json | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/front/src/locales/de.json b/front/src/locales/de.json index 119fff877..fbad781e5 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -3026,6 +3026,7 @@ "filters": { "accessedDate": "Zugriffsdatum", "albumTitle": "Albumname", + "appliedDate": "Ƅnderungsdatum", "artistName": "Name der KĆ¼nstlerĀ·in", "bitrate": "Bitrate", "creationDate": "Erstellungsdatum", @@ -3035,6 +3036,7 @@ "expirationDate": "Ablaufdatum", "firstSeen": "Erstmals gesehen", "followers": "Abonnenten", + "handledDate": "Bearbeitungsdatum", "itemsCount": "Elemente", "lastActivity": "Letzte AktivitƤt", "lastSeen": "Zuletzt gesehen am", @@ -3054,6 +3056,7 @@ "label": "Bearbeitungen" }, "favorites": { + "description": "Zugang zu den Favoriten", "label": "Favoriten" }, "filters": { @@ -3126,6 +3129,7 @@ }, "useReport": { "account": { + "label": "Melde {'@'}{username}", "typeLabel": "Konto" }, "album": { @@ -3134,7 +3138,8 @@ }, "artist": { "label": "Diese kunstschaffende Person meldenā€¦", - "typeLabel": "KĆ¼nstlerĀ·in" + "typeLabel": "KĆ¼nstlerĀ·in", + "unknownLabel": "Unbekannte*r KĆ¼nstler*in" }, "channel": { "label": "Diesen Kanal meldenā€¦", @@ -3201,9 +3206,13 @@ } }, "useErrorHandler": { + "errorReportMessage": "Damit wir die Ursache des Fehlers besser verstehen kƶnnen, fĆ¼ge bitte eine detaillierte Beschreibung des Vorgangs bei, der den Fehler ausgelƶst hat.", + "errorReportTitle": "Ein unerwarteter Fehler ist aufgetreten.", + "leaveFeedback": "Feedback hinterlassen", "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten." }, "useThemeList": { + "browserDefault": "Browser-Standard", "darkTheme": "Dunkel", "lightTheme": "Hell" } @@ -3213,6 +3222,13 @@ "rateLimitDelay": "Du hast zu viele Anfragen gesendet und bist derzeit eingeschrƤnkt. Bitte versuche es in { delay } noch einmal", "rateLimitLater": "Du hast zu viele Anfragen gesendet und bist derzeit eingeschrƤnkt. Bitte versuche es spƤter noch einmal" }, + "sentry": { + "allow": "Erlauben", + "deny": "Verweigern", + "funkwhaleInstance": "Funkwhale's offizieller Glitchtip-Server", + "message": "Die Fehlerberichte werden an { 0 } weitergegeben, damit wir besser verstehen, wie und wann die Fehler auftreten.", + "title": "Um die QualitƤt unseres Service zu verbessern, wĆ¼rden wir gerne Informationen Ć¼ber AbstĆ¼rze wƤhrend deiner Sitzung sammeln." + }, "serviceWorker": { "actions": { "later": "SpƤter", @@ -3673,7 +3689,8 @@ }, "audioContent": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{Bitrate}/s" }, "cachedSize": "Cache-GrĆ¶ĆŸe", "duration": "Dauer", @@ -3825,7 +3842,8 @@ "value": "Fehler beim Abrufen der Knoten-Information" }, "software": { - "label": "Software" + "label": "Software", + "value": "{name} ({version})" }, "totalUsers": "Gesamtanzahl der Nutzenden" } @@ -4313,6 +4331,7 @@ "currentUsage": "{ current } von { max } belegt", "errored": "Fehlgeschlagene Dateien", "pending": "Ausstehende Dateien", + "percentUsed": "{progress}%", "skipped": "Ɯbersprungene Dateien" }, "link": { @@ -4351,6 +4370,10 @@ "pending": "Ausstehende Abonnements-Anfrage", "unfollow": "Abonnement beenden" }, + "error": { + "follow": "Kann entfernter Bibliothek nicht folgen: {error}", + "unfollow": "Entfernte Bibliothek kann nicht entfolgt werden: {error}" + }, "label": { "scanFailure": "Fehler beim Durchsuchen", "scanPartialSuccess": "Scan mit Fehlern abgeschlossen", @@ -4568,12 +4591,14 @@ "Detail": { "button": { "confirm": "Radio lƶschen", + "delete": "Lƶschen", "edit": "Bearbeitenā€¦" }, "empty": { "noTracks": "Diesem Radio wurden noch keine Titel hinzugefĆ¼gt" }, "header": { + "radio": "Radio mit {tracks} Titeln, von ", "tracks": "Titel" }, "modal": { From 91b85cab46900f4e475d79708e2d03b0ded802e1 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:05:48 +0000 Subject: [PATCH 193/371] Translated using Weblate (English) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/en/ --- front/src/locales/en_US.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index 7217f55c8..7dbc16029 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -2485,7 +2485,7 @@ } }, "tooltip": { - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.", + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", "rejectMedia": "Hide account or domain content, except from followers.", "silenceActivity": "Hide account or domain content, except from followers.", From 58e2c896b28e88514ca1ccc07fe4533223caf1ef Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:09:49 +0000 Subject: [PATCH 194/371] Translated using Weblate (Catalan) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ca/ --- front/src/locales/ca.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index 909080331..47382e4b8 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Carregant..." + "loading": "Carregantā€¦" }, "components": { "About": { @@ -172,7 +172,7 @@ "next": "Pista segĆ¼ent", "pause": "Pausa", "play": "Reproduir", - "populatingRadio": "S'estĆ  recuperant la pista de rĆ dio...", + "populatingRadio": "S'estĆ  recuperant la pista de rĆ dioā€¦", "previous": "Pista anterior", "queue": "Cua de reproducciĆ³", "remove": "Retirar", @@ -1958,7 +1958,7 @@ "suggest": "Suggereix una canvi en aquesta pista" }, "message": { - "remote": " Ā·Aquest objecte Ć©s gestionat per un altre servidor, no el podeu editar." + "remote": "Aquest objecte Ć©s gestionat per un altre servidor, no el podeu editar." } }, "radios": { From 7c52227d43ea7517ad4970fbfc6a6b5504706642 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:11:12 +0000 Subject: [PATCH 195/371] Translated using Weblate (Czech) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/cs/ --- front/src/locales/cs.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front/src/locales/cs.json b/front/src/locales/cs.json index beefc4327..7e4a6bcb2 100644 --- a/front/src/locales/cs.json +++ b/front/src/locales/cs.json @@ -1,6 +1,6 @@ { "App": { - "loading": "NačƭtĆ”nĆ­..." + "loading": "NačƭtĆ”nĆ­ā€¦" }, "components": { "About": { @@ -172,7 +172,7 @@ "next": "DalÅ”Ć­ skladba", "pause": "Pozastavit", "play": "HrĆ”t", - "populatingRadio": "NačƭtĆ”nĆ­ skladby rĆ”dia...", + "populatingRadio": "NačƭtĆ”nĆ­ skladby rĆ”diaā€¦", "previous": "PředchozĆ­ skladba", "queue": "Fronta", "remove": "Odstranit", @@ -1958,7 +1958,7 @@ "suggest": "Navrhnout Ćŗpravu tĆ©to skladby" }, "message": { - "remote": " Tento objekt je spravovĆ”n jinĆ½m serverem, nemÅÆžete ho upravovat." + "remote": "Tento objekt je spravovĆ”n jinĆ½m serverem, nemÅÆžete ho upravovat." } }, "radios": { From d22a911619dbb0022077a3bc9b0badf96b9faad2 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:14:10 +0000 Subject: [PATCH 196/371] Translated using Weblate (German) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/de/ --- front/src/locales/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/de.json b/front/src/locales/de.json index fbad781e5..6d4553158 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -3035,7 +3035,7 @@ "duration": "Dauer", "expirationDate": "Ablaufdatum", "firstSeen": "Erstmals gesehen", - "followers": "Abonnenten", + "followers": "AbonnentĀ·innen", "handledDate": "Bearbeitungsdatum", "itemsCount": "Elemente", "lastActivity": "Letzte AktivitƤt", From d721a3808b91eedea11b4ccecf4f3d35c186554e Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:12:05 +0000 Subject: [PATCH 197/371] Translated using Weblate (French) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index b4c74d1a3..6c0d148fa 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -1958,7 +1958,7 @@ "suggest": "Nous ne pouvons pas charger cette piste" }, "message": { - "remote": " Cet objet est gĆ©rĆ© par un autre serveur, vous ne pouvez pas le modifier." + "remote": "Cet objet est gĆ©rĆ© par un autre serveur, vous ne pouvez pas le modifier." } }, "radios": { From bf43b95208024f88e8cd2aac6e1b482db8446e71 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:12:22 +0000 Subject: [PATCH 198/371] Translated using Weblate (Galician) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/gl/ --- front/src/locales/gl.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index c340c2c32..dba46186b 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Cargando..." + "loading": "Cargandoā€¦" }, "components": { "About": { @@ -172,7 +172,7 @@ "next": "Seguinte canciĆ³n", "pause": "Pausar", "play": "Reproducir", - "populatingRadio": "Obtendo datos da radio...", + "populatingRadio": "Obtendo datos da radioā€¦", "previous": "CanciĆ³n anterior", "queue": "Cola", "remove": "Eliminar", @@ -1958,7 +1958,7 @@ "suggest": "Non podemos cargar a canciĆ³n" }, "message": { - "remote": " Este obxecto estĆ” xestionado noutro servidor, non podes editalo." + "remote": "Este obxecto estĆ” xestionado noutro servidor, non podes editalo." } }, "radios": { @@ -2485,7 +2485,7 @@ } }, "tooltip": { - "blockAll": "Bloquear todo desta conta ou dominio. Isto evitarĆ” calquera interacciĆ³n coa entidade, e eliminarĆ” o contido relacionado (subidas, bibliotecas, seguimentos, etc.", + "blockAll": "Bloquear todo desta conta ou dominio. Isto evitarĆ” calquera interacciĆ³n coa entidade, e eliminarĆ” o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condiciĆ³n sen eliminala completamente.", "rejectMedia": "Non baixar ningĆŗn ficheiro de medios (audio, portada, avatar da contaā€¦) desta conta ou dominio. Esto eliminarĆ” tamĆ©n o contido existente.", "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", From 6fcae233dffba53dfc138a77ad4d1e5ef6a38a5b Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Sun, 10 Dec 2023 10:13:09 +0000 Subject: [PATCH 199/371] Translated using Weblate (Russian) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ru/ --- front/src/locales/ru.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front/src/locales/ru.json b/front/src/locales/ru.json index a81974ad7..229d1b8c1 100644 --- a/front/src/locales/ru.json +++ b/front/src/locales/ru.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Š—Š°Š³Ń€ŃƒŠ·ŠŗŠ°..." + "loading": "Š—Š°Š³Ń€ŃƒŠ·ŠŗŠ°ā€¦" }, "components": { "About": { @@ -172,7 +172,7 @@ "next": "Š”Š»ŠµŠ“ующŠøŠ¹ трŠµŠŗ", "pause": "ŠŸŠ°ŃƒŠ·Š°", "play": "ŠŸŃ€Š¾ŠøŠ³Ń€Š°Ń‚ŃŒ", - "populatingRadio": "ŠŸŠ¾Š»ŃƒŃ‡ŠµŠ½ŠøŠµ рŠ°Š“ŠøŠ¾ трŠµŠŗŠ°...", + "populatingRadio": "ŠŸŠ¾Š»ŃƒŃ‡ŠµŠ½ŠøŠµ рŠ°Š“ŠøŠ¾ трŠµŠŗŠ°ā€¦", "previous": "ŠŸŃ€ŠµŠ“ыŠ“ущŠøŠ¹ трŠµŠŗ", "queue": "ŠžŃ‡ŠµŃ€ŠµŠ“ь", "remove": "Š£Š“Š°Š»Šøть", @@ -1958,7 +1958,7 @@ "suggest": "ŠŸŃ€ŠµŠ“Š»Š¾Š¶ŠøтŠµ ŠæрŠ°Š²Šŗу Š“Š»Ń этŠ¾Š³Š¾ трŠµŠŗŠ°" }, "message": { - "remote": " Š­Ń‚Š¾Ń‚ Š¾Š±ŃŠŠµŠŗт уŠæрŠ°Š²Š»ŃŠµŃ‚ся Š“руŠ³ŠøŠ¼ сŠµŃ€Š²ŠµŃ€Š¾Š¼, Š’Ń‹ Š½Šµ Š¼Š¾Š¶ŠµŃ‚Šµ рŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Ń‚ŃŒ ŠµŠ³Š¾." + "remote": "Š­Ń‚Š¾Ń‚ Š¾Š±ŃŠŠµŠŗт уŠæрŠ°Š²Š»ŃŠµŃ‚ся Š“руŠ³ŠøŠ¼ сŠµŃ€Š²ŠµŃ€Š¾Š¼, Š’Ń‹ Š½Šµ Š¼Š¾Š¶ŠµŃ‚Šµ рŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Ń‚ŃŒ ŠµŠ³Š¾." } }, "radios": { From 803eb85b67e2534c017eb562b017594edf181921 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:34:08 +0000 Subject: [PATCH 200/371] Translated using Weblate (English) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/en/ --- front/src/locales/en_US.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index 7dbc16029..fdfa2e6a0 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -4383,7 +4383,7 @@ "sharingLink": "Sharing link" }, "link": { - "scan": "Scan now ", + "scan": "Scan now", "scanDetails": "Details" }, "message": { From 6ab1dc05369a123be3fffd6e3e70dd66ef340cbe Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:24:03 +0000 Subject: [PATCH 201/371] Translated using Weblate (German) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/de/ --- front/src/locales/de.json | 76 +++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/front/src/locales/de.json b/front/src/locales/de.json index 6d4553158..98ee1ae79 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -30,7 +30,7 @@ "loggedIn": "Du bist bereits eingeloggt!" }, "placeholder": { - "noDescription": "Keine Beschreibung verfĆ¼gbar." + "noDescription": "Keine Beschreibung verfĆ¼gbar" }, "stat": { "activeUsers": "{ n } aktive Person | { n } aktive Personen", @@ -74,9 +74,9 @@ }, "notApplicable": "k. A.", "placeholder": { - "noDescription": "Keine Beschreibung verfĆ¼gbar.", - "noRules": "Keine Regeln verfĆ¼gbar.", - "noTerms": "Keine Bedingungen verfĆ¼gbar." + "noDescription": "Keine Beschreibung verfĆ¼gbar", + "noRules": "Keine Regeln verfĆ¼gbar", + "noTerms": "Keine Bedingungen verfĆ¼gbar" }, "stat": { "activeUsers": "Eine aktive Person | { n } aktive Personen", @@ -121,7 +121,7 @@ "label": "Mobile Apps" }, "publicContent": { - "description": "Hƶre ƶffentliche Alben und Wiedergabelisten an, die auf diesem Pod freigegeben werden", + "description": "Hƶre ƶffentliche Alben und Wiedergabelisten an, die auf diesem Pod freigegeben werden.", "label": "Ɩffentliche Inhalte durchsuchen" }, "rules": "Serverregeln", @@ -132,7 +132,7 @@ "viewMore": "Mehr anzeigenā€¦" }, "placeholder": { - "noDescription": "Keine Beschreibung verfĆ¼gbar." + "noDescription": "Keine Beschreibung verfĆ¼gbar" }, "stat": { "activeUsers": "{ n } aktive Person | { n } aktive Personen", @@ -332,7 +332,7 @@ "save": "Speichern" }, "header": { - "error": "Fehler beim Speichern der Einstellungen", + "error": "Fehler beim Speichern der Einstellungen.", "image": "Aktuelles Bild" }, "message": { @@ -392,7 +392,7 @@ }, "ChannelForm": { "header": { - "error": "Fehler beim Speichern des Kanals" + "error": "Fehler beim Speichern des Kanals." }, "help": { "discography": "Verƶffentliche die Musik, die du machst, als schƶne Diskographie von Alben und Singles.", @@ -476,7 +476,7 @@ }, "PlayButton": { "button": { - "addToPlaylist": "Zu einer Wiedergabeliste hinzufĆ¼genā€¦", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufĆ¼gen", "addToQueue": "Zur Warteschlange hinzufĆ¼gen", "discretePlay": "Abspielen", "episodeDetails": "Details zu dieser Folge", @@ -615,7 +615,7 @@ "Modal": { "button": { "addToFavorites": "Zu den Favoriten hinzufĆ¼gen", - "addToPlaylist": "Zu einer Wiedergabeliste hinzufĆ¼genā€¦", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufĆ¼gen", "addToQueue": "Zur Warteschlange hinzufĆ¼gen", "albumDetails": "Album ansehen", "artistDetails": "KĆ¼nstlerĀ·innen ansehen", @@ -639,7 +639,7 @@ "Modal": { "button": { "addToFavorites": "Zu den Favoriten hinzufĆ¼gen", - "addToPlaylist": "Zu einer Wiedergabeliste hinzufĆ¼genā€¦", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufĆ¼gen", "addToQueue": "Zur Warteschlange hinzufĆ¼gen", "albumDetails": "Album ansehen", "artistDetails": "KĆ¼nstlerĀ·innen ansehen", @@ -746,7 +746,7 @@ "writeOnly": "Nur schreiben" }, "help": { - "copyCode": "Dir wird ein Code angezeigt, der du in die Anwendung einfĆ¼gen musst.", + "copyCode": "Dir wird ein Code angezeigt, der du in die Anwendung einfĆ¼gen musst", "pasteCode": "Kopiere den folgenden Code in die Anwendung:", "redirect": "Du wirst zu { 0 } weitergeleitet" }, @@ -771,7 +771,7 @@ "username": "Benutzername oder E-Mail-Adresse" }, "link": { - "createAccount": "Konto erstellen", + "createAccount": "Erstelle ein Konto", "resetPassword": "Kennwort zurĆ¼cksetzen" }, "message": { @@ -856,7 +856,7 @@ "deleteAccount": "Mein Konto lƶschen", "emailFailure": "Deine E-Mail-Adresse kann nicht geƤndert werden", "hiddenArtists": "Verborgene KĆ¼nstlerĀ·innen", - "noApps": "Du hast keine aktiven Moderationsregeln fĆ¼r dieses Konto.", + "noApps": "Aktuell ist keine Anwendung mit deinem Konto verbunden.", "noPersonalApps": "Du hast bisher keine Anwendung registriert.", "passwordFailure": "Dein Kennwort kann nicht geƤndert werden", "plugins": "Plugins", @@ -882,14 +882,14 @@ }, "message": { "confirmDelete": "Dein Lƶschungsantrag wurde eingereicht. Dein Konto und deine Inhalte werden in KĆ¼rze gelƶscht", - "currentEmail": "Deine aktuelle E-Mail-Adresse lautet { email }." + "currentEmail": "Deine aktuelle E-Mail-Adresse lautet {email}" }, "modal": { "changePassword": { "content": { "logout": "Du wirst von dieser Sitzung abgemeldet und du musst dich mit deinem neuen Kennwort anmelden", "subsonic": "Dein Subsonic-Kennwort wird mit einem neuen zufƤlligen Kennwort ersetzt. Du wirst auf allen aktuell verbundenen GerƤten abgemeldet, die noch das alte Kennwort nutzen", - "warning": "Wenn du dein Kennwort Ƥnderst, hat dies folgende Auswirkungen:" + "warning": "Wenn du dein Kennwort Ƥnderst, hat dies folgende Auswirkungen" }, "header": "Mƶchtest du dein Kennwort Ƥndern?" }, @@ -1098,7 +1098,7 @@ "label": { "description": "Beschreibung", "image": "Titelbild", - "position": "Seitennummerierung", + "position": "Position", "tags": "Schlagwƶrter", "title": "Titel" } @@ -1121,7 +1121,7 @@ }, "meta": { "files": "{ n } Datei | { n } Dateien", - "quota": "Verbleibender Speicherplatz:" + "quota": "Verbleibender Speicherplatz: {space}" } } }, @@ -1129,7 +1129,7 @@ "ActionTable": { "button": { "allSelected": "Einziges Element ausgewƤhlt | Alle { count } Elemente ausgewƤhlt", - "go": "Los!", + "go": "Los", "launch": "Starten", "refresh": "Tabelleninhalt aktualisieren", "select": "AuswƤhlen", @@ -1187,10 +1187,10 @@ "write": "Schreiben" }, "empty": { - "noContent": "Es gibt nichts zum vorzeigen." + "noContent": "Es ist keine Vorschau verfĆ¼gbar" }, "help": { - "markdown": "Markdown-Syntax wird unterstĆ¼tzt." + "markdown": "Markdown-Syntax wird unterstĆ¼tzt" }, "placeholder": { "input": "Schreibe hier ein paar Worteā€¦" @@ -1246,7 +1246,7 @@ }, "LoginModal": { "description": { - "noAccess": "Du bist nicht zugriffsberechtigt!" + "noAccess": "Du hast keinen Zugriff" }, "header": { "unauthenticated": "Unauthorisiert" @@ -1451,7 +1451,7 @@ "AlbumDropdown": { "button": { "cancel": "Abbrechen", - "delete": "Lƶschenā€¦", + "delete": "Lƶschen", "edit": "Bearbeiten", "embed": "Einbetten", "more": "Mehrā€¦" @@ -1535,7 +1535,7 @@ }, "meta": { "albums": "{ n } Alben | { n } Alben", - "tracks": "{ n } Titel in | { n } Titel in " + "tracks": "0 Titel in | {count} Titel in | {count} Titel in" }, "modal": { "embed": { @@ -1654,7 +1654,7 @@ "suggest": "Empfehlung abschicken" }, "empty": { - "suggestEdit": "Schlage eine Ƅnderung mit dem untenstehenden Formular vor." + "suggestEdit": "Schlage eine Ƅnderung mit dem untenstehenden Formular vor" }, "header": { "failure": "Fehler beim Speichern der Ƅnderungen", @@ -1679,7 +1679,7 @@ "retry": "Fehlgeschlagene Uploads wiederholen" }, "description": { - "import": "Import-Ergebnisse:", + "import": "Import Status", "previousImport": "Ergebnisse des letzten Imports:" }, "empty": { @@ -1884,7 +1884,7 @@ "TrackBase": { "button": { "cancel": "Abbrechen", - "delete": "Lƶschenā€¦", + "delete": "Lƶschen", "download": "Herunterladen", "edit": "Bearbeiten", "embed": "Einbetten", @@ -2479,7 +2479,7 @@ "modal": { "delete": { "content": { - "warning": "Dieser Vorgang ist unwiderruflich." + "warning": "Diese Aktion kann nicht rĆ¼ckgƤngig gemacht werden" }, "header": "Diese Moderationsregel lƶschen?" } @@ -2772,7 +2772,7 @@ "email": "Wir werden diese E-Mail-Adresse verwenden, wenn wir Dich bezĆ¼glich Deines Berichts kontaktieren mĆ¼ssen.", "forwardToDomain": "Leite eine anonymisierte Kopie deines Berichts an den Server weiter, auf dem sich dieses Element befindet.", "message": "Verwende dieses Feld, um dem Moderationsteam zusƤtzlichen Kontext bereitzustellen.", - "modal": "Mithilfe dieses Formulars kannst du einen Bericht an unser Moderationsteam senden." + "modal": "Nutze dieses Formular fĆ¼r eine Meldung an das Moderationsteam" }, "error": { "nodeinfoFetch": "Informationen Ć¼ber diese Instanz kƶnnen nicht abgerufen werden: {error}" @@ -3123,7 +3123,7 @@ "track": { "copyright": "Urheberrecht", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" } }, @@ -3197,7 +3197,7 @@ "copyright": "Urheberrecht", "label": "Titel", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" }, "visibility": { @@ -3244,7 +3244,7 @@ "submit": "Verstanden!" }, "empty": { - "notifications": "Keine Benachrichtigungen zum Anzeigen." + "notifications": "Es gibt keine neuen Benachrichtigungen" }, "header": { "funkwhaleSupport": "Magst du Funkwhale?", @@ -3640,7 +3640,7 @@ "description": "Beschreibung", "discNumber": "CD-Nummer", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" }, "trackData": { @@ -3709,7 +3709,7 @@ "addPolicy": "Moderationsregel hinzufĆ¼gen" }, "description": { - "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert" }, "header": { "accountData": "KontoĆ¼bersicht", @@ -3797,7 +3797,7 @@ "removeFromAllowList": "Aus der Zulassungsliste entfernen" }, "description": { - "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert" }, "header": { "activePolicy": "FĆ¼r diese Domain gelten besondere Moderationsregeln", @@ -3919,7 +3919,7 @@ "label": "Sortieren nach" }, "placeholder": { - "search": "Nach Nutzername suchenā€¦" + "search": "Nach Benutzernamen suchen" }, "title": "Nutzeranfragen" } @@ -3956,7 +3956,7 @@ "login": "Weiter zum Anmelden" }, "message": { - "success": "Du kannst jetzt den Service unbegrenzt nutzen." + "success": "Du kannst jetzt den Service unbegrenzt nutzen" }, "title": "E-Mail-Adresse bestƤtigen" }, @@ -4145,7 +4145,7 @@ "processing": "Deine Uploads werden von Funkwhale verarbeitet und sehr bald abrufbar sein." }, "meta": { - "progress": "Verarbeitete Uploads:" + "progress": "Verarbeitete Uploads: {finished}/{total}" } }, "SubscriptionsList": { From 517d99f9bf49a68a45dd798dceda888787cf18f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Mon, 11 Dec 2023 09:34:27 +0000 Subject: [PATCH 202/371] Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/en_GB/ --- front/src/locales/en_GB.json | 8410 +++++++++++++++++----------------- 1 file changed, 4240 insertions(+), 4170 deletions(-) diff --git a/front/src/locales/en_GB.json b/front/src/locales/en_GB.json index 813562fb0..7dfb9d60f 100644 --- a/front/src/locales/en_GB.json +++ b/front/src/locales/en_GB.json @@ -1,1459 +1,66 @@ { + "App": { + "loading": "Loadingā€¦" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{app_name} wants to access your Funkwhale account", - "authorize": "Authorise third-party app", - "authorizeFailure": "Error while fetching application data", - "fetchFailure": "Error while fetching application data", - "allScopes": "Full access", - "readOnly": "Read-only", - "writeOnly": "Write-only" - }, - "title": "Allow application", - "button": { - "authorize": "Authorize {app}" - }, - "help": { - "pasteCode": "Copy-paste the following code in the application:", - "redirect": "You will be redirected to { 0 }", - "copyCode": "You will be shown a code to copy-paste in the application" - }, - "message": { - "unknownPermissions": "The application is also requesting the following unknown permissions:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Access disabled", - "passwordUpdated": "Password updated", - "unavailable": "The Subsonic API is not available on this Funkwhale instance." - }, - "button": { - "confirmDisable": "Disable access", - "disable": "Disable Subsonic access", - "newPassword": "Request a new password", - "confirmNewPassword": "Request a password" - }, - "modal": { - "disableSubsonic": { - "header": "Disable Subsonic API access?", - "content": { - "warning": "This will completely disable access to the Subsonic API using from account." - } - }, - "newPassword": { - "header": "Request a new Subsonic API password?", - "content": { - "warning": "This will log you out from existing devices that use the current password." - } - } - }, - "link": { - "apps": "Discover how to use Funkwhale from other apps" - }, - "header": { - "error": "Error", - "subsonic": "Subsonic API password" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale is compatible with other music players that support the Subsonic API.", - "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below.", - "paragraph2": "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." - } - }, - "label": { - "subsonicField": "Your subsonic API password" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Access token", - "appId": "Application ID", - "appSecret": "Application secret" - }, - "header": { - "appDetails": "Application Details", - "editApp": "Edit application", - "appSecretWarning": "Keep a copy of this token in a safe place." - }, - "help": { - "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." - }, - "link": { - "settings": "Back to settings" - }, - "title": "Edit application", - "button": { - "regenerateToken": "Regenerate token" - }, - "message": { - "appSecretWarning": "You won't be able to see it again once you leave this screen." - } - }, - "Settings": { - "title": "Account Settings", - "header": { - "accountSettings": "Account settings", - "authorizedApps": "Authorised apps", - "avatar": "Avatar", - "changeEmail": "Change my e-mail address", - "changePassword": "Change my password", - "contentFilters": "Content filters", - "deleteAccount": "Delete my account", - "hiddenArtists": "Hidden artists", - "plugins": "Plugins", - "settingsUpdated": "Settings updated", - "emailFailure": "We cannot change your e-mail address", - "accountFailure": "We cannot delete your account", - "noApps": "You don't have any application connected with your account.", - "noPersonalApps": "You don't have registered any application yet.", - "yourApps": "Your applications", - "avatarFailure": "Your avatar cannot be saved", - "passwordFailure": "Your password cannot be changed", - "updateFailure": "Your settings can't be updated" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Application", - "permissions": "Permissions" - } - }, - "yourApps": { - "header": { - "application": "Application", - "creationDate": "Creation date", - "scopes": "Scopes" - } - }, - "artists": { - "header": { - "creationDate": "Creation date", - "name": "Name" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Current password", - "newEmail": "New e-mail address", - "newPassword": "New password", - "password": "Password" - }, - "button": { - "password": "Change password", - "delete": "Delete", - "deleteAccountConfirm": "Delete my account", - "deleteAccount": "Delete my accountā€¦", - "disableSubsonic": "Disable access", - "edit": "Edit", - "refresh": "Refresh", - "remove": "Remove", - "removeApp": "Remove application", - "revoke": "Revoke", - "revokeAccess": "Revoke access", - "update": "Update", - "updateSettings": "Update settings" - }, - "description": { - "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", - "changePassword": { - "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", - "paragraph2": "You will have to update your password on your clients that use this password." - }, - "contentFilters": "Content filters help you hide content you don't want to see on the service.", - "authorizedApps": "This is the list of applications that have access to your account data.", - "yourApps": "This is the list of applications that you have registered.", - "plugins": "Use plugins to extend Funkwhale and get additional features.", - "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." - }, - "modal": { - "changePassword": { - "header": "Change your password?", - "content": { - "warning": "Changing your password will have the following consequences", - "logout": "You will be logged out from this session and have to log in with the new one", - "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" - } - }, - "deleteAccount": { - "header": "Do you want to delete your account?", - "content": { - "warning": "This is irreversible and will permanently remove your data from our servers. You will be immediately logged out." - } - }, - "deleteApp": { - "header": "Remove application {app}?", - "content": { - "warning": "This will permanently remove the application and all the associated tokens." - } - }, - "revokeApp": { - "header": "Revoke access for application {app}?", - "content": { - "warning": "This will prevent this application from accessing the service on your behalf." - } - } - }, - "help": { - "noApps": "If you authorise third-party applications to access your data, those applications will be listed here.", - "changePassword": "Please double-check your password is correct", - "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." - }, - "link": { - "managePlugins": "Manage plugins", - "newApp": "Register a new application" - }, - "warning": { - "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." - }, - "message": { - "currentEmail": "Your current e-mail address is {email}", - "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly" - } - }, - "Logout": { - "header": { - "confirm": "Are you sure you want to log out?", - "unauthenticated": "You aren't currently logged in" - }, - "link": { - "login": "Log in!" - }, - "title": "Log out", - "button": { - "logout": "Yes, log me out!" - }, - "message": { - "loggedIn": "You are currently logged in as {username}" - } - }, - "ApplicationNew": { - "link": { - "settings": "Back to settings" - }, - "title": "Create a new application" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", - "read": { - "label": "Read", - "description": "Read-only access to user data" - }, - "write": { - "label": "Write", - "description": "Write-only access to user data" - }, - "label": "Scopes" - }, - "name": "Name", - "redirectUri": "Redirect URI" - }, - "button": { - "create": "Create application", - "update": "Update application" - }, - "help": { - "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." - }, - "header": { - "failure": "We cannot save your changes" - } - }, - "LoginForm": { - "link": { - "createAccount": "Create an account", - "resetPassword": "Reset your password" - }, - "placeholder": { - "username": "Enter your username or e-mail address" - }, - "help": { - "approvalRequired": "If you signed-up recently, you may need to wait before our moderation team review your account, or verify your e-mail address.", - "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." - }, - "button": { - "login": "Login" - }, - "label": { - "password": "Password", - "username": "Username or e-mail address" - }, - "header": { - "loginFailure": "We cannot log you in" - }, - "message": { - "redirect": "You will be redirected to {domain} to authenticate" - } - }, - "SignupForm": { - "button": { - "create": "Create my account" - }, - "label": { - "email": "E-mail address", - "password": "Password", - "username": "Username", - "invitation": "Invitation code" - }, - "placeholder": { - "email": "Enter your e-mail address", - "invitation": "Enter your invitation code (case insensitive)", - "username": "Enter your username" - }, - "header": { - "login": "Log in to your Funkwhale account", - "signupFailure": "Your account cannot be created." - }, - "message": { - "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", - "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval.", - "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", - "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login." - } - }, - "Plugin": { - "link": { - "documentation": "Documentation" - }, - "label": { - "pluginEnabled": "Enabled", - "library": "Library" - }, - "header": { - "failure": "Error while saving plugin" - }, - "description": { - "library": "Library where files should be imported." - }, - "button": { - "save": "Save", - "scan": "Scan" - } - } - }, "About": { - "stat": { - "activeUsers": "No active users | {n} active user | {n} active users", - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" + "description": { + "findApp": "Use Funkwhale on other devices with our apps.", + "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralised, open network.", + "publicContent": "Listen to public albums and playlists shared on this pod.", + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!" }, "header": { - "funkwhale": "A social platform to enjoy and share music", "aboutPod": "About this pod", - "publicContent": "Browse public content", "findApp": "Find an app", + "funkwhale": "A social platform to enjoy and share music", + "publicContent": "Browse public content", "signup": "Sign up" }, - "title": "About", + "help": { + "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, "link": { "findOtherPod": "Find another pod", "learnMore": "Learn more" }, - "description": { - "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralised, open network.", - "publicContent": "Listen to public albums and playlists shared on this pod.", - "signup": "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!", - "findApp": "Use Funkwhale on other devices with our apps.", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!" + "message": { + "greeting": "Hello {username}", + "loggedIn": "You're already signed in!" }, "placeholder": { "noDescription": "No description available" }, - "message": { - "loggedIn": "You're already signed in!", - "greeting": "Hello {username}" - }, - "help": { - "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." - } - }, - "Home": { "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "header": { - "aboutFunkwhale": "About Funkwhale", - "about": "About this Funkwhale pod", - "contact": "Contact", - "login": "Log in", - "newChannels": "New channels", - "newAlbums": "Recently added albums", - "signup": "Sign up", - "statistics": "Statistics", - "links": "Useful links", - "welcome": "Welcome to {podName}!" - }, - "link": { - "publicContent": { - "label": "Browse public content", - "description": "Listen to public albums and playlists shared on this pod." - }, - "userGuides": { - "description": "Discover everything you need to know about Funkwhale and its features", - "label": "User guides" - }, - "findOtherPod": "Find another pod", - "learnMore": "Learn more", - "mobileApps": { - "label": "Mobile apps", - "description": "Use Funkwhale on other devices with our apps" - }, - "rules": "Server rules", - "viewMore": "View moreā€¦", - "funkwhale": "Visit funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers.", - "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network." - }, - "signup": "Sign up now to keep track of your favourites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!" - }, - "title": "Home", - "placeholder": { - "noDescription": "No description available" - }, - "help": { - "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks" - } - }, - "Widget": { - "button": { - "more": "Show more" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks" - }, - "title": "Updated on {date}" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - } - }, - "Widget": { - "button": { - "more": "Show more" - } - } - }, - "Player": { - "meta": { - "position": "{index} of {length}" - }, - "header": { - "player": "Audio player and controls" - }, - "label": { - "clearQueue": "Clear your queue", - "expandQueue": "Expand queue", - "addArtistContentFilter": "Hide content from this artistā€¦", - "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", - "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", - "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", - "audioPlayer": "Media player", - "mute": "Mute", - "nextTrack": "Next track", - "pause": "Pause", - "play": "Play", - "previousTrack": "Previous track", - "shuffleQueue": "Shuffle your queue", - "unmute": "Unmute" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Add to current queue", - "addToPlaylist": "Add to playlist", - "episodeDetails": "Episode details", - "hideArtist": "Hide content from this artist", - "discretePlay": "Play", - "playAlbum": "Play album", - "playArtist": "Play artist", - "playNext": "Play next", - "playNow": "Play now", - "playPlaylist": "Play playlist", - "startRadio": "Play similar songs", - "playTrack": "Play track", - "playTracks": "Play tracks", - "report": "Reportā€¦", - "trackDetails": "Track details" - }, - "title": { - "more": "Moreā€¦", - "unavailable": "This track is not available in any library you have access to" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Add to favourites", - "addToPlaylist": "Add to playlist", - "addToQueue": "Add to queue", - "episodeDetails": "Episode details", - "playNext": "Play next", - "playNow": "Play now", - "startRadio": "Play radio", - "removeFromFavorites": "Remove from favourites", - "trackDetails": "Track details", - "albumDetails": "View album", - "artistDetails": "View artist", - "channelDetails": "View channel", - "seriesDetails": "View series" - } - }, - "MobileRow": { - "button": { - "actions": "Show track actions" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Add to favourites", - "addToPlaylist": "Add to playlist", - "addToQueue": "Add to queue", - "episodeDetails": "Episode details", - "playNext": "Play next", - "playNow": "Play now", - "startRadio": "Play radio", - "removeFromFavorites": "Remove from favourites", - "trackDetails": "Track details", - "albumDetails": "View album", - "artistDetails": "View artist", - "channelDetails": "View channel", - "seriesDetails": "View series" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artist", - "title": "Title" - } - } - }, - "Widget": { - "empty": { - "noResults": "Nothing found" - }, - "button": { - "more": "Show more" - } - }, - "MobileRow": { - "button": { - "actions": "Show track actions" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Adjust volume" - }, - "button": { - "mute": "Mute", - "unmute": "Unmute" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artist", - "category": { - "federation": "Federation", - "podcasts": "Podcasts" - }, - "search": "Search for content", - "tag": "Tag", - "track": "Track" - }, - "link": { - "more": "More results šŸ”’", - "fediverse": "Search on the fediverse", - "rss": "Subscribe to podcast via RSS" - }, - "header": { - "noResults": "No matches found" - }, - "placeholder": { - "search": "Search for artists, albums, tracksā€¦" - }, - "empty": { - "noResults": "Sorry, there are no results for this search" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artists", - "search": "Search for some music" - }, - "placeholder": { - "search": "Artist, album, trackā€¦" - }, - "empty": { - "noAlbums": "No album matched your query", - "noArtists": "No artist matched your query" - } - }, - "ChannelForm": { - "label": { - "discography": "Artist Discography", - "category": "Category", - "image": "Channel Picture", - "description": "Description", - "username": "Fediverse handle", - "language": "Language", - "name": "Name", - "email": "Owner e-mail address", - "owner": "Owner name", - "podcast": "Podcasts", - "subcategory": "Subcategory", - "tags": "Tags" - }, - "placeholder": { - "name": "Awesome channel name", - "username": "awesomechannelname" - }, - "header": { - "error": "Error while saving channel." - }, - "help": { - "podcast": "Host your episodes and keep your community updated.", - "discography": "Publish music you make as a nice discography of albums and singles.", - "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", - "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." - }, - "loader": { - "loading": "Loading" - }, - "legend": { - "purpose": "What will this channel be used for?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Cancel follow request", - "follow": "Follow", - "unfollow": "Unfollow" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copy" - }, - "help": { - "embed": "Copy/paste this code in your website HTML", - "width": "Leave empty for a responsive widget", - "anonymous": "Please contact your admins and ask them to update the corresponding setting." - }, - "label": { - "embed": "Embed code", - "height": "Widget height", - "width": "Widget width" - }, - "header": { - "preview": "Preview" - }, - "warning": { - "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." - }, - "message": { - "copy": "Text copied to clipboard!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Show more" - }, - "help": { - "subscribe": "You may need to subscribe to this channel to see its contents." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Show more" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "You may need to subscribe to this channel to see its content." - } - }, - "PlayerControls": { - "labels": { - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play" - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episode | { n } episodes", - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "addDescription": "Add a descriptionā€¦" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } track in | { n } tracks in", - "albums": "{ n } album | { n } albums" - }, - "title": "Artist", - "button": { - "cancel": "Cancel", - "edit": "Edit", - "embed": "Embed", - "more": "Moreā€¦", - "play": "Play all albums" - }, - "modal": { - "embed": { - "header": "Embed this artist work on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "wikipedia": "Search on Wikipedia", - "django": "View in Django's admin", - "domain": "View on { domain }", - "musicbrainz": "View on MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } track matching combined filters | { n } tracks matching combined filters", - "builder": "Builder", - "created": "Radio created", - "updated": "Radio updated" - }, - "table": { - "filter": { - "header": { - "actions": "Actions", - "candidates": "Candidates", - "config": "Config", - "exclude": "Exclude", - "name": "Filter name" - } - } - }, - "button": { - "filter": "Add filter", - "save": "Save" - }, - "label": { - "filter": "Add filters to customise your radio", - "description": "Description", - "public": "Display publicly", - "name": "Radio name" - }, - "placeholder": { - "description": "My awesome description", - "name": "My awesome radio" - }, - "title": "Radio Builder", - "option": { - "filter": "Select a filter" - }, - "description": { - "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." - } - }, - "Filter": { - "cancelButton": "Cancel", - "excludeLabel": "Exclude", - "removeButton": "Remove", - "matchingTracksModalHeader": "Tracks matching filter" - } - }, - "FileUpload": { - "tooltip": { - "network": "A network error occurred while uploading this file", - "size": "Cannot upload this file, ensure it is not too big", - "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are { extensions }", - "retry": "Retry", - "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", - "timeout": "Upload timeout, please try again" - }, - "table": { - "upload": { - "header": { - "actions": "Actions", - "filename": "Filename", - "size": "Size", - "status": "Status" - }, - "status": { - "pending": "Pending", - "uploaded": "Uploaded", - "uploading": "Uploadingā€¦" - } - } - }, - "button": { - "cancel": "Cancel", - "retry": "Retry failed uploads" - }, - "label": { - "uploadWidget": "Click to select files to upload or drag and drop files or directories", - "remainingSpace": "Remaining storage space", - "extensions": "Supported extensions: { extensions }" - }, - "header": { - "failure": "Error while launching import", - "server": "Import status", - "status": "Import status", - "local": "Upload music from your local storage" - }, - "link": { - "processing": "Processing", - "uploading": "Uploading", - "picard": "We recommend using Picard for that purpose." - }, - "description": { - "import": "Results of your import:", - "previousImport": "Results of your previous import:" - }, - "message": { - "local": { - "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", - "tag": "The music files you are uploading are tagged properly.", - "message": "You are about to upload music to your library. Before proceeding, please ensure that:", - "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "A short summary describing your changes." - }, - "button": { - "cancel": "Cancel", - "clear": "Clear", - "reset": "Reset to initial value", - "showUnreviewed": "Restrict to unreviewed edits", - "showAll": "Show all edits", - "submit": "Submit and apply edit", - "new": "Submit another edit", - "suggest": "Submit suggestion" - }, - "header": { - "failure": "Error while submitting edit", - "recentEdits": "Recent edits", - "unreviewed": "Recent edits awaiting review", - "success": "Your edit was successfully submitted." - }, - "notApplicable": "N/A", - "empty": { - "suggestEdit": "Suggest a change using the form below." - }, - "label": { - "summary": "Summary (optional)" - }, - "message": { - "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." - } - }, - "Albums": { - "link": { - "addMusic": "Add some music" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing albums" - }, - "placeholder": { - "search": "Enter album titleā€¦" - }, - "empty": { - "noResults": "No results matching your query" - }, - "pagination": { - "results": "Results per page" - }, - "label": { - "search": "Search", - "tags": "Tags" - }, - "button": { - "search": "Search" - } - }, - "Artists": { - "button": { - "upload": "Add some music", - "search": "Search" - }, - "label": { - "search": "Artist name", - "excludeCompilation": "Exclude Compilation Artists", - "tags": "Tags" - }, - "title": "Artists", - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing artists" - }, - "empty": { - "noResults": "No results matching your query" - }, - "pagination": { - "results": "Results per page" - }, - "placeholder": { - "search": "Searchā€¦" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artist", - "copyright": "Copyright", - "license": "License", - "series": "Series", - "url": "URL", - "year": "Year" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Downloads", - "duration": "Duration", - "size": "Size" - } - }, - "header": { - "episode": "Episode Details", - "library": "Related Libraries", - "playlists": "Related Playlists", - "release": "Release Details", - "track": "Track Details" - }, - "notApplicable": "N/A", - "description": { - "library": "This track is present in the following libraries:" - }, - "link": { - "musicbrainz": "View on MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artists", - "moderation": "Open in moderation interface" - }, - "header": { - "channels": "Channels", - "tracks": "Tracks" - } - }, - "ArtistDetail": { - "header": { - "album": "Albums by this artist", - "track": "New tracks by this artist", - "library": "User libraries" - }, - "button": { - "more": "Load moreā€¦", - "filter": "Remove filter" - }, - "link": { - "filter": "Review my filters" - }, - "description": { - "library": "This artist is present in the following libraries:" - }, - "message": { - "filter": "You are currently hiding content related to this artist." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "An error occurred during upload processing. You will find more information below.", - "unknownError": { - "message": "An unknown error occurred", - "label": "Unknown error" - }, - "invalidMetadata": { - "label": "Invalid metadata", - "message": "The metadata included in the file is invalid or some mandatory fields are missing." - } - }, - "button": { - "close": "Close" - }, - "table": { - "error": { - "debug": "Debug information", - "errorDetail": "Error detail", - "errorType": "Error type", - "help": "Getting help" - } - }, - "header": { - "importDetail": "Import detail" - }, - "link": { - "support": "Open a support thread (include the debug information below in your message)", - "documentation": "Read our documentation for this error" - }, - "message": { - "importDetail": "Upload is still pending and will soon be processed by the server.", - "importSuccess": "Upload was successfully processed by the server." - }, - "warning": { - "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." - } - }, - "EditCard": { - "button": { - "approve": "Approve", - "delete": "Delete", - "reject": "Reject" - }, - "status": { - "approved": "Approved", - "applied": "Approved and applied", - "pending": "Pending review", - "rejected": "Rejected" - }, - "modal": { - "delete": { - "header": "Delete this suggestion?" - }, - "content": { - "warning": "The suggestion will be completely removed, this action is irreversible." - } - }, - "table": { - "update": { - "header": { - "field": "Field", - "newValue": "New value", - "oldValue": "Old value" - }, - "notApplicable": "N/A" - } - }, - "header": { - "modification": "Modification { id }" - }, - "link": { - "track": "Track #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing podcasts" - }, - "button": { - "cancel": "Cancel", - "channel": "Create a Channel", - "search": "Search", - "subscribe": "Subscribe", - "feed": "Subscribe to feed" - }, - "empty": { - "noResults": "No results matching your query" - }, - "label": { - "search": "Podcast title", - "tags": "Tags" - }, - "title": "Podcasts", - "pagination": { - "results": "Results per page" - }, - "placeholder": { - "search": "Searchā€¦" - }, - "modal": { - "subscription": { - "header": "Subscription" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing radios", - "instance": "Instance radios", - "user": "User radios" - }, - "button": { - "add": "Create a radio", - "create": "Create your own radio" - }, - "placeholder": { - "search": "Enter a radio nameā€¦" - }, - "empty": { - "noResults": "No results matching your query" - }, - "title": "Radios", - "pagination": { - "results": "Results per page" - }, - "label": { - "search": "Search" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Cancel", - "delete": "Deleteā€¦", - "edit": "Edit", - "embed": "Embed", - "more": "Moreā€¦" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this album on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "django": "View in Django's admin", - "domain": "View on { domain }", - "musicbrainz": "View on MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Cancel", - "delete": "Deleteā€¦", - "download": "Download", - "edit": "Edit", - "embed": "Embed", - "more": "Moreā€¦", - "play": "Play" - }, - "modal": { - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this track on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "wikipedia": "Search on Wikipedia", - "django": "View in Django's admin", - "domain": "View on { domain }" - }, - "title": "Track" - }, - "AlbumEdit": { - "header": { - "edit": "Edit this album", - "suggest": "Suggest an edit on this album" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "ArtistEdit": { - "header": { - "edit": "Edit this artist", - "suggest": "Suggest an edit on this artist" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "TrackEdit": { - "header": { - "edit": "Edit this track", - "suggest": "Suggest an edit on this track" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodes", - "tracks": "Tracks", - "libraries": "User libraries" - }, - "description": { - "libraries": "This album is present in the following libraries:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Import" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Import hasn't started yet" - } - }, - "Home": { - "title": "Library", - "header": { - "newChannels": "New channels", - "playlists": "Playlists", - "recentlyAdded": "Recently added", - "recentlyFavorited": "Recently favourited", - "recentlyListened": "Recently listened" - } - }, - "TagSelector": { - "placeholder": { - "search": "Searchā€¦" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favourite | { n } favourites" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "link": { - "library": "Browse the library" - }, - "loader": { - "loading": "Loading your favouritesā€¦" - }, - "empty": { - "noFavorites": "No tracks have been added to your favourites yet" - }, - "pagination": { - "results": "Results per page" - }, - "title": "Your Favourites" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Add to favourites", - "remove": "Remove from favourites" - }, - "label": { - "inFavorites": "In favourites" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "no files | {n} file | {n} files", - "quota": "Remaining storage space: {space}" - }, - "button": { - "cancel": "Cancel", - "close": "Close", - "finishLater": "Finish later", - "next": "Next step", - "previous": "Previous step", - "publish": "Publish", - "update": "Update" - }, - "header": { - "uploadFiles": "Files to upload", - "processing": "Processing uploads", - "publish": "Publish audio", - "uploadDetails": "Upload details" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - }, - "label": { - "album": "Album", - "series": "Series" - }, - "option": { - "none": "None" - } - }, - "LicenseSelect": { - "link": { - "license": "About this licence" - }, - "label": { - "license": "Licence" - }, - "option": { - "none": "None" - } - }, - "UploadForm": { - "help": { - "license": "Add a licence to your upload to ensure some freedoms to your public." - }, - "label": { - "openBrowser": "Browseā€¦", - "channel": "Channel" - }, - "message": { - "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", - "pending": "You have some draft uploads pending publication." - }, - "button": { - "edit": "Edit", - "ignore": "Ignore", - "remove": "Remove", - "resume": "Resume", - "retry": "Retry" - }, - "header": { - "error": "Error while publishing" - }, - "status": { - "errored": "Errored", - "pending": "Pending", - "uploading": "Uploading" - }, - "description": { - "extensions": "Supported extensions {extensions}" - }, - "warning": { - "quota": "You don't have any space left to upload your files. Please contact the moderators." - } - }, - "AlbumModal": { - "button": { - "cancel": "Cancel", - "create": "Create" - }, - "header": { - "newAlbum": "New album", - "newSeries": "New series" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Description", - "position": "Position", - "tags": "Tags", - "title": "Title", - "image": "Track Picture" - } - }, - "AlbumForm": { - "header": { - "error": "Error while creating" - }, - "label": { - "albumTitle": "Title" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Subscribe", - "unsubscribe": "Unsubscribe" - }, - "help": { - "auth": "You need to be logged in to subscribe to this channel" - } - } + "title": "About" }, "AboutPod": { - "stat": { - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", - "activeUsers": "No active users | {n} active user | {n} active users", - "albumsCount": "0 albums | {n} album | {n} albums", - "artistsCount": "0 artists | {n} artist | {n} artists", - "listeningsCount": "0 listenings | {n} listening | {n} listenings", - "tracksCount": "0 tracks | {n} track | {n} tracks" + "feature": { + "allowList": "Allow-list", + "anonymousAccess": "Anonymous access", + "federation": "Federation", + "quota": "Upload quota", + "registrations": "Registrations", + "status": { + "closed": "Closed", + "disabled": "Disabled", + "enabled": "Enabled", + "open": "Open" + }, + "version": "Funkwhale version" + }, + "header": { + "about": "About this pod", + "contact": "Contact", + "features": "Features", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" }, - "title": "About", "link": { "about": "About this pod", "features": "Features", @@ -1462,27 +69,8 @@ "statistics": "Statistics", "terms": "Terms and privacy policy" }, - "header": { - "about": "About this pod", - "contact": "Contact", - "features": "Features", - "rules": "Rules", - "statistics": "Statistics", - "terms": "Terms and privacy policy" - }, - "feature": { - "allowList": "Allow-list", - "anonymousAccess": "Anonymous access", - "status": { - "closed": "Closed", - "disabled": "Disabled", - "enabled": "Enabled", - "open": "Open" - }, - "federation": "Federation", - "version": "Funkwhale version", - "registrations": "Registrations", - "quota": "Upload quota" + "message": { + "contact": "Send us an email: { contactEmail }" }, "notApplicable": "N/A", "placeholder": { @@ -1490,332 +78,233 @@ "noRules": "No rules available", "noTerms": "No terms available" }, + "stat": { + "activeUsers": "No active users | {n} active user | {n} active users", + "albumsCount": "0 albums | {n} album | {n} albums", + "artistsCount": "0 artists | {n} artist | {n} artists", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", + "listeningsCount": "0 listenings | {n} listening | {n} listenings", + "tracksCount": "0 tracks | {n} track | {n} tracks" + }, + "title": "About" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network.", + "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers." + }, + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep track of your favourites, create playlists, discover new content and much more!" + }, + "header": { + "about": "About this Funkwhale pod", + "aboutFunkwhale": "About Funkwhale", + "contact": "Contact", + "links": "Useful links", + "login": "Log in", + "newAlbums": "Recently added albums", + "newChannels": "New channels", + "signup": "Sign up", + "statistics": "Statistics", + "welcome": "Welcome to {podName}!" + }, + "help": { + "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "funkwhale": "Visit funkwhale.audio", + "learnMore": "Learn more", + "mobileApps": { + "description": "Use Funkwhale on other devices with our apps", + "label": "Mobile apps" + }, + "publicContent": { + "description": "Listen to public albums and playlists shared on this pod.", + "label": "Browse public content" + }, + "rules": "Server rules", + "userGuides": { + "description": "Discover everything you need to know about Funkwhale and its features", + "label": "User guides" + }, + "viewMore": "View moreā€¦" + }, + "placeholder": { + "noDescription": "No description available" + }, + "stat": { + "activeUsers": "No active users | {n} active user | {n} active users", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" + }, + "title": "Home" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Page not found!" + }, + "link": { + "home": "Go to home page" + }, "message": { - "contact": "Send us an email: { contactEmail }" + "pageNotFound": "Sorry, the page you asked for does not exist:" + }, + "title": "Page not found" + }, + "Queue": { + "button": { + "clear": "Clear", + "close": "Close", + "stopRadio": "Stop radio" + }, + "header": { + "failure": "The track cannot be loaded", + "noSources": "The track has no available sources.", + "radio": "You have a radio playing" + }, + "label": { + "addArtistContentFilter": "Hide content from this artistā€¦", + "duration": "Duration", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "favorite": "Favourite track", + "next": "Next track", + "pause": "Pause", + "play": "Play", + "populatingRadio": "Fetching radio trackā€¦", + "previous": "Previous track", + "queue": "Queue", + "remove": "Remove", + "restart": "Restart track", + "selectTrack": "Select track", + "showCoverArt": "Show Cover Art", + "showVisualizer": "Show MoonDrop visualiser" + }, + "message": { + "automaticPlay": "The next track will play automatically in a few secondsā€¦", + "radio": "New tracks will be appended here automatically.", + "webglUnsupported": "Your browser doesn't appear to support WebGL2." + }, + "meta": { + "end": "End", + "queuePosition": "Track {index} of {length}", + "startTime": "00:00", + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + }, + "warning": { + "connectivity": "You may have a connectivity issue." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } on {total} selected", - "allSelected": "No elements selected | {n} element selected | All {n} elements selected", - "go": "Go", - "launch": "Launch", - "refresh": "Refresh table content", - "select": "Select", - "selectAll": "Select all items", - "selectElement": "Select one element | Select all { n } elements", - "selectCurrentPage": "Select only current page" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Search" + }, + "description": { + "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", + "rss": "Use this form to subscribe to an RSS feed from its URL." + }, + "error": { + "fetchFailed": "This object cannot be retrieved" + }, + "header": { + "fetchFailed": "Error while fetching object" + }, + "label": { + "fediverse": { + "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}username{'@'}example.com", + "title": "Fediverse object" }, - "message": { - "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements", - "needsRefresh": "Content has been updated, click refresh to see up-to-date content" - }, - "label": { - "actions": "Actions", - "performAction": "Perform actions" - }, - "modal": { - "performAction": { - "header": "Do you want to launch { action } on { n } element? | Do you want to launch { action } on { n } elements?", - "content": { - "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." - } - } - }, - "header": { - "error": "Error while applying action" + "rss": { + "fieldLabel": "RSS feed location", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Subscribe to a podcast RSS feed" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "About", - "chat": "Chat room", - "docs": "Documentation", - "forum": "Forum", - "support": "Help", - "git": "Issue tracker", - "login": "Log in", - "logout": "Log out", - "notifications": "Notifications", - "profile": "Profile", - "settings": "Settings", - "signup": "Sign up" - }, - "label": { - "shortcuts": "Keyboard shortcuts", - "language": "Language", - "theme": "Theme" - } - }, - "UserModal": { - "link": { - "about": "About", - "chat": "Chat room", - "forum": "Forum", - "support": "Help", - "git": "Issue tracker", - "login": "Log in", - "logout": "Log out", - "notifications": "Notifications", - "profile": "Profile", - "settings": "Settings", - "signup": "Sign up" - }, - "label": { - "shortcuts": "Keyboard shortcuts", - "language": "Language", - "theme": "Theme" - }, - "header": { - "options": "Options" - }, - "button": { - "switchInstance": "Use another instance" - } - }, - "DangerousButton": { - "button": { - "cancel": "Cancel", - "confirm": "Confirm" - }, - "header": { - "confirm": "Do you want to confirm this action?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Cancel", - "edit": "Edit", - "less": "Show less", - "more": "Show more", - "update": "Update description" - }, - "header": { - "failure": "Error while updating description" - }, - "empty": { - "noDescription": "No description available" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Clear" - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Searchā€¦" - } - }, - "CollapseLink": { - "button": { - "collapse": "Collapse", - "expand": "Expand" - } - }, - "CopyInput": { - "button": { - "copy": "Copy" - }, - "message": { - "success": "Text copied to clipboard!" - } - }, - "LoginModal": { - "link": { - "login": "Log in", - "signup": "Sign up" - }, - "header": { - "unauthenticated": "Unauthenticated" - }, - "description": { - "noAccess": "You don't have access!" - } - }, - "ContentForm": { - "help": { - "markdown": "Markdown syntax is supported." - }, - "empty": { - "noContent": "Nothing to preview." - }, - "button": { - "preview": "Preview", - "write": "Write" - }, - "placeholder": { - "input": "Write a few words hereā€¦" - } - }, - "EmptyState": { - "header": { - "noResults": "No results were found." - }, - "button": { - "refresh": "Refresh" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." - }, - "button": { - "remove": "Remove" - }, - "label": { - "upload": "Upload New Pictureā€¦" - }, - "loader": { - "uploading": "Uploading fileā€¦" - }, - "header": { - "failure": "Your attachment cannot be saved" - } - }, - "ExpandableDiv": { - "button": { - "less": "Show less", - "more": "Show more" - } + "warning": { + "unsupported": "This kind of object isn't supported yet" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks" - } + "SetInstanceModal": { + "button": { + "cancel": "Cancel", + "submit": "Submit" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } is already in { 1 }." - }, - "button": { - "addDuplicate": "Add anyway", - "addToPlaylist": "Add to this playlist", - "addTrack": "Add track", - "cancel": "Cancel", - "edit": "Edit" - }, - "header": { - "addToPlaylist": "Add to playlist", - "available": "Available playlists", - "manage": "Manage playlists", - "noResults": "No results matching your filter", - "addFailure": "The track can't be added to a playlist" - }, - "table": { - "edit": { - "header": { - "edit": "Edit", - "lastModification": "Last modification", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "placeholder": { - "filterPlaylist": "Enter playlist name" - }, - "label": { - "filter": "Filter" - }, - "empty": { - "noPlaylists": "No playlists have been created yet" - } + "header": { + "chooseInstance": "Choose your instance", + "failure": "It is not possible to connect to the given URL", + "suggestions": "Suggested choices" }, - "Editor": { - "button": { - "addDuplicate": "Add anyway", - "clear": "Clear playlist", - "copy": "Copy the current queue to this playlist", - "insertFromQueue": "Insert from queue ({ n } track) | Insert from queue ({ n } tracks)" - }, - "error": { - "sync": "An error occurred while saving your changes" - }, - "message": { - "sync": "Changes synced with server" - }, - "modal": { - "clearPlaylist": { - "header": "Do you want to clear the playlist \"{ playlist }\"?", - "content": { - "warning": "This will remove all tracks from this playlist and cannot be undone." - } - } - }, - "help": { - "reorder": "Drag and drop rows to reorder tracks in the playlist" - }, - "header": { - "editor": "Playlist editor" - }, - "warning": { - "duplicate": "Some tracks in your queue are already in this playlist:" - }, - "loading": { - "sync": "Syncing changes to serverā€¦" - } + "help": { + "notFunkwhaleServer": "The given address is not a Funkwhale server", + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" }, - "TrackPlaylistIcon": { - "button": { - "add": "Add to playlistā€¦" - } + "label": { + "url": "Instance URL" }, - "Form": { - "header": { - "createPlaylist": "Create a new playlist", - "createSuccess": "Playlist created", - "updateSuccess": "Playlist updated", - "createFailure": "The playlist could not be created" - }, - "button": { - "create": "Create playlist", - "update": "Update playlist" - }, - "placeholder": { - "name": "My awesome playlist" - }, - "label": { - "name": "Playlist name", - "visibility": "Playlist visibility" - } - }, - "Widget": { - "button": { - "create": "Create Playlist", - "more": "Show more" - }, - "placeholder": { - "noPlaylists": "No playlists have been created yet" - } + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } accepted your follow on library \"{ library }\"", - "libraryFollow": "{ username } followed your library \"{ library }\"", - "libraryPendingFollow": "{ username } wants to follow your library \"{ library }\"" + "ShortcutsModal": { + "button": { + "close": "Close" + }, + "header": { + "modal": "Keyboard shortcuts" + }, + "shortcut": { + "audio": { + "clearQueue": "Clear queue", + "decreaseVolume": "Decrease volume", + "expandQueue": "Expand queue/player view", + "increaseVolume": "Increase volume", + "label": "Audio player shortcuts", + "playNext": "Play next track", + "playPause": "Pause/play the current track", + "playPrevious": "Play previous track", + "seekBack30": "Seek backwards 30s", + "seekBack5": "Seek backwards 5s", + "seekForward30": "Seek forwards 30s", + "seekForward5": "Seek forwards 5s", + "shuffleQueue": "Shuffle queue", + "toggleFavorite": "Toggle favourite", + "toggleLoop": "Toggle queue looping", + "toggleMute": "Toggle mute" }, - "button": { - "approve": "Approve", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "reject": "Reject" + "general": { + "focus": "Focus searchbar", + "label": "General shortcuts", + "show": "Show available keyboard shortcuts", + "unfocus": "Unfocus searchbar" } } }, "Sidebar": { + "header": { + "administration": "Administration", + "explore": "Explore", + "library": "My library", + "main": "Main navigation", + "more": "More" + }, + "label": { + "add": "Add content", + "administration": "Administration", + "edits": "Pending review edits", + "follows": "Pending follow requests", + "language": "Language", + "main": "Main menu", + "play": "Play this track", + "reports": "Pending review reports", + "theme": "Theme" + }, "link": { "about": "About this pod", "albums": "Albums", @@ -1833,46 +322,1985 @@ "radios": "Radios", "search": "Search", "settings": "Settings", - "users": "Users", - "switchInstance": "Switch instance" - }, - "label": { - "add": "Add content", - "administration": "Administration", - "language": "Language", - "main": "Main menu", - "follows": "Pending follow requests", - "edits": "Pending review edits", - "play": "Play this track", - "theme": "Theme", - "reports": "Pending review reports" - }, - "header": { - "administration": "Administration", - "explore": "Explore", - "main": "Main navigation", - "more": "More", - "library": "My library" + "switchInstance": "Switch instance", + "users": "Users" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Save" + }, + "header": { + "error": "Error while saving settings.", + "image": "Current image" + }, + "message": { + "success": "Settings updated successfully." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Add a new field", + "edit": "Edit form", + "preview": "Preview Form" + }, + "help": { + "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", + "helpText": "An optional text to be displayed at the start of the sign-up form." + }, + "label": { + "additionalField": "Additional field", + "additionalFields": "Additional fields", + "delete": "Delete", + "helpText": "Help text", + "moveDown": "Move down", + "moveUp": "Move up" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Actions", + "label": "Field label", + "required": "Required", + "type": "Field type" + }, + "required": { + "false": "False", + "true": "True" + }, + "type": { + "long": "Long text", + "short": "Short text" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Updated on {date}" + }, + "ChannelEntries": { + "help": { + "subscribe": "You may need to subscribe to this channel to see its content." + } + }, + "ChannelForm": { + "header": { + "error": "Error while saving channel." + }, + "help": { + "discography": "Publish music you make as a nice discography of albums and singles.", + "podcast": "Host your episodes and keep your community updated.", + "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", + "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." + }, + "label": { + "category": "Category", + "description": "Description", + "discography": "Artist Discography", + "email": "Owner e-mail address", + "image": "Channel Picture", + "language": "Language", + "name": "Name", + "owner": "Owner name", + "podcast": "Podcasts", + "subcategory": "Subcategory", + "tags": "Tags", + "username": "Fediverse handle" + }, + "legend": { + "purpose": "What will this channel be used for?" + }, + "loader": { + "loading": "Loading" + }, + "placeholder": { + "name": "Awesome channel name", + "username": "awesomechannelname" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Show more" + }, + "help": { + "subscribe": "You may need to subscribe to this channel to see its contents." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Show more" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copy" + }, + "header": { + "preview": "Preview" + }, + "help": { + "anonymous": "Please contact your admins and ask them to update the corresponding setting.", + "embed": "Copy/paste this code in your website HTML", + "width": "Leave empty for a responsive widget" + }, + "label": { + "embed": "Embed code", + "height": "Widget height", + "width": "Widget width" + }, + "message": { + "copy": "Text copied to clipboard!" + }, + "warning": { + "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "unfollow": "Unfollow" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to current queue", + "discretePlay": "Play", + "episodeDetails": "Episode details", + "hideArtist": "Hide content from this artist", + "playAlbum": "Play album", + "playArtist": "Play artist", + "playNext": "Play next", + "playNow": "Play now", + "playPlaylist": "Play playlist", + "playTrack": "Play track", + "playTracks": "Play tracks", + "report": "Reportā€¦", + "startRadio": "Play similar songs", + "trackDetails": "Track details" + }, + "title": { + "more": "Moreā€¦", + "unavailable": "This track is not available in any library you have access to" + } + }, + "Player": { + "header": { + "player": "Audio player and controls" + }, + "label": { + "addArtistContentFilter": "Hide content from this artistā€¦", + "audioPlayer": "Media player", + "clearQueue": "Clear your queue", + "expandQueue": "Expand queue", + "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", + "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", + "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", + "mute": "Mute", + "nextTrack": "Next track", + "pause": "Pause", + "play": "Play", + "previousTrack": "Previous track", + "shuffleQueue": "Shuffle your queue", + "unmute": "Unmute" + }, + "meta": { + "position": "{index} of {length}", + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + } + }, + "PlayerControls": { + "labels": { + "next": "Next track", + "pause": "Pause", + "play": "Play", + "previous": "Previous track" + } + }, + "Search": { + "empty": { + "noAlbums": "No album matched your query", + "noArtists": "No artist matched your query" + }, + "header": { + "albums": "Albums", + "artists": "Artists", + "search": "Search for some music" + }, + "placeholder": { + "search": "Artist, album, trackā€¦" + } + }, + "SearchBar": { + "empty": { + "noResults": "Sorry, there are no results for this search" + }, + "header": { + "noResults": "No matches found" + }, + "label": { + "album": "Album", + "artist": "Artist", + "category": { + "federation": "Federation", + "podcasts": "Podcasts" + }, + "search": "Search for content", + "tag": "Tag", + "track": "Track" + }, + "link": { + "fediverse": "Search on the fediverse", + "more": "More results šŸ”’", + "rss": "Subscribe to podcast via RSS" + }, + "placeholder": { + "search": "Search for artists, albums, tracksā€¦" + } + }, + "VolumeControl": { + "button": { + "mute": "Mute", + "unmute": "Unmute" + }, + "label": { + "slider": "Adjust volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Widget": { + "button": { + "more": "Show more" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Widget": { + "button": { + "more": "Show more" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Show track actions" + } + }, + "Modal": { + "button": { + "addToFavorites": "Add to favourites", + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", + "playNext": "Play next", + "playNow": "Play now", + "removeFromFavorites": "Remove from favourites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Show track actions" + } + }, + "Modal": { + "button": { + "addToFavorites": "Add to favourites", + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", + "playNext": "Play next", + "playNow": "Play now", + "removeFromFavorites": "Remove from favourites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artist", + "title": "Title" + } + } + }, + "Widget": { + "button": { + "more": "Show more" + }, + "empty": { + "noResults": "Nothing found" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Regenerate token" + }, + "header": { + "appDetails": "Application Details", + "appSecretWarning": "Keep a copy of this token in a safe place.", + "editApp": "Edit application" + }, + "help": { + "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." + }, + "label": { + "accessToken": "Access token", + "appId": "Application ID", + "appSecret": "Application secret" + }, + "link": { + "settings": "Back to settings" + }, + "message": { + "appSecretWarning": "You won't be able to see it again once you leave this screen." + }, + "title": "Edit application" + }, + "ApplicationForm": { + "button": { + "create": "Create application", + "update": "Update application" + }, + "header": { + "failure": "We cannot save your changes" + }, + "help": { + "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + }, + "label": { + "name": "Name", + "redirectUri": "Redirect URI", + "scopes": { + "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", + "label": "Scopes", + "read": { + "description": "Read-only access to user data", + "label": "Read" + }, + "write": { + "description": "Write-only access to user data", + "label": "Write" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Back to settings" + }, + "title": "Create a new application" + }, + "Authorize": { + "button": { + "authorize": "Authorize {app}" + }, + "header": { + "access": "{app_name} wants to access your Funkwhale account", + "allScopes": "Full access", + "authorize": "Authorise third-party app", + "authorizeFailure": "Error while fetching application data", + "fetchFailure": "Error while fetching application data", + "readOnly": "Read-only", + "writeOnly": "Write-only" + }, + "help": { + "copyCode": "You will be shown a code to copy-paste in the application", + "pasteCode": "Copy-paste the following code in the application:", + "redirect": "You will be redirected to { 0 }" + }, + "message": { + "unknownPermissions": "The application is also requesting the following unknown permissions:" + }, + "title": "Allow application" + }, + "LoginForm": { + "button": { + "login": "Login" + }, + "header": { + "loginFailure": "We cannot log you in" + }, + "help": { + "approvalRequired": "If you signed-up recently, you may need to wait before our moderation team review your account, or verify your e-mail address.", + "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." + }, + "label": { + "password": "Password", + "username": "Username or e-mail address" + }, + "link": { + "createAccount": "Create an account", + "resetPassword": "Reset your password" + }, + "message": { + "redirect": "You will be redirected to {domain} to authenticate" + }, + "placeholder": { + "username": "Enter your username or e-mail address" + } + }, + "Logout": { + "button": { + "logout": "Yes, log me out!" + }, + "header": { + "confirm": "Are you sure you want to log out?", + "unauthenticated": "You aren't currently logged in" + }, + "link": { + "login": "Log in!" + }, + "message": { + "loggedIn": "You are currently logged in as {username}" + }, + "title": "Log out" + }, + "Plugin": { + "button": { + "save": "Save", + "scan": "Scan" + }, + "description": { + "library": "Library where files should be imported." + }, + "header": { + "failure": "Error while saving plugin" + }, + "label": { + "library": "Library", + "pluginEnabled": "Enabled" + }, + "link": { + "documentation": "Documentation" + } + }, + "Settings": { + "button": { + "delete": "Delete", + "deleteAccount": "Delete my accountā€¦", + "deleteAccountConfirm": "Delete my account", + "disableSubsonic": "Disable access", + "edit": "Edit", + "password": "Change password", + "refresh": "Refresh", + "remove": "Remove", + "removeApp": "Remove application", + "revoke": "Revoke", + "revokeAccess": "Revoke access", + "update": "Update", + "updateSettings": "Update settings" + }, + "description": { + "authorizedApps": "This is the list of applications that have access to your account data.", + "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", + "changePassword": { + "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", + "paragraph2": "You will have to update your password on your clients that use this password." + }, + "contentFilters": "Content filters help you hide content you don't want to see on the service.", + "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.", + "plugins": "Use plugins to extend Funkwhale and get additional features.", + "yourApps": "This is the list of applications that you have registered." + }, + "header": { + "accountFailure": "We cannot delete your account", + "accountSettings": "Account settings", + "authorizedApps": "Authorised apps", + "avatar": "Avatar", + "avatarFailure": "Your avatar cannot be saved", + "changeEmail": "Change my e-mail address", + "changePassword": "Change my password", + "contentFilters": "Content filters", + "deleteAccount": "Delete my account", + "emailFailure": "We cannot change your e-mail address", + "hiddenArtists": "Hidden artists", + "noApps": "You don't have any application connected with your account.", + "noPersonalApps": "You don't have registered any application yet.", + "passwordFailure": "Your password cannot be changed", + "plugins": "Plugins", + "settingsUpdated": "Settings updated", + "updateFailure": "Your settings can't be updated", + "yourApps": "Your applications" + }, + "help": { + "changePassword": "Please double-check your password is correct", + "noApps": "If you authorise third-party applications to access your data, those applications will be listed here.", + "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Current password", + "newEmail": "New e-mail address", + "newPassword": "New password", + "password": "Password" + }, + "link": { + "managePlugins": "Manage plugins", + "newApp": "Register a new application" + }, + "message": { + "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", + "currentEmail": "Your current e-mail address is {email}" + }, + "modal": { + "changePassword": { + "content": { + "logout": "You will be logged out from this session and have to log in with the new one", + "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password", + "warning": "Changing your password will have the following consequences" + }, + "header": "Change your password?" + }, + "deleteAccount": { + "content": { + "warning": "This is irreversible and will permanently remove your data from our servers. You will be immediately logged out." + }, + "header": "Do you want to delete your account?" + }, + "deleteApp": { + "content": { + "warning": "This will permanently remove the application and all the associated tokens." + }, + "header": "Remove application {app}?" + }, + "revokeApp": { + "content": { + "warning": "This will prevent this application from accessing the service on your behalf." + }, + "header": "Revoke access for application {app}?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Creation date", + "name": "Name" + } + }, + "authorizedApps": { + "header": { + "application": "Application", + "permissions": "Permissions" + } + }, + "yourApps": { + "header": { + "application": "Application", + "creationDate": "Creation date", + "scopes": "Scopes" + } + } + }, + "title": "Account Settings", + "warning": { + "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." + } + }, + "SignupForm": { + "button": { + "create": "Create my account" + }, + "header": { + "login": "Log in to your Funkwhale account", + "signupFailure": "Your account cannot be created." + }, + "label": { + "email": "E-mail address", + "invitation": "Invitation code", + "password": "Password", + "username": "Username" + }, + "message": { + "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", + "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", + "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", + "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + }, + "placeholder": { + "email": "Enter your e-mail address", + "invitation": "Enter your invitation code (case insensitive)", + "username": "Enter your username" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Disable access", + "confirmNewPassword": "Request a password", + "disable": "Disable Subsonic access", + "newPassword": "Request a new password" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale is compatible with other music players that support the Subsonic API.", + "paragraph2": "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance.", + "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below." + } + }, + "header": { + "error": "Error", + "subsonic": "Subsonic API password" + }, + "label": { + "subsonicField": "Your subsonic API password" + }, + "link": { + "apps": "Discover how to use Funkwhale from other apps" + }, + "message": { + "accessDisabled": "Access disabled", + "passwordUpdated": "Password updated", + "unavailable": "The Subsonic API is not available on this Funkwhale instance." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "This will completely disable access to the Subsonic API using from account." + }, + "header": "Disable Subsonic API access?" + }, + "newPassword": { + "content": { + "warning": "This will log you out from existing devices that use the current password." + }, + "header": "Request a new Subsonic API password?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Error while creating" + }, + "label": { + "albumTitle": "Title" + } + }, + "AlbumModal": { + "button": { + "cancel": "Cancel", + "create": "Create" + }, + "header": { + "newAlbum": "New album", + "newSeries": "New series" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Series" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + }, + "option": { + "none": "None" + } + }, + "LicenseSelect": { + "label": { + "license": "Licence" + }, + "link": { + "license": "About this licence" + }, + "option": { + "none": "None" + } + }, + "SubscribeButton": { + "help": { + "auth": "You need to be logged in to subscribe to this channel" + }, + "title": { + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe" + } + }, + "UploadForm": { + "button": { + "edit": "Edit", + "ignore": "Ignore", + "remove": "Remove", + "resume": "Resume", + "retry": "Retry" + }, + "description": { + "extensions": "Supported extensions {extensions}" + }, + "header": { + "error": "Error while publishing" + }, + "help": { + "license": "Add a licence to your upload to ensure some freedoms to your public." + }, + "label": { + "channel": "Channel", + "openBrowser": "Browseā€¦" + }, + "message": { + "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", + "pending": "You have some draft uploads pending publication." + }, + "status": { + "errored": "Errored", + "pending": "Pending", + "uploading": "Uploading" + }, + "warning": { + "quota": "You don't have any space left to upload your files. Please contact the moderators." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Description", + "image": "Track Picture", + "position": "Position", + "tags": "Tags", + "title": "Title" + } + }, + "UploadModal": { + "button": { + "cancel": "Cancel", + "close": "Close", + "finishLater": "Finish later", + "next": "Next step", + "previous": "Previous step", + "publish": "Publish", + "update": "Update" + }, + "header": { + "processing": "Processing uploads", + "publish": "Publish audio", + "uploadDetails": "Upload details", + "uploadFiles": "Files to upload" + }, + "meta": { + "files": "no files | {n} file | {n} files", + "quota": "Remaining storage space: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "No elements selected | {n} element selected | All {n} elements selected", + "go": "Go", + "launch": "Launch", + "refresh": "Refresh table content", + "select": "Select", + "selectAll": "Select all items", + "selectCurrentPage": "Select only current page", + "selectElement": "Select one element | Select all {n} elements", + "selected": "{ n } on {total} selected" + }, + "header": { + "error": "Error while applying action" + }, + "label": { + "actions": "Actions", + "performAction": "Perform actions" + }, + "message": { + "needsRefresh": "Content has been updated, click refresh to see up-to-date content", + "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" + }, + "modal": { + "performAction": { + "content": { + "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." + }, + "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Remove" + }, + "header": { + "failure": "Your attachment cannot be saved" + }, + "help": { + "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." + }, + "label": { + "upload": "Upload New Pictureā€¦" + }, + "loader": { + "uploading": "Uploading fileā€¦" + } + }, + "CollapseLink": { + "button": { + "collapse": "Collapse", + "expand": "Expand" + } + }, + "ContentForm": { + "button": { + "preview": "Preview", + "write": "Write" + }, + "empty": { + "noContent": "Nothing to preview" + }, + "help": { + "markdown": "Markdown syntax is supported" + }, + "placeholder": { + "input": "Write a few words hereā€¦" + } + }, + "CopyInput": { + "button": { + "copy": "Copy" + }, + "message": { + "success": "Text copied to clipboard!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Cancel", + "confirm": "Confirm" + }, + "header": { + "confirm": "Do you want to confirm this action?" + } + }, + "Duration": { + "meta": { + "hours": "{hours} h {minutes} min", + "minutes": "{minutes} min" + } + }, + "EmptyState": { + "button": { + "refresh": "Refresh" + }, + "header": { + "noResults": "No results were found." + } + }, + "ExpandableDiv": { + "button": { + "less": "Show less", + "more": "Show more" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Clear" + }, + "label": { + "search": "Search" + }, + "placeholder": { + "search": "Searchā€¦" + } + }, + "LoginModal": { + "description": { + "noAccess": "You don't have access" + }, + "header": { + "unauthenticated": "Unauthenticated" + }, + "link": { + "login": "Log in", + "signup": "Sign up" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Cancel", + "edit": "Edit", + "less": "Show less", + "more": "Show more", + "update": "Update description" + }, + "empty": { + "noDescription": "No description available" + }, + "header": { + "failure": "Error while updating description" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Language", + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" + }, + "link": { + "about": "About", + "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", + "git": "Issue tracker", + "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", + "signup": "Sign up", + "support": "Help" + } + }, + "UserModal": { + "button": { + "switchInstance": "Use another instance" + }, + "header": { + "options": "Options" + }, + "label": { + "language": "Change language", + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" + }, + "link": { + "about": "About", + "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", + "git": "Issue tracker", + "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", + "signup": "Sign up", + "support": "Help" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "No tracks have been added to your favourites yet" + }, + "header": { + "favorites": "No favourites | {n} favourite | {n} favourites" + }, + "link": { + "library": "Browse the library" + }, + "loader": { + "loading": "Loading your favouritesā€¦" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "title": "Your favourites" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Add to favourites", + "remove": "Remove from favourites" + }, + "label": { + "inFavorites": "In favourites" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Close", + "reload": "Close and reload page" + }, + "description": { + "failure": "An error occurred while trying to refresh data:", + "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", + "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", + "success": "Data was refreshed successfully from remote server." + }, + "header": { + "failure": "Refresh error", + "pending": "Refresh pending", + "refresh": "Refreshing object from remote serverā€¦", + "saveFailure": "Error while saving settings", + "skipped": "Refresh was skipped", + "success": "Refresh successful" + }, + "loader": { + "awaitingResult": "Waiting for resultā€¦", + "fetchRequest": "Requesting a fetchā€¦" + }, + "table": { + "error": { + "label": { + "detail": "Error detail", + "type": "Error type" + }, + "value": { + "connectionError": "Impossible to connect to the remote server", + "httpError": "An HTTP error occurred while contacting the remote server", + "httpStatus": "The remote server answered with HTTP {status}", + "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", + "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "timeoutError": "The remote server didn't respond quickly enough", + "unknownError": "Unknown error" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Show more" + }, + "empty": { + "noMatch": "No matching library." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copy" + }, + "message": { + "copy": "Text copied to clipboard!" + }, + "title": "Show/hide password" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Add a descriptionā€¦" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "This album is present in the following libraries:" + }, + "header": { + "episodes": "Episodes", + "libraries": "User libraries", + "tracks": "Tracks" + }, + "meta": { + "volume": "Volume {number}" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Cancel", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "more": "Moreā€¦" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this album?" + }, + "embed": { + "header": "Embed this album on your website" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Edit this album", + "suggest": "Suggest an edit on this album" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "Albums": { + "button": { + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing albums" + }, + "label": { + "search": "Search", + "tags": "Tags" + }, + "link": { + "addMusic": "Add some music" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Enter album titleā€¦" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Cancel", + "edit": "Edit", + "embed": "Embed", + "more": "Moreā€¦", + "play": "Play all albums" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz", + "wikipedia": "Search on Wikipedia" + }, + "meta": { + "albums": "0 albums | {n} album | {n} albums", + "tracks": "0 tracks in | {count} track in | {count} tracks in" + }, + "modal": { + "embed": { + "header": "Embed this artist work on your website" + } + }, + "title": "Artist" + }, + "ArtistDetail": { + "button": { + "filter": "Remove filter", + "more": "Load moreā€¦" + }, + "description": { + "library": "This artist is present in the following libraries:" + }, + "header": { + "album": "Albums by this artist", + "library": "User libraries", + "track": "New tracks by this artist" + }, + "link": { + "filter": "Review my filters" + }, + "message": { + "filter": "You are currently hiding content related to this artist." + } + }, + "ArtistEdit": { + "header": { + "edit": "Edit this artist", + "suggest": "Suggest an edit on this artist" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "Artists": { + "button": { + "search": "Search", + "upload": "Add some music" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing artists" + }, + "label": { + "excludeCompilation": "Exclude Compilation Artists", + "search": "Artist name", + "tags": "Tags" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Searchā€¦" + }, + "title": "Artists" + }, + "EditCard": { + "button": { + "approve": "Approve", + "delete": "Delete", + "reject": "Reject" + }, + "header": { + "modification": "Modification {id}" + }, + "link": { + "track": "Track #{id} - {name}" + }, + "modal": { + "content": { + "warning": "The suggestion will be completely removed, this action is irreversible." + }, + "delete": { + "header": "Delete this suggestion?" + } + }, + "status": { + "applied": "Approved and applied", + "approved": "Approved", + "pending": "Pending", + "rejected": "Rejected" + }, + "table": { + "update": { + "header": { + "field": "Field", + "newValue": "New value", + "oldValue": "Old value" + }, + "notApplicable": "N/A" + } + } + }, + "EditForm": { + "button": { + "cancel": "Cancel", + "clear": "Clear", + "new": "Submit another edit", + "reset": "Reset to initial value", + "showAll": "Show all edits", + "showUnreviewed": "Restrict to unreviewed edits", + "submit": "Submit and apply edit", + "suggest": "Submit suggestion" + }, + "empty": { + "suggestEdit": "Suggest a change using the form below" + }, + "header": { + "failure": "Error while submitting edit", + "recentEdits": "Recent edits", + "success": "Your edit was successfully submitted.", + "unreviewed": "Restrict to unreviewed edits" + }, + "label": { + "summary": "Summary (optional)" + }, + "message": { + "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "A short summary describing your changes." + } + }, + "FileUpload": { + "button": { + "cancel": "Cancel", + "retry": "Retry failed uploads" + }, + "description": { + "import": "Import status", + "previousImport": "Results of your previous import:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error while launching import", + "local": "Upload music from '~/your local storage", + "server": "Import music from your server", + "status": "Import status" + }, + "label": { + "extensions": "Supported extensions: {extensions}", + "remainingSpace": "Remaining storage space", + "uploadWidget": "Click to select files to upload or drag and drop files or directories" + }, + "link": { + "picard": "We recommend using Picard for that purpose.", + "processing": "Processing", + "uploading": "Uploading" + }, + "message": { + "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", + "local": { + "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", + "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", + "message": "You are about to upload music to your library. Before proceeding, please ensure that:", + "tag": "The music files you are uploading are tagged properly." + } + }, + "table": { + "upload": { + "header": { + "actions": "Actions", + "filename": "Filename", + "size": "Size", + "status": "Status" + }, + "progress": "{percent}%", + "status": { + "pending": "Pending", + "uploaded": "Uploaded", + "uploading": "Uploadingā€¦" + } + } + }, + "tooltip": { + "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", + "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}", + "network": "A network error occurred while uploading this file", + "retry": "Retry", + "size": "Cannot upload this file, ensure it is not too big", + "timeout": "Upload timeout, please try again" + } + }, + "FsBrowser": { + "button": { + "import": "Import" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Import hasn't started yet" + } + }, + "Home": { + "header": { + "newChannels": "New channels", + "playlists": "Playlists", + "recentlyAdded": "Recently added", + "recentlyFavorited": "Recently favourited", + "recentlyListened": "Recently listened" + }, + "title": "Library" + }, + "ImportStatusModal": { + "button": { + "close": "Close" + }, + "error": { + "importFailure": "An error occurred during upload processing. You will find more information below.", + "invalidMetadata": { + "label": "Invalid metadata", + "message": "The metadata included in the file is invalid or some mandatory fields are missing." + }, + "unknownError": { + "label": "Unknown error", + "message": "An unknown error occurred" + } + }, + "header": { + "importDetail": "Import detail" + }, + "link": { + "documentation": "Read our documentation for this error", + "support": "Open a support thread (include the debug information below in your message)" + }, + "message": { + "importDetail": "Upload is still pending and will soon be processed by the server.", + "importSuccess": "Upload was successfully processed by the server." + }, + "table": { + "error": { + "debug": "Debug information", + "errorDetail": "Error detail", + "errorType": "Error type", + "help": "Getting help" + } + }, + "warning": { + "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." + } + }, + "Podcasts": { + "button": { + "cancel": "Cancel", + "channel": "Create a Channel", + "feed": "Subscribe to feed", + "search": "Search", + "subscribe": "Subscribe" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing podcasts" + }, + "label": { + "search": "Podcast title", + "tags": "Tags" + }, + "modal": { + "subscription": { + "header": "Subscription" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Searchā€¦" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Create a radio", + "create": "Create your own radio", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing radios", + "instance": "Instance radios", + "user": "User radios" + }, + "label": { + "search": "Search" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Enter a radio nameā€¦" + }, + "title": "Radios" + }, + "TagDetail": { + "header": { + "channels": "Channels", + "tracks": "Tracks" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "moderation": "Open in moderation interface" + } + }, + "TagSelector": { + "placeholder": { + "search": "Searchā€¦" + } + }, + "TrackBase": { + "button": { + "cancel": "Cancel", + "delete": "Delete", + "download": "Download", + "edit": "Edit", + "embed": "Embed", + "more": "Moreā€¦", + "play": "Play" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "wikipedia": "Search on Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this track?" + }, + "embed": { + "header": "Embed this track on your website" + } + }, + "subtitle": { + "with-uploader": "Uploaded by {0} on {1}", + "without-uploader": "Uploaded on {0}" + }, + "title": "Track" + }, + "TrackDetail": { + "description": { + "library": "This track is present in the following libraries:" + }, + "header": { + "episode": "Episode Details", + "library": "Related Libraries", + "playlists": "Related Playlists", + "release": "Release Details", + "track": "Track details" + }, + "link": { + "musicbrainz": "View on MusicBrainz" + }, + "notApplicable": "N/A", + "table": { + "release": { + "album": "Album", + "artist": "Artist", + "copyright": "Copyright", + "license": "License", + "series": "Series", + "url": "URL", + "year": "Year" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Downloads", + "duration": "Duration", + "size": "Size" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Edit this track", + "suggest": "Suggest an edit on this track" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Add filter", + "save": "Save" + }, + "description": { + "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." + }, + "header": { + "builder": "Builder", + "created": "Radio created", + "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters", + "updated": "Radio updated" + }, + "label": { + "description": "Description", + "filter": "Add filters to customise your radio", + "name": "Radio name", + "public": "Display publicly" + }, + "option": { + "filter": "Select a filter" + }, + "placeholder": { + "description": "My awesome description", + "name": "My awesome radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Accessed date", - "account": "Account", - "creationDate": "Creation date", - "domain": "Domain", - "importStatus": "Import status", - "library": "Library", - "name": "Name", - "size": "Size", - "visibility": "Visibility" + "actions": "Actions", + "candidates": "Candidates", + "config": "Config", + "exclude": "Exclude", + "name": "Filter name" } } }, + "title": "Radio Builder" + }, + "Filter": { + "cancelButton": "Cancel", + "excludeLabel": "Exclude", + "matchingTracks": "0 tracks matching filter | {n} track matching filter | {n} tracks matching filter", + "matchingTracksModalHeader": "Tracks matching filter", + "removeButton": "Remove" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, accountā€¦" + }, + "table": { + "channel": { + "header": { + "account": "Account", + "albums": "Albums", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, MusicBrainz IDā€¦" + }, + "table": { + "album": { + "header": { + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Title", + "releaseDate": "Release date", + "tracks": "Tracks" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected artist will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, MusicBrainz IDā€¦" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "all": "All", + "approved": "Approved", + "pending": "Pending review", + "rejected": "Rejected" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by account, summary, domainā€¦" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." + } + }, + "label": { + "search": "Search", + "visibility": "Visibility" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, actor, name, descriptionā€¦" + }, + "table": { + "library": { + "header": { + "account": "Account", + "creationDate": "Creation date", + "domain": "Domain", + "followers": "Followers", + "name": "Name", + "uploads": "Uploads", + "visibility": "Visibility" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artists", + "creationDate": "Creation date", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, album, MusicBrainz IDā€¦" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "license": "License", + "title": "Title" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected upload will be removed. This action is irreversible." + } + }, + "label": { + "search": "Search", + "status": "Import status", + "visibility": "Visibility" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", "option": { "all": "All", "failed": "Failed", @@ -1888,396 +2316,68 @@ }, "label": "Ordering" }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected upload will be removed. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Search", - "status": "Status", - "visibility": "Visibility" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { "search": "Search by domain, actor, name, reference, sourceā€¦" }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Accessed date", "account": "Account", "creationDate": "Creation date", "domain": "Domain", - "followers": "Followers", + "importStatus": "Import status", + "library": "Library", "name": "Name", - "uploads": "Uploads", + "size": "Size", "visibility": "Visibility" } } - }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Search", - "visibility": "Visibility" - }, - "placeholder": { - "search": "Search by domain, actor, name, descriptionā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artist", - "creationDate": "Creation date", - "domain": "Domain", - "license": "License", - "title": "Title" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, title, artist, album, MusicBrainz IDā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "label": { - "category": "Category", - "search": "Search" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Search by domain, name, MusicBrainz IDā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artists", - "creationDate": "Creation date", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." - } - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by name" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "EditsCardList": { - "option": { - "all": "All", - "approved": "Approved", - "pending": "Pending review", - "rejected": "Rejected" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "placeholder": { - "search": "Search by account, summary, domainā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - }, - "label": { - "status": "Status" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artist", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Title", - "releaseDate": "Release date", - "tracks": "Tracks" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local", - "moderation": "Open in moderation interface" - }, - "notApplicable": "N/A", - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, title, artist, MusicBrainz IDā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Account", - "domain": "Domain", - "local": "Local", - "owner": "Owner", - "type": "Type" - }, - "status": { - "assignedTo": "Assigned to", - "internalNotes": "Internal notes", - "resolutionDate": "Resolution date", - "resolved": "Resolved", - "status": "Status", - "unresolved": "Unresolved" - }, - "report": { - "category": "Category", - "creationDate": "Creation date", - "submittedBy": "Submitted by" + "AccountsTable": { + "action": { + "purge": { + "label": "Purge" } }, - "header": { - "actions": "Actions", - "notes": "Internal notes", - "message": "Message", - "reportedObject": "Reported object" - }, - "button": { - "confirmDelete": "Delete", - "delete": "Delete reported object", - "resolve": "Resolve", - "unresolve": "Unresolve" - }, - "modal": { - "delete": { - "header": "Delete reported object?", - "content": { - "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." - } - } - }, - "notApplicable": "N/A", - "link": { - "moderation": "Open in moderation interface", - "report": "Report { id }", - "publicPage": "View public page" - }, - "warning": { - "objectDeleted": "The object associated with this report was deleted." - } - }, - "UserRequestCard": { - "header": { - "actions": "Actions", - "notes": "Internal notes", - "signup": "Message" - }, - "button": { - "approve": "Approve", - "reject": "Refuse" - }, - "table": { - "status": { - "approved": "Approved", - "assignedTo": "Assigned to", - "internalNotes": "Internal notes", - "pending": "Pending", - "refused": "Refused", - "status": "Status" - }, - "request": { - "creationDate": "Creation date", - "submittedBy": "Submitted by" - } - }, - "notApplicable": "N/A", - "link": { - "request": "Request { id }" - }, - "message": { - "signup": "This user wants to sign-up on your pod." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Add a new moderation rule", - "editRule": "Edit moderation rule", - "failure": "Error while creating rule" - }, "label": { - "blockAll": "Block everything", - "policyDisabled": "Disabled", - "policyEnabled": "Enabled", - "silenceActivity": "Mute activity", - "silenceNotifications": "Mute notifications", - "customizeRule": "Or customise your rule", - "policyReason": "Reason", - "rejectMedia": "Reject media" + "search": "Search" }, - "tooltip": { - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", - "rejectMedia": "Do not download any media file (audio, album cover, account avatarā€¦) from this account or domain. This will purge existing content as well.", - "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place.", - "silenceActivity": "Hide account or domain content, except from followers.", - "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", - "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it." + "link": { + "local": "Local account" }, - "button": { - "cancel": "Cancel", - "create": "Create", - "delete": "Delete", - "confirm": "Delete moderation rule", - "update": "Update" + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, - "modal": { - "delete": { - "header": "Delete this moderation rule?", - "content": { - "warning": "This action is irreversible." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Add note" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { - "summary": "Describe what actions have been taken, or any other related updatesā€¦" + "search": "Search by domain, username, bioā€¦" }, - "header": { - "failure": "Error while submitting note" + "table": { + "account": { + "header": { + "domain": "Domain", + "firstSeen": "First seen", + "lastSeen": "Last seen", + "moderationRule": "Under moderation rule", + "name": "Name", + "uploads": "Uploads" + }, + "moderationRule": "Yes" + } } }, "DomainsTable": { @@ -2292,6 +2392,16 @@ "label": "Remove from allow-list" } }, + "empty": { + "noPods": "No other pods found" + }, + "label": { + "inList": "Is present on allow-list", + "search": "Search" + }, + "link": { + "list": "This domain is present in your allow-list" + }, "option": { "all": "All", "no": "No", @@ -2305,76 +2415,32 @@ }, "label": "Ordering" }, - "table": { - "domain": { - "header": { - "firstSeen": "First seen", - "name": "Name", - "receivedMessages": "Received messages", - "moderationRule": "Under moderation rule", - "users": "Users" - }, - "moderationRule": "Yes" - } - }, - "label": { - "inList": "Is present on allow-list", - "search": "Search" - }, - "empty": { - "noPods": "No other pods found" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { "search": "Search by nameā€¦" }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - }, - "link": { - "list": "This domain is present in your allow-list" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domain", "firstSeen": "First seen", - "lastSeen": "Last seen", - "name": "Name", "moderationRule": "Under moderation rule", - "uploads": "Uploads" + "name": "Name", + "receivedMessages": "Received messages", + "users": "Users" }, "moderationRule": "Yes" } - }, - "link": { - "local": "Local account" - }, - "action": { - "purge": { - "label": "Purge" - } - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, username, bioā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Edit" + }, + "header": { + "rule": "Rule" + }, "label": { "blockAll": "Block everything", "muteActivity": "Mute activity", @@ -2382,15 +2448,49 @@ "reason": "Reason", "rejectMedia": "Reject media" }, - "button": { - "edit": "Edit" - }, "status": { "enabled": "Enabled", "paused": "Paused" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Cancel", + "confirm": "Delete moderation rule", + "create": "Create", + "delete": "Delete", + "update": "Update" }, "header": { - "rule": "Rule" + "addRule": "Add a new moderation rule", + "editRule": "Edit moderation rule", + "failure": "Error while creating rule" + }, + "label": { + "blockAll": "Block everything", + "customizeRule": "Or customise your rule", + "policyDisabled": "Disabled", + "policyEnabled": "Enabled", + "policyReason": "Reason", + "rejectMedia": "Reject media", + "silenceActivity": "Mute activity", + "silenceNotifications": "Mute notifications" + }, + "modal": { + "delete": { + "content": { + "warning": "This action is irreversible" + }, + "header": "Delete this moderation rule?" + } + }, + "tooltip": { + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", + "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", + "rejectMedia": "Hide account or domain content, except from followers.", + "silenceActivity": "Hide account or domain content, except from followers.", + "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", + "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place." } }, "InstancePolicyModal": { @@ -2400,161 +2500,130 @@ }, "modal": { "manage": { - "header": "Manage moderation rules for { obj }", "content": { "warning": "This entity is subject to specific moderation rules" - } + }, + "header": "Manage moderation rules for {obj}" } } }, + "NoteForm": { + "button": { + "add": "Add note" + }, + "header": { + "failure": "Error while submitting note" + }, + "placeholder": { + "summary": "Describe what actions have been taken, or any other related updatesā€¦" + } + }, "NotesThread": { "button": { "delete": "Delete" }, "modal": { "delete": { - "header": "Delete this note?", "content": { "warning": "The note will be removed. This action is irreversible." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Account", - "albums": "Albums", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Name", - "tracks": "Tracks" + }, + "header": "Delete this note?" } } }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" + "ReportCard": { + "button": { + "confirmDelete": "Delete", + "delete": "Delete reported object", + "resolve": "Resolve", + "unresolve": "Unresolve" }, - "label": "Ordering" + "header": { + "actions": "Actions", + "message": "Message", + "notes": "Internal notes", + "reportedObject": "Reported object" + }, + "link": { + "moderation": "Open in moderation interface", + "publicPage": "View public page", + "report": "Report {id}" + }, + "modal": { + "delete": { + "content": { + "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." + }, + "header": "Delete reported object?" + } + }, + "notApplicable": "N/A", + "table": { + "object": { + "account": "Account", + "domain": "Domain", + "local": "Local", + "owner": "Owner", + "type": "Type" + }, + "report": { + "category": "Category", + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "resolutionDate": "Resolution date", + "resolved": "Resolved", + "status": "Status", + "unresolved": "Unresolved" + } + }, + "warning": { + "objectDeleted": "The object associated with this report was deleted." + } }, - "label": { - "category": "Category", - "search": "Search" - }, - "link": { - "local": "Local", - "moderation": "Open in moderation interface" - }, - "placeholder": { - "search": "Search by domain, name, accountā€¦" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" + "UserRequestCard": { + "button": { + "approve": "Approve", + "reject": "Refuse" + }, + "header": { + "actions": "Actions", + "notes": "Internal notes", + "signup": "Message" + }, + "link": { + "request": "Request {id}" + }, + "message": { + "signup": "This user wants to sign-up on your pod." + }, + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "approved": "Approved", + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "pending": "Pending", + "refused": "Refused", + "resolutionDate": "Resolution date", + "status": "Status" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Account status", - "email": "Email", - "lastActivity": "Last activity", - "permissions": "Permissions", - "signup": "Sign-up", - "status": "Status", - "username": "Username" - }, - "accountStatus": { - "active": "Active", - "inactive": "Inactive" - }, - "status": { - "admin": "Admin", - "regular": "Regular user", - "staff": "Staff member" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "permission": { - "library": "Library", - "moderation": "Moderation", - "settings": "Settings" - }, - "notApplicable": "N/A", - "placeholder": { - "search": "Search by username, e-mail address, nameā€¦" - }, - "pagination": { - "results": "Showing one result | Showing results { start } to { end } from { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "All", - "expired": "Expired/used", - "open": "Open" - }, - "table": { - "invitation": { - "header": { - "code": "Code", - "creationDate": "Creation date", - "expirationDate": "Expiry date", - "owner": "Owner", - "status": "Status" - } - } - }, - "action": { - "delete": "Delete" - }, - "label": { - "expired": "Expired", - "unused": "Not used", - "search": "Search", - "status": "Status", - "used": "Used" - }, - "ordering": { - "label": "Ordering" - }, - "placeholder": { - "search": "Search by username, e-mail address, codeā€¦" - }, - "pagination": { - "results": "Showing one result | Showing results { start } to { end } from { total }" - } - }, "InvitationForm": { "button": { "clear": "Clear", "new": "Get a new invitation" }, - "table": { - "invitation": { - "header": { - "code": "Code", - "link": "Share link" - } - } - }, "header": { "failure": "Error while creating invitation" }, @@ -2563,534 +2632,59 @@ }, "placeholder": { "invitation": "Leave empty for a random code" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Actions", - "label": "Field label", - "type": "Field type", - "required": "Required" - }, - "type": { - "long": "Long text", - "short": "Short text" - }, - "required": { - "false": "False", - "true": "True" - } - } - }, - "button": { - "add": "Add a new field", - "edit": "Edit form", - "preview": "Preview Form" - }, - "label": { - "additionalField": "Additional field", - "additionalFields": "Additional fields", - "delete": "Delete", - "helpText": "Help text", - "moveDown": "Move down", - "moveUp": "Move up" - }, - "help": { - "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", - "helpText": "An optional text to be displayed at the start of the sign-up form." - } - }, - "SettingsGroup": { - "header": { - "image": "Current image", - "error": "Error while saving settings." - }, - "button": { - "save": "Save" - }, - "message": { - "success": "Settings updated successfully." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "All" - }, - "label": { - "category": "Category" - } - }, - "ReportModal": { - "header": { - "disabled": "Anonymous reports are disabled, please sign in to submit a report.", - "modal": "Do you want to report this object?", - "submissionFailure": "Error while submitting report" - }, - "button": { - "cancel": "Cancel", - "submit": "Submit report" - }, - "label": { - "email": "Email", - "forwardToDomain": "Forward to { domain}", - "message": "Message" - }, - "description": { - "forwardToDomain": "Forward an anonymised copy of your report to the server hosting this element.", - "message": "Use this field to provide additional context to the moderator that will handle your report.", - "modal": "Use this form to submit a report to our moderation team.", - "email": "We'll use this e-mail address if we need to contact you regarding this report." - }, - "message": { - "submissionSuccess": "Report successfully submitted, thank you" - } - }, - "FilterModal": { - "button": { - "cancel": "Cancel", - "hide": "Hide content" - }, - "message": { - "success": "Content filter successfully added" - }, - "header": { - "modal": "Do you want to hide content from artist \"{ name }\"?", - "failure": "Error while creating filter" - }, - "warning": { - "createFilter": { - "listItem2": "In \"Recently added\" widget", - "listItem3": "In artists and album listings", - "listItem1": "In other users' favourites and listening history", - "listItem4": "In radio suggestions", - "listIntro": "You will not see tracks, albums and user activity linked to this artist any more:" - } - }, - "help": { - "createFilter": "You can manage and update your filters any time from your account settings." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "An error occurred while trying to refresh data:", - "success": "Data was refreshed successfully from remote server.", - "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", - "skipped": "The remote server answered, but returned data was unsupported by Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "An HTTP error occurred while contacting the remote server", - "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", - "connectionError": "Impossible to connect to the remote server", - "httpStatus": "The remote server answered with HTTP { status }", - "timeoutError": "The remote server didn't respond quickly enough", - "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", - "unknownError": "Unknown error" - }, - "label": { - "detail": "Error detail", - "type": "Error type" - } - } - }, - "button": { - "close": "Close", - "reload": "Close and reload page" - }, - "header": { - "saveFailure": "Error while saving settings", - "failure": "Refresh error", - "pending": "Refresh pending", - "success": "Refresh successful", - "skipped": "Refresh was skipped", - "refresh": "Refreshing object from remote serverā€¦" - }, - "loader": { - "fetchRequest": "Requesting a fetchā€¦", - "awaitingResult": "Waiting for resultā€¦" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "No matching library." - }, - "button": { - "showMore": "Show more" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Audio player shortcuts", - "clearQueue": "Clear queue", - "decreaseVolume": "Decrease volume", - "expandQueue": "Expand queue/player view", - "increaseVolume": "Increase volume", - "playPause": "Pause/play the current track", - "playNext": "Play next track", - "playPrevious": "Play previous track", - "seekBack30": "Seek backwards 30s", - "seekBack5": "Seek backwards 5s", - "seekForward30": "Seek forwards 30s", - "seekForward5": "Seek forwards 5s", - "shuffleQueue": "Shuffle queue", - "toggleFavorite": "Toggle favourite", - "toggleMute": "Toggle mute", - "toggleLoop": "Toggle queue looping" - }, - "general": { - "focus": "Focus searchbar", - "label": "General shortcuts", - "show": "Show available keyboard shortcuts", - "unfocus": "Unfocus searchbar" - } - }, - "button": { - "close": "Close" - }, - "header": { - "modal": "Keyboard shortcuts" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Cancel", - "submit": "Submit" - }, - "header": { - "chooseInstance": "Choose your instance", - "failure": "It is not possible to connect to the given URL", - "suggestions": "Suggested choices" - }, - "label": { - "url": "Instance URL" - }, - "help": { - "notFunkwhaleServer": "The given address is not a Funkwhale server", - "serverDown": "The server might be down", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." - }, - "message": { - "newUrl": "You are now using the Funkwhale instance at {url}", - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted." - } - }, - "Queue": { - "button": { - "clear": "Clear", - "close": "Close", - "stopRadio": "Stop radio" - }, - "label": { - "duration": "Duration", - "addArtistContentFilter": "Hide content from this artistā€¦", - "next": "Next track", - "pause": "Pause", - "play": "Play", - "previous": "Previous track", - "queue": "Queue", - "remove": "Remove", - "restart": "Restart track", - "populatingRadio": "Fetching radio track...", - "selectTrack": "Select track", - "favorite": "Favourite track", - "enterFullscreen": "Enter fullscreen mode", - "exitFullscreen": "Exit fullscreen mode", - "showCoverArt": "Show Cover Art", - "showVisualizer": "Show MoonDrop visualiser" - }, - "message": { - "radio": "New tracks will be appended here automatically.", - "automaticPlay": "The next track will play automatically in a few secondsā€¦" - }, - "header": { - "failure": "The track cannot be loaded", - "radio": "You have a radio playing", - "noSources": "The track has no available sources." - }, - "meta": { - "queuePosition": "Track {index} of {length}", - "startTime": "00:00" - }, - "warning": { - "connectivity": "You may have a connectivity issue." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copy" - }, - "title": "Show/hide password", - "message": { - "copy": "Text copied to clipboard!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Edit" - } - }, - "Button": { - "startRadio": "Play radio", - "stopRadio": "Stop radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Error while fetching object" - }, - "button": { - "fediverse": "Fediverse", - "rss": "RSS", - "search": "Search" - }, - "label": { - "fediverse": { - "fieldLabel": "Fediverse object", - "title": "Fediverse object", - "fieldPlaceholder": "{'@'}username{'@'}example.com" - }, - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml", - "fieldLabel": "RSS feed location", - "title": "Subscribe to a podcast RSS feed" - } - }, - "warning": { - "unsupported": "This kind of object isn't supported yet" - }, - "error": { - "fetchFailed": "This object cannot be retrieved" - }, - "description": { - "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", - "rss": "Use this form to subscribe to an RSS feed from its URL." - } - }, - "PageNotFound": { - "link": { - "home": "Go to home page" - }, - "title": "Page not found", - "header": { - "pageNotFound": "Page not found!" - }, - "message": { - "pageNotFound": "Sorry, the page you asked for does not exist:" - } - }, - "vui": { - "Pagination": { - "next": "Next Page", - "label": "Pagination", - "previous": "Previous Page" - } - }, - "tags": { - "List": { - "button": { - "more": "Show 1 more tag | Show { n } more tags" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episode | { n } episodes", - "listenings": "{ n } listening | { n } listenings", - "subscribers": "{ n } subscriber | { n } subscribers", - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "channelEpisodes": "All Episodes", - "mirrored": "Mirrored from { domain }", - "moderation": "Open in moderation interface", - "channelOverview": "Overview", - "channelTracks": "Tracks", - "domainView": "View on { domain }" - }, - "header": { - "artistChannel": "Artist channel", - "podcastChannel": "Podcast channel" - }, - "button": { - "cancel": "Cancel", - "confirm": "Delete", - "delete": "Deleteā€¦", - "edit": "Editā€¦", - "embed": "Embed", - "play": "Play", - "updateChannel": "Update channel", - "upload": "Upload" - }, - "title": "Channel", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copy-paste the following URL in your favourite podcatcher:" - }, - "header": "Subscribe via RSS" - }, - "fediverse": { - "content": { - "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" - }, - "header": "Subscribe on the Fediverse" - }, - "funkwhale": { - "header": "Subscribe on Funkwhale" - }, - "header": "Subscribe to this channel" }, - "delete": { - "header": "Delete this Channel?", - "content": { - "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this artist work on your website" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Add new", - "erroredUploads": "View errored uploads", - "skippedUploads": "View skipped uploads" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Latest episodes", - "latestTracks": "Latest tracks", - "series": "Series", - "uploadsFailure": "Some uploads couldn't be published", - "uploadsProcessing": "Uploads are being processed", - "uploadsSuccess": "Uploads published successfully" - }, - "meta": { - "progress": "Processed uploads:" - }, - "message": { - "processing": "Your uploads are being processed by Funkwhale and will be live very soon." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Add new" - }, - "button": { - "cancel": "Cancel", - "subscribe": "Subscribe" - }, - "placeholder": { - "search": "Filter by nameā€¦" - }, - "title": "Subscribed Channels", - "modal": { - "subscription": { - "header": "Subscription" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "details": "Library Details" - }, - "label": { - "size": "Total size of the files in this library" - }, - "button": { - "upload": "Upload" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } used of { max } allowed", - "errored": "Errored files", - "pending": "Pending files", - "skipped": "Skipped files" - }, - "header": { - "currentUsage": "Current usage" - }, - "loading": { - "currentUsage": "Loading usage dataā€¦" - }, - "button": { - "purge": "Purge" - }, - "modal": { - "purgeErrored": { - "header": "Purge errored files?", - "content": { - "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." - } - }, - "purgePending": { - "header": "Purge pending files?", - "content": { - "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." - } - }, - "purgeSkipped": { - "header": "Purge skipped files?", - "content": { - "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." - } - } - }, - "link": { - "viewFiles": "View files" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artist", - "duration": "Duration", - "importStatus": "Import status", - "size": "Size", - "title": "Title", - "uploadDate": "Upload date" + "code": "Code", + "link": "Share link" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Delete" + }, + "label": { + "expired": "Expired", + "search": "Search", + "status": "Status", + "unused": "Not used", + "used": "Used" }, "option": { - "status": { - "all": "All", - "draft": "Draft", - "failed": "Failed", - "finished": "Finished", - "pending": "Pending", - "skipped": "Skipped" - } + "all": "All", + "expired": "Expired/used", + "open": "Open" }, + "ordering": { + "label": "Ordering" + }, + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, + "placeholder": { + "search": "Search by username, e-mail address, codeā€¦" + }, + "table": { + "invitation": { + "header": { + "code": "Code", + "creationDate": "Creation date", + "expirationDate": "Expiry date", + "owner": "Owner", + "status": "Status", + "user": "User" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Search" + }, + "notApplicable": "N/A", "ordering": { "direction": { "ascending": "Ascending", @@ -3099,397 +2693,579 @@ }, "label": "Ordering" }, - "action": { - "delete": "Delete", - "restartImport": "Restart import" + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" }, - "label": { - "importStatus": "Import status", - "search": "Search" - }, - "notApplicable": "N/A", - "empty": { - "noTracks": "No tracks have been added to this library yet" + "permission": { + "library": "Library", + "moderation": "Moderation", + "settings": "Settings" }, "placeholder": { - "search": "Search by title, artist, albumā€¦" + "search": "Search by username, e-mail address, nameā€¦" }, - "button": { - "showStatus": "Show information about the upload status for this track" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Create a new library" - }, - "loading": { - "libraries": "Loading Librariesā€¦" - }, - "empty": { - "noLibrary": "Looks like you don't have a library, it's time to create one." - }, - "header": { - "libraries": "My libraries" - } - }, - "Form": { - "button": { - "create": "Create library", - "delete": "Delete", - "confirm": "Delete library", - "update": "Update library" - }, - "modal": { - "delete": { - "header": "Delete this library?", - "content": { - "warning": "The library and all its tracks will be deleted. This can not be undone." + "table": { + "user": { + "accountStatus": { + "active": "Active", + "inactive": "Inactive" + }, + "header": { + "accountStatus": "Account status", + "email": "Email", + "lastActivity": "Last activity", + "permissions": "Permissions", + "signup": "Sign-up", + "status": "Status", + "username": "Username" + }, + "status": { + "admin": "Admin", + "regular": "Regular user", + "staff": "Staff member" } } - }, - "label": { - "description": "Description", - "name": "Name", - "visibility": "Visibility" - }, - "header": { - "failure": "Error" - }, - "description": { - "library": "Libraries help you organise and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", - "visibility": "You are able to share your library with other people, regardless of its visibility." - }, - "message": { - "libraryCreated": "Library created", - "libraryDeleted": "Library deleted", - "libraryUpdated": "Library updated" - }, - "placeholder": { - "name": "My awesome library", - "description": "This library contains my personal music, I hope you like it." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks", - "failedTracks": "Failed tracks:", - "lastUpdate": "Last update:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "By unfollowing this library, you lose access to its content." - }, - "header": "Unfollow this library?" - } - }, - "button": { - "cancel": "Cancel follow request", - "follow": "Follow", - "pending": "Follow request pending approval", - "unfollow": "Unfollow" - }, - "link": { - "scanDetails": "Details", - "scan": "Scan now" - }, - "label": { - "scanFailure": "Problem during scanning", - "scanPending": "Scan pending", - "scanSuccess": "Scanned", - "scanPartialSuccess": "Scanned with errors", - "scanProgress": "Scanningā€¦ ({ progress }%)", - "sharingLink": "Sharing link" - }, - "message": { - "scanLaunched": "Scan launched", - "scanSkipped": "Scan skipped (previous scan is too recent)" - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely" - } - }, - "ScanForm": { - "header": { - "failure": "Could not fetch remote library" - }, - "placeholder": { - "url": "Enter a library URL" - }, - "label": { - "search": "Search a remote library" - }, - "button": { - "submit": "Submit search" - } - }, - "Home": { - "header": { - "knownLibraries": "Known libraries", - "remoteLibraries": "Remote libraries" - }, - "loading": { - "remoteLibraries": "Loading remote librariesā€¦" - }, - "button": { - "refresh": "Refresh" - }, - "description": { - "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." - } - } - }, - "Home": { - "title": "Add and manage content", - "description": { - "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", - "channel": { - "1": "If you are a musician or a podcaster, channels are designed for you!", - "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." - }, - "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." - }, - "header": { - "follow": "Follow remote libraries", - "channel": "Publish your work in a channel", - "upload": "Upload third-party content in a library" - }, - "button": { - "start": "Get started" - }, - "help": { - "uploadQuota": "This instance offers up to {quota} of storage space for every user." - } - }, - "Base": { - "title": "Add content", - "link": { - "libraries": "Libraries", - "tracks": "Tracks" - }, - "menu": { - "secondary": "Secondary menu" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "moderation": "Open in moderation interface", - "owner": "Owned by { username }", - "tracks": "Tracks", - "domain": "View on { domain }" - }, - "button": { - "edit": "Edit", - "upload": "Upload" - }, - "title": "Library", - "label": { - "private": "Private", - "public": "Public", - "instance": "Restricted", - "sharingLink": "Sharing link" - }, - "description": { - "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely", - "instance": "This library is restricted to users on this pod only" - } - }, - "Edit": { - "button": { - "accept": "Accept", - "reject": "Reject" - }, - "table": { - "action": { - "status": { - "accepted": "Accepted", - "pending": "Pending approval", - "rejected": "Rejected" - }, - "header": { - "action": "Action", - "date": "Date", - "status": "Status", - "user": "User" - } - } - }, - "header": { - "followers": "Followers", - "libraryContents": "Library contents" - }, - "loading": { - "followers": "Loading followersā€¦" - }, - "empty": { - "noFollowers": "Nobody is following this library" - } - }, - "DetailAlbums": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - }, - "DetailOverview": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - }, - "DetailTracks": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - } - }, - "auth": { - "ProfileBase": { - "title": "{ username }'s profile", - "link": { - "activity": "Activity", - "moderation": "Open in moderation interface", - "overview": "Overview", - "domainView": "View on { domain }" - }, - "label": { - "self": "This is you!" - } - }, - "PasswordReset": { - "label": { - "email": "Account's e-mail address" - }, - "button": { - "requestReset": "Ask for a password reset" - }, - "link": { - "back": "Back to login" - }, - "placeholder": { - "email": "Enter the e-mail address linked to your account" - }, - "header": { - "failure": "Error while asking for a password reset", - "reset": "Reset your password" - }, - "title": "Reset your password", - "help": { - "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Add new" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Artist channel" - }, - "header": "Create channel", - "podcast": { - "header": "Podcast channel" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Cancel", - "createChannel": "Create channel", - "next": "Next step", - "previous": "Previous step" + "hide": "Hide content" }, "header": { - "channels": "Channels", - "sharedLibraries": "This user shared the following libraries", - "libraries": "User Libraries" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Back to login", - "login": "Proceed to login" + "failure": "Error while creating filter", + "modal": "Do you want to hide content from artist \"{name}\"?" }, - "title": "Change your password", - "header": { - "failure": "Error while changing your password", - "success": "Password updated successfully" + "help": { + "createFilter": "You can manage your filters any time from your account settings." }, "message": { - "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", - "success": "Your password has been updated successfully." + "success": "Content filter successfully added" }, + "warning": { + "createFilter": { + "listIntro": "You will not see tracks, albums and user activity linked to this artist any more:", + "listItem1": "In other users' favourites and listening history", + "listItem2": "In \"Recently added\" widget", + "listItem3": "In artists and album listings", + "listItem4": "In radio suggestions" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "New password" + "category": "Category" }, + "option": { + "all": "All" + } + }, + "ReportModal": { "button": { - "update": "Update your password" - } - }, - "EmailConfirm": { - "title": "Confirm your e-mail address", - "label": { - "confirmationCode": "Confirmation code" + "cancel": "Cancel", + "submit": "Submit report" + }, + "description": { + "email": "We'll use this e-mail address if we need to contact you regarding this report.", + "forwardToDomain": "Forward an anonymised copy of your report to the server hosting this element.", + "message": "Use this field to provide additional context to the moderator that will handle your report.", + "modal": "Use this form to submit a report to our moderation team" + }, + "error": { + "nodeinfoFetch": "Cannot fetch Node Info: {error}" }, "header": { - "failure": "Could not confirm your e-mail address", - "success": "E-mail address confirmed" + "disabled": "Anonymous reports are disabled, please sign in to submit a report.", + "modal": "Do you want to report this object?", + "submissionFailure": "Error while submitting report" }, - "link": { - "login": "Proceed to login", - "back": "Return to login" + "label": { + "email": "Email", + "forwardToDomain": "Forward to {domain}", + "message": "Message" }, "message": { - "success": "You can now use the service without limitations." - } - }, - "Signup": { - "header": { - "createAccount": "Create a Funkwhale account" - }, - "title": "Sign Up" - }, - "Login": { - "title": "Log In", - "header": { - "login": "Log in to your Funkwhale account" - } - }, - "Callback": { - "header": { - "loggingIn": "Logging inā€¦" - } - }, - "Plugins": { - "title": "Manage plugins" - }, - "ProfileActivity": { - "header": { - "playlists": "Playlists", - "recentlyFavorited": "Recently favourited", - "recentlyListened": "Recently listened" + "submissionSuccess": "Report successfully submitted, thank you" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Approve", + "markRead": "Mark as read", + "markUnread": "Mark as unread", + "reject": "Reject" + }, + "message": { + "libraryAcceptFollow": "{username} accepted your follow on library \"{library}\"", + "libraryFollow": "{username} followed your library \"{library}\"", + "libraryPendingFollow": "{username} wants to follow your library \"{library}\"", + "libraryReject": "You rejected {username}'s request to follow \"{library}\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Editor": { + "button": { + "addDuplicate": "Add anyway", + "clear": "Clear playlist", + "copy": "Copy the current queue to this playlist", + "insertFromQueue": "Insert from queue ({n} track) | Insert from queue ({n} tracks" + }, + "error": { + "sync": "An error occurred while saving your changes" + }, + "header": { + "editor": "Playlist editor" + }, + "help": { + "reorder": "Drag and drop rows to reorder tracks in the playlist" + }, + "loading": { + "sync": "Syncing changes to serverā€¦" + }, + "message": { + "sync": "Changes synced with server" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "This will remove all tracks from this playlist and cannot be undone." + }, + "header": "Do you want to clear the playlist \"{playlist}\"?" + } + }, + "warning": { + "duplicate": "Some tracks in your queue are already in this playlist:" + } + }, + "Form": { + "button": { + "create": "Create playlist", + "update": "Update playlist" + }, + "header": { + "createFailure": "The playlist could not be created", + "createPlaylist": "Create a new playlist", + "createSuccess": "Playlist created", + "updateSuccess": "Playlist updated" + }, + "label": { + "name": "Playlist name", + "visibility": "Playlist visibility" + }, + "placeholder": { + "name": "My awesome playlist" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Add anyway", + "addToPlaylist": "Add to this playlist", + "addTrack": "Add track", + "cancel": "Cancel", + "edit": "Edit" + }, + "empty": { + "noPlaylists": "No playlists have been created yet" + }, + "header": { + "addFailure": "The track can't be added to a playlist", + "addToPlaylist": "Add to playlist", + "available": "Available playlists", + "manage": "Manage playlists", + "noResults": "No results matching your filter", + "track": "{title}, by {artist}" + }, + "label": { + "filter": "Filter" + }, + "placeholder": { + "filterPlaylist": "Enter playlist name" + }, + "table": { + "edit": { + "header": { + "edit": "Edit", + "lastModification": "Last modification", + "name": "Name", + "tracks": "Tracks" + } + } + }, + "warning": { + "duplicate": "{ 0 } is already in { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Add to playlistā€¦" + } + }, + "Widget": { + "button": { + "create": "Create playlist", + "more": "Show more" + }, + "placeholder": { + "noPlaylists": "No playlists have been created yet" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Start artists radio", + "startPlaylistsRadio": "Start playlists radio", + "startRadio": "Play radio", + "startTagsRadio": "Start tags radio", + "stopArtistsRadio": "Stop artists radio", + "stopPlaylistsRadio": "Stop playlists radio", + "stopRadio": "Stop radio", + "stopTagsRadio": "Stop tags radio" + }, + "Card": { + "button": { + "edit": "Edit" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Show 1 more tag | Show {n} more tags" + } + } + }, + "vui": { + "Pagination": { + "label": "Pagination", + "next": "Next Page", + "previous": "Previous Page" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{n} tracks were added to your queue | {n} track was added to your queue | {n} tracks were added to your queue" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Music", + "other": "Other", + "podcast": "Podcast" + }, + "label": "Content category" + }, + "importStatus": { + "choices": { + "draft": { + "help": "This track has been uploaded, but hasn't been scheduled for processing yet", + "label": "Draft" + }, + "errored": { + "help": "This track could not be processed, please make sure it is tagged correctly", + "label": "Errored" + }, + "finished": { + "help": "Imported", + "label": "Finished" + }, + "pending": { + "help": "This track has been uploaded, but hasn't been processed by the server yet", + "label": "Pending" + }, + "skipped": { + "help": "This track is already present in one of your libraries", + "label": "Skipped" + } + }, + "label": "Click to display more information about the import process for this upload" + }, + "privacyLevel": { + "choices": { + "instance": "Everyone on this instance", + "private": "Nobody except me", + "public": "Everyone, across all instances" + }, + "help": "Determine the visibility level of your activity", + "label": "Activity visibility", + "shortChoices": { + "instance": "Instance", + "private": "Private", + "public": "Everyone" + } + }, + "reportType": { + "choices": { + "illegalContent": "Illegal content", + "invalidMetadata": "Invalid metadata", + "offensiveContent": "Offensive content", + "other": "Other", + "takedownRequest": "Takedown request" + }, + "label": "Category" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Accessed date", + "albumTitle": "Album name", + "appliedDate": "Applied date", + "artistName": "Artist name", + "bitrate": "Bitrate", + "creationDate": "Creation date", + "dateJoined": "Sign-up date", + "domain": "Domain", + "duration": "Duration", + "expirationDate": "Expiry date", + "firstSeen": "First seen date", + "followers": "Followers", + "handledDate": "Handled date", + "itemsCount": "Items", + "lastActivity": "Last activity", + "lastSeen": "Last seen date", + "modificationDate": "Modification date", + "name": "Name", + "receivedMessages": "Received messages", + "releaseDate": "Release date", + "size": "Size", + "trackTitle": "Track name", + "uploads": "Uploads", + "username": "Username", + "users": "Users" + }, + "scopes": { + "edits": { + "description": "Access to edits", + "label": "Edits" + }, + "favorites": { + "description": "Access to favourites", + "label": "Favourites" + }, + "filters": { + "description": "Access to content filters", + "label": "Content filters" + }, + "follows": { + "description": "Access to follows", + "label": "Follows" + }, + "libraries": { + "description": "Access to audio files, libraries, artists, albums and tracks", + "label": "Libraries and uploads" + }, + "listenings": { + "description": "Access to listening history", + "label": "Listenings" + }, + "notifications": { + "description": "Access to notifications", + "label": "Notifications" + }, + "playlists": { + "description": "Access to playlists", + "label": "Playlists" + }, + "profile": { + "description": "Access to e-mail, username, and profile information", + "label": "Profile" + }, + "radios": { + "description": "Access to radios", + "label": "Radios" + }, + "reports": { + "description": "Access to moderation reports", + "label": "Reports" + }, + "security": { + "description": "Access to security settings such as password and authorisation", + "label": "Security" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "name": "Name" + }, + "cover": { + "label": "Cover" + }, + "description": { + "label": "Description" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "license": "License", + "position": "Position", + "title": "Title" + } + }, + "useReport": { + "account": { + "label": "Report {'@'}{username}", + "typeLabel": "Account" + }, + "album": { + "label": "Report this albumā€¦", + "typeLabel": "Album" + }, + "artist": { + "label": "Report this artistā€¦", + "typeLabel": "Artist", + "unknownLabel": "Unknown artist" + }, + "channel": { + "label": "Report this channelā€¦", + "typeLabel": "Channel" + }, + "library": { + "label": "Report this libraryā€¦", + "typeLabel": "Library" + }, + "playlist": { + "label": "Report this playlistā€¦", + "typeLabel": "Playlist" + }, + "track": { + "label": "Report this trackā€¦", + "typeLabel": "Track" + } + }, + "useReportConfigs": { + "account": { + "label": "Account", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "label": "Artist" + }, + "channel": { + "label": "Channel" + }, + "creationDate": { + "label": "Creation date" + }, + "library": { + "description": "Description", + "label": "Library" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Name" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "label": "Track", + "license": "License", + "position": "Position", + "title": "Title" + }, + "visibility": { + "label": "Visibility" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", + "errorReportTitle": "An unexpected error occurred.", + "leaveFeedback": "Leave feedback", + "unexpectedError": "An unexpected error occurred." + }, + "useThemeList": { + "browserDefault": "Browser default", + "darkTheme": "Dark", + "lightTheme": "Light" + } + }, + "init": { + "axios": { + "rateLimitDelay": "You sent too many requests and have been rate limited, please try again in {delay}", + "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" + }, + "sentry": { + "allow": "Allow", + "deny": "Deny", + "funkwhaleInstance": "Funkwhale's official Glitchtip instance", + "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", + "title": "To enhance the quality of our services, we would like to collect information about crashes during your session." + }, + "serviceWorker": { + "actions": { + "later": "Later", + "update": "Update" + }, + "newAppVersion": "A new version of the app is available." + } + }, + "views": { "Notifications": { + "button": { + "read": "Mark all as read", + "submit": "Got it!" + }, + "empty": { + "notifications": "No notification to show" + }, + "header": { + "funkwhaleSupport": "Do you like Funkwhale?", + "instanceSupport": "Support this Funkwhale pod", + "messages": "Your messages", + "notifications": "Your notifications" + }, + "label": { + "reminder": "Remind me in:", + "showRead": "Show read notifications" + }, + "link": { + "donate": "Donate", + "help": "Discover other ways to help" + }, + "loading": { + "notifications": "Loading notificationsā€¦" + }, + "message": { + "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" + }, "option": { "delay": { "30": "30 days", @@ -3498,584 +3274,63 @@ "never": "Never" } }, - "link": { - "help": "Discover other ways to help", - "donate": "Donate" + "title": "Notifications" + }, + "Search": { + "button": { + "submit": "Submit Search Query" }, "header": { - "funkwhaleSupport": "Do you like Funkwhale?", - "instanceSupport": "Support this Funkwhale pod", - "messages": "Your messages", - "notifications": "Your notifications" + "remote": "Search a remote object", + "rss": "Subscribe to a podcast RSS feed", + "search": "Search" }, - "button": { - "submit": "Got it!", - "read": "Mark all as read" - }, - "loading": { - "notifications": "Loading notificationsā€¦" - }, - "empty": { - "notifications": "No notification to show." - }, - "title": "Notifications", "label": { - "reminder": "Remind me in:", - "showRead": "Show read notifications" - }, - "message": { - "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" + "albums": "Albums", + "artists": "Artists", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Tags", + "tracks": "Tracks" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Username", - "loginStatus": { - "disabled": "Disabled", - "enabled": "Enabled", - "label": "Login status" - }, - "displayName": "Display name", - "email": "Email address", - "lastActivity": "Last activity", - "lastChecked": "Last checked", - "permissions": "Permissions", - "signupDate": "Sign-up date", - "userType": "Type" - }, - "audioContent": { - "cachedSize": "Cached size", - "megabyte": "MB", - "totalSize": "Total size", - "uploadQuota": "Upload quota" - }, - "activity": { - "emittedFollows": "Emitted library follows", - "emittedMessages": "Emitted messages", - "firstSeen": "First seen", - "receivedFollows": "Received library follows" - } - }, - "header": { - "accountData": "Account data", - "activity": "Activity", - "audioContent": "Audio content", - "localAccount": "Local account", - "activePolicy": "This domain is subject to specific moderation rules", - "noPolicy": "You don't have any rule in place for this account." - }, - "button": { - "addPolicy": "Add a moderation policy" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "domain": "Domain", - "libraries": "Libraries", - "linkedReports": "Linked reports", - "openProfile": "Open profile", - "remoteProfile": "Open remote profile", - "requests": "Requests", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "tooltip": { - "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." - }, - "option": { - "permission": { - "library": "Library", - "moderation": "Moderation", - "settings": "Settings" - } - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account." - }, - "notApplicable": "N/A", - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "Base": { - "link": { - "accounts": "Accounts", - "domains": "Domains", - "reports": "Reports", - "userRequests": "User Requests" - }, - "title": "Moderation", - "menu": { - "secondary": "Secondary menu" - } - }, - "DomainsDetail": { - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "instanceData": "Instance data", - "activePolicy": "This domain is subject to specific moderation rules", - "noPolicy": "You don't have any rule in place for this domain." - }, - "button": { - "addPolicy": "Add a moderation policy", - "addToAllowList": "Add to allow-list", - "refreshNodeInfo": "Refresh node info", - "removeFromAllowList": "Remove from allow-list" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "knownAccounts": "Known accounts", - "libraries": "Libraries", - "website": "Open website", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "activity": { - "emittedFollows": "Emitted library follows", - "emittedMessages": "Emitted messages", - "firstSeen": "First seen", - "receivedFollows": "Received library follows" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Error while fetching node info", - "label": "Status" - }, - "inAllowList": { - "label": "Is present on allow-list", - "false": "No", - "true": "Yes" - }, - "lastChecked": "Last checked", - "domainName": "Name", - "software": { - "label": "Software" - }, - "totalUsers": "Total users" - } - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account." - }, - "notApplicable": "N/A", - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "DomainsList": { - "button": { - "add": "Add" - }, - "label": { - "addDomain": "Add a domain", - "addToAllowList": "Add to allow-list" - }, - "title": "Domains", - "header": { - "domains": "Domains", - "failure": "Error while creating domain" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "All", - "resolved": "Resolved", - "unresolved": "Unresolved" - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "title": "Reports", - "header": { - "reports": "Reports" - }, - "label": { - "search": "Search", - "status": "Status" - }, - "placeholder": { - "search": "Search by account, summary, domainā€¦" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "All", - "approved": "Approved", - "pending": "Pending", - "refused": "Refused" - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "label": { - "search": "Search", - "status": "Status" - }, - "placeholder": { - "search": "Search by usernameā€¦" - }, - "title": "User Requests", - "header": { - "userRequests": "User Requests" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Accessed date", - "firstSeen": "First seen" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Cached size", - "duration": "Duration", - "size": "Size", - "track": "Track" - }, - "upload": { - "name": "Name" - } - }, - "link": { - "account": "Account", - "domain": "Domain", - "importStatus": "Import status", - "library": "Library", - "remoteProfile": "Open remote profile", - "type": "Type", - "django": "View in Django's admin", - "visibility": "Visibility" - }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "local": "Local", - "uploadData": "Upload date" - }, - "button": { - "delete": "Delete", - "download": "Download" - }, - "modal": { - "delete": { - "header": "Delete this upload?", - "content": { - "warning": "The upload will be removed. This action is irreversible." - } - } - }, - "notApplicable": "N/A" - }, - "LibraryDetail": { - "link": { - "account": "Account", - "albums": "Albums", - "artists": "Artists", - "domain": "Domain", - "reports": "Linked reports", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin", - "visibility": "Visibility" - }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "libraryData": "Library data", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "library": { - "description": "Description", - "name": "Name" - }, - "activity": { - "firstSeen": "First seen", - "followers": "Followers" - } - }, - "button": { - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this library?", - "content": { - "warning": "The library will be removed, as well as associated uploads, and follows. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "AlbumDetail": { - "header": { - "activity": "Activity", - "albumData": "Album data", - "audioContent": "Audio content", - "local": "Local" - }, - "link": { - "artist": "Artist", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "album": { - "description": "Description", - "title": "Title" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "ArtistDetail": { - "header": { - "activity": "Activity", - "artistData": "Artist data", - "audioContent": "Audio content", - "local": "Local" - }, - "link": { - "albums": "Albums", - "category": "Category", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "artist": { - "description": "Description", - "name": "Name" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this artist?", - "content": { - "warning": "The artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "TagDetail": { - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "tagData": "Tag data" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "localProfile": "Open local profile", - "tracks": "Tracks", - "django": "View in Django's admin" - }, - "button": { - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this tag?", - "content": { - "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." - } - } - }, - "table": { - "activity": { - "firstSeen": "First seen" - }, - "tag": { - "name": "Name" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Activity", - "local": "Local", - "trackData": "Track data" - }, - "link": { - "album": "Album", - "albumArtist": "Album artist", - "artist": "Artist", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "trackData": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "track": { - "copyright": "Copyright", - "description": "Description", - "discNumber": "Disc number", - "license": "License", - "position": "Position", - "title": "Title" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "edits": "Edits", - "libraries": "Libraries", - "tags": "Tags", - "tracks": "Tracks", - "uploads": "Uploads" - }, - "title": "Manage library", - "menu": { - "secondary": "Secondary menu" - } - }, - "EditsList": { - "title": "Edits", - "header": { - "edits": "Library edits" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Delete", + "openRemote": "Open remote profile", + "refresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "channelData": "Channel data" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "View in Django's admin", + "localProfile": "Open local profile" + }, + "modal": { + "delete": { + "content": { + "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." + }, + "header": "Delete this channel?" + } + }, "table": { - "channelData": { - "account": "Account", - "category": "Category", - "description": "Description", - "domain": "Domain", - "name": "Name", - "rss": "RSS Feed", - "url": "URL" + "activity": { + "edits": "Edits", + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "linkedReports": "Linked reports", + "listenings": "Listenings", + "playlists": "Playlists" }, "audioContent": { "albums": "Albums", @@ -4084,40 +3339,16 @@ "tracks": "Tracks", "uploads": "Uploads" }, - "activity": { - "edits": "Edits", - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "linkedReports": "Linked reports", - "listenings": "Listenings", - "playlists": "Playlists" + "channelData": { + "account": "Account", + "category": "Category", + "description": "Description", + "domain": "Domain", + "name": "Name", + "rss": "RSS Feed", + "url": "URL" } }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "channelData": "Channel data" - }, - "button": { - "delete": "Delete", - "openRemote": "Open remote profile", - "refresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this channel?", - "content": { - "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin" - }, "warning": { "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } @@ -4141,53 +3372,1205 @@ "channels": "Channels", "federation": "Federation", "instanceInfo": "Instance information", - "settings": "Instance settings", "moderation": "Moderation", "music": "Music", "playlists": "Playlists", "sections": "Sections", "security": "Security", + "settings": "Instance Settings", "signups": "Sign-ups", "stats": "Statistics", "subsonic": "Subsonic", "ui": "User Interface" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "albumData": "Album data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "artist": "Artist", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this album?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "album": { + "description": "Description", + "title": "Title" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "ArtistDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "artistData": "Artist data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Category", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The artist will be deleted, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this artist?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "artist": { + "description": "Description", + "name": "Name" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "edits": "Edits", + "libraries": "Libraries", + "tags": "Tags", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Manage library" + }, + "EditsList": { + "header": { + "edits": "Library edits" + }, + "title": "Edits" + }, + "LibraryDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "libraryData": "Library data", + "local": "Local" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "domain": "Domain", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The library will be deleted, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this library?" + } + }, + "table": { + "activity": { + "firstSeen": "First seen", + "followers": "Followers" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, + "library": { + "description": "Description", + "name": "Name" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "TagDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "tagData": "Tag data" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "localProfile": "Open local profile", + "tracks": "Tracks" + }, + "modal": { + "delete": { + "content": { + "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." + }, + "header": "Delete this tag?" + } + }, + "table": { + "activity": { + "firstSeen": "First seen" + }, + "tag": { + "name": "Name" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "local": "Local", + "trackData": "Track data" + }, + "link": { + "album": "Album", + "albumArtist": "Album artist", + "artist": "Artist", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + }, + "header": "Delete this track?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "track": { + "copyright": "Copyright", + "description": "Description", + "discNumber": "Disc number", + "license": "License", + "position": "Position", + "title": "Title" + }, + "trackData": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "UploadDetail": { + "button": { + "delete": "Delete", + "download": "Download" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "local": "Local", + "uploadData": "Upload date" + }, + "link": { + "account": "Account", + "django": "View in Django's admin", + "domain": "Domain", + "importStatus": "Import status", + "library": "Library", + "remoteProfile": "Open remote profile", + "type": "Type", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The upload will be removed. This action is irreversible." + }, + "header": "Delete this upload?" + } + }, + "notApplicable": "N/A", + "table": { + "activity": { + "accessedDate": "Accessed date", + "firstSeen": "First seen" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Cached size", + "duration": "Duration", + "size": "Size", + "track": "Track" + }, + "upload": { + "name": "Name" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Add a moderation policy" + }, + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" + }, + "header": { + "accountData": "Account data", + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activity", + "audioContent": "Audio content", + "localAccount": "Local account", + "noPolicy": "You don't have any rule in place for this account." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "domain": "Domain", + "libraries": "Libraries", + "linkedReports": "Linked reports", + "openProfile": "Open profile", + "remoteProfile": "Open remote profile", + "requests": "Requests", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "notApplicable": "N/A", + "option": { + "permission": { + "library": "Library", + "moderation": "Moderation", + "settings": "Settings" + } + }, + "table": { + "accountData": { + "displayName": "Display name", + "email": "Email address", + "lastActivity": "Last activity", + "lastChecked": "Last checked", + "loginStatus": { + "disabled": "Disabled", + "enabled": "Enabled", + "label": "Login status" + }, + "permissions": "Permissions", + "signupDate": "Sign-up date", + "userType": "Type", + "username": "Username" + }, + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "megabyte": "MB", + "totalSize": "Total size", + "uploadQuota": "Upload quota" + } + }, + "tooltip": { + "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "accounts": "Accounts", + "domains": "Domains", + "reports": "Reports", + "userRequests": "User Requests" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Moderation" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Add a moderation policy", + "addToAllowList": "Add to allow-list", + "refreshNodeInfo": "Refresh node info", + "removeFromAllowList": "Remove from allow-list" + }, + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" + }, + "header": { + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activity", + "audioContent": "Audio content", + "instanceData": "Instance data", + "noPolicy": "You don't have any rule in place for this domain." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "knownAccounts": "Known accounts", + "libraries": "Libraries", + "tracks": "Tracks", + "uploads": "Uploads", + "website": "Open website" + }, + "notApplicable": "N/A", + "table": { + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, + "instanceData": { + "domainName": "Name", + "inAllowList": { + "false": "No", + "label": "Is present on allow-list", + "true": "Yes" + }, + "lastChecked": "Last checked", + "nodeInfoStatus": { + "label": "Status", + "value": "Error while fetching node info" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Total users" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "DomainsList": { + "button": { + "add": "Add" + }, + "header": { + "domains": "Domains", + "failure": "Error while creating domain" + }, + "label": { + "addDomain": "Add a domain", + "addToAllowList": "Add to allow-list" + }, + "title": "Domains" + }, + "ReportsList": { + "header": { + "reports": "Reports" + }, + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "status": { + "all": "All", + "resolved": "Resolved", + "unresolved": "Unresolved" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by account, summary, domainā€¦" + }, + "title": "Reports" + }, + "RequestsList": { + "header": { + "userRequests": "User Requests" + }, + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "status": { + "all": "All", + "approved": "Approved", + "pending": "Pending", + "refused": "Refused" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by username" + }, + "title": "User Requests" + } + }, "users": { "Base": { "link": { "invitations": "Invitations", "users": "Users" }, - "title": "Manage users", "menu": { "secondary": "Secondary menu" + }, + "title": "Manage users" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Logging inā€¦" + } + }, + "EmailConfirm": { + "header": { + "failure": "Could not confirm your e-mail address", + "success": "E-mail address confirmed" + }, + "label": { + "confirmationCode": "Confirmation code" + }, + "link": { + "back": "Return to login", + "login": "Proceed to login" + }, + "message": { + "success": "You can now use the service without limitations" + }, + "title": "Confirm your e-mail address" + }, + "Login": { + "header": { + "login": "Log in to your Funkwhale account" + }, + "title": "Log In" + }, + "PasswordReset": { + "button": { + "requestReset": "Ask for a password reset" + }, + "header": { + "failure": "Error while asking for a password reset", + "reset": "Reset your password" + }, + "help": { + "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." + }, + "label": { + "email": "Account's e-mail address" + }, + "link": { + "back": "Back to login" + }, + "placeholder": { + "email": "Enter the e-mail address linked to your account" + }, + "title": "Reset your password" + }, + "PasswordResetConfirm": { + "button": { + "update": "Update your password" + }, + "header": { + "failure": "Error while changing your password", + "success": "Password updated successfully" + }, + "label": { + "newPassword": "New password" + }, + "link": { + "back": "Back to login", + "login": "Proceed to login" + }, + "message": { + "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", + "success": "Your password has been updated successfully." + }, + "title": "Change your password" + }, + "Plugins": { + "title": "Manage plugins" + }, + "ProfileActivity": { + "header": { + "playlists": "Playlists", + "recentlyFavorited": "Recently favourited", + "recentlyListened": "Recently listened" + } + }, + "ProfileBase": { + "label": { + "self": "This is you!" + }, + "link": { + "activity": "Activity", + "domainView": "View on {domain}", + "moderation": "Open in moderation interface", + "overview": "Overview" + }, + "title": "{username}'s profile" + }, + "ProfileOverview": { + "button": { + "cancel": "Cancel", + "createChannel": "Create channel", + "next": "Next step", + "previous": "Previous step" + }, + "header": { + "channels": "Channels", + "libraries": "User Libraries", + "sharedLibraries": "This user shared the following libraries" + }, + "link": { + "addNew": "Add New" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Artist channel" + }, + "header": "Create channel", + "podcast": { + "header": "Podcast channel" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Create a Funkwhale account" + }, + "title": "Sign up" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Cancel", + "confirm": "Delete", + "delete": "Deleteā€¦", + "edit": "Editā€¦", + "embed": "Embed", + "play": "Play", + "updateChannel": "Update channel", + "upload": "Upload" + }, + "header": { + "artistChannel": "Artist channel", + "podcastChannel": "Podcast channel" + }, + "link": { + "channelEpisodes": "All episodes", + "channelOverview": "Overview", + "channelTracks": "Tracks", + "domainView": "View on {domain}", + "mirrored": "Mirrored from {domain}", + "moderation": "Open in moderation interface" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "listenings": "No listenings | {n} listening | {n} listenings", + "subscribers": "No subscribers | {n} subscriber | {n} subscribers", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "modal": { + "delete": { + "content": { + "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this Channel?" + }, + "embed": { + "header": "Embed this artist work on your website" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" + }, + "header": "Subscribe on the Fediverse" + }, + "funkwhale": { + "header": "Subscribe on Funkwhale" + }, + "header": "Subscribe to this channel", + "rss": { + "content": { + "help": "Copy-paste the following URL in your favourite podcatcher:" + }, + "header": "Subscribe via RSS" + } + } + }, + "title": "Channel" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Latest episodes", + "latestTracks": "Latest tracks", + "series": "Series", + "uploadsFailure": "Some uploads couldn't be published", + "uploadsProcessing": "Uploads are being processed", + "uploadsSuccess": "Uploads published successfully" + }, + "link": { + "addAlbum": "Add new", + "erroredUploads": "View errored uploads", + "skippedUploads": "View skipped uploads" + }, + "message": { + "processing": "Your uploads are being processed by Funkwhale and will be live very soon." + }, + "meta": { + "progress": "Processed uploads: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Cancel", + "subscribe": "Subscribe" + }, + "link": { + "addNew": "Add new" + }, + "modal": { + "subscription": { + "header": "Subscription" + } + }, + "placeholder": { + "search": "Filter by nameā€¦" + }, + "title": "Subscribed Channels" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Libraries", + "tracks": "Tracks" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Add content" + }, + "Home": { + "button": { + "start": "Get started" + }, + "description": { + "channel": { + "1": "If you are a musician or a podcaster, channels are designed for you!", + "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." + }, + "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", + "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." + }, + "header": { + "channel": "Publish your work in a channel", + "follow": "Follow remote libraries", + "upload": "Upload third-party content in a library" + }, + "help": { + "uploadQuota": "This instance offers up to {quota} of storage space for every user." + }, + "title": "Add and manage content" + }, + "libraries": { + "Card": { + "button": { + "upload": "Upload" + }, + "label": { + "size": "Total size of the files in this library" + }, + "link": { + "details": "Library Details" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "FilesTable": { + "action": { + "delete": "Delete", + "restartImport": "Restart import" + }, + "button": { + "showStatus": "Show information about the upload status for this track" + }, + "empty": { + "noTracks": "No tracks have been added to this library yet" + }, + "label": { + "importStatus": "Import status", + "search": "Search" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "All", + "draft": "Draft", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, albumā€¦" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artist", + "duration": "Duration", + "importStatus": "Import status", + "size": "Size", + "title": "Title", + "uploadDate": "Upload date" + } + } + } + }, + "Form": { + "button": { + "confirm": "Delete library", + "create": "Create library", + "delete": "Delete", + "update": "Update library" + }, + "description": { + "library": "Libraries help you organise and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", + "visibility": "You are able to share your library with other people, regardless of its visibility." + }, + "header": { + "failure": "Error" + }, + "label": { + "description": "Description", + "name": "Name", + "visibility": "Visibility" + }, + "message": { + "libraryCreated": "Library created", + "libraryDeleted": "Library deleted", + "libraryUpdated": "Library updated" + }, + "modal": { + "delete": { + "content": { + "warning": "The library and all its tracks will be deleted. This can not be undone." + }, + "header": "Delete this library?" + } + }, + "placeholder": { + "description": "This library contains my personal music, I hope you like it.", + "name": "My awesome library" + } + }, + "Home": { + "empty": { + "noLibrary": "Looks like you don't have a library, it's time to create one." + }, + "header": { + "libraries": "My libraries" + }, + "link": { + "createLibrary": "Create a new library" + }, + "loading": { + "libraries": "Loading librariesā€¦" + } + }, + "Quota": { + "button": { + "purge": "Purge" + }, + "header": { + "currentUsage": "Current usage" + }, + "label": { + "currentUsage": "{amount} used on {max} allowed", + "errored": "Errored files", + "pending": "Pending files", + "percentUsed": "{progress}%", + "skipped": "Skipped files" + }, + "link": { + "viewFiles": "View files" + }, + "loading": { + "currentUsage": "Loading usage dataā€¦" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." + }, + "header": "Purge errored files?" + }, + "purgePending": { + "content": { + "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." + }, + "header": "Purge pending files?" + }, + "purgeSkipped": { + "content": { + "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." + }, + "header": "Purge skipped files?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "pending": "Follow request pending approval", + "unfollow": "Unfollow" + }, + "error": { + "follow": "Cannot follow remote library: {error}", + "unfollow": "Cannot unfollow remote library: {error}" + }, + "label": { + "scanFailure": "Problem during scanning", + "scanPartialSuccess": "Scanned with errors", + "scanPending": "Scan pending", + "scanProgress": "Scanning ({progress})", + "scanSuccess": "Scanned", + "sharingLink": "Sharing link" + }, + "link": { + "scan": "Scan now ", + "scanDetails": "Details" + }, + "message": { + "scanLaunched": "Scan launched", + "scanSkipped": "Scan skipped (previous scan is too recent)" + }, + "meta": { + "failedTracks": "Failed tracks: {tracks}", + "lastUpdate": "Last update: ", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "modal": { + "unfollow": { + "content": { + "warning": "By unfollowing this library, you lose access to its content." + }, + "header": "Unfollow this library?" + } + }, + "tooltip": { + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" + } + }, + "Home": { + "button": { + "refresh": "Refresh" + }, + "description": { + "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." + }, + "header": { + "knownLibraries": "Known libraries", + "remoteLibraries": "Remote libraries" + }, + "loading": { + "remoteLibraries": "Loading remote librariesā€¦" + } + }, + "ScanForm": { + "button": { + "submit": "Submit search" + }, + "header": { + "failure": "Could not fetch remote library" + }, + "label": { + "search": "Search a remote library" + }, + "placeholder": { + "url": "Enter a library URL" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artists", - "playlists": "Playlists", - "podcasts": "Podcasts", - "radios": "Radios", - "series": "Series", - "tags": "Tags", - "tracks": "Tracks" + "library": { + "DetailAlbums": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } }, - "header": { - "search": "Search", - "remote": "Search a remote object", - "rss": "Subscribe to a podcast RSS feed" + "DetailOverview": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } }, - "button": { - "submit": "Submit Search Query" + "DetailTracks": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } + }, + "Edit": { + "button": { + "accept": "Accept", + "reject": "Reject" + }, + "empty": { + "noFollowers": "Nobody is following this library" + }, + "header": { + "followers": "Followers", + "libraryContents": "Library contents" + }, + "loading": { + "followers": "Loading followersā€¦" + }, + "table": { + "action": { + "header": { + "action": "Action", + "date": "Date", + "status": "Status", + "user": "User" + }, + "status": { + "accepted": "Accepted", + "pending": "Pending approval", + "rejected": "Rejected" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Edit", + "upload": "Upload" + }, + "description": { + "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." + }, + "label": { + "instance": "Restricted", + "private": "Private", + "public": "Public", + "sharingLink": "Sharing link" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "owner": "Owned by {username}", + "tracks": "Tracks" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Library", + "tooltip": { + "instance": "This library is restricted to users on this pod only", + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Cancel", + "confirm": "Delete playlist", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "playAll": "Play all", + "stopEdit": "Stop Editing" + }, + "empty": { + "noTracks": "There are no tracks in this playlist yet" + }, + "header": { + "tracks": "Tracks" + }, + "meta": { + "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" + }, + "modal": { + "delete": { + "content": { + "warning": "This will completely delete this playlist and cannot be undone." + }, + "header": "Do you want to delete the playlist {playlist}?" + }, + "embed": { + "header": "Embed this playlist on your website" + } + }, + "title": "Playlist" + }, "List": { + "button": { + "create": "Create a playlist", + "manage": "Manage your playlists", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing playlists", + "playlists": "Playlists" + }, + "label": { + "search": "Search" + }, "ordering": { "direction": { "ascending": "Ascending", @@ -4196,58 +4579,11 @@ }, "label": "Ordering" }, - "header": { - "browse": "Browsing playlists", - "playlists": "Playlists" - }, - "button": { - "create": "Create a playlist", - "manage": "Manage your playlists", - "search": "Search" - }, - "placeholder": { - "search": "Enter playlist nameā€¦" - }, - "empty": { - "noResults": "No results matching your query" - }, "pagination": { "results": "Results per page" }, - "label": { - "search": "Search" - } - }, - "Detail": { - "button": { - "cancel": "Cancel", - "delete": "Delete", - "confirm": "Delete playlist", - "edit": "Edit", - "embed": "Embed", - "playAll": "Play all", - "stopEdit": "Stop Editing" - }, - "modal": { - "delete": { - "header": "Do you want to delete the playlist \"{ playlist }\"?", - "content": { - "warning": "This will completely delete this playlist and cannot be undone." - } - }, - "embed": { - "header": "Embed this playlist on your website" - } - }, - "title": "Playlist", - "meta": { - "tracks": "Playlist containing { n } track, by { username } | Playlist containing { n } tracks, by { username }" - }, - "empty": { - "noTracks": "There are no tracks in this playlist yet" - }, - "header": { - "tracks": "Tracks" + "placeholder": { + "search": "Enter playlist nameā€¦" } } }, @@ -4255,292 +4591,26 @@ "Detail": { "button": { "confirm": "Delete radio", + "delete": "Delete", "edit": "Editā€¦" }, - "modal": { - "delete": { - "header": "Do you want to delete the radio \"{ radio }\"?", - "content": { - "warning": "This will completely delete this radio and cannot be undone." - } - } - }, "empty": { "noTracks": "No tracks have been added to this radio yet" }, - "title": "Radio", "header": { + "radio": "Radio containing {tracks} tracks, by ", "tracks": "Tracks" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } track was added to your queue | { n } tracks were added to your queue" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Access to audio files, libraries, artists, albums and tracks", - "label": "Libraries and uploads" - }, - "filters": { - "description": "Access to content filters", - "label": "Content filters" - }, - "profile": { - "description": "Access to e-mail, username, and profile information", - "label": "Profile" - }, - "edits": { - "description": "Access to edits", - "label": "Edits" - }, - "follows": { - "description": "Access to follows", - "label": "Follows" - }, - "listenings": { - "description": "Access to listening history", - "label": "Listenings" - }, - "reports": { - "description": "Access to moderation reports", - "label": "Reports" - }, - "notifications": { - "description": "Access to notifications", - "label": "Notifications" - }, - "playlists": { - "description": "Access to playlists", - "label": "Playlists" - }, - "radios": { - "description": "Access to radios", - "label": "Radios" - }, - "security": { - "description": "Access to security settings such as password and authorisation", - "label": "Security" - }, - "favorites": { - "label": "Favourites" - } }, - "filters": { - "accessedDate": "Accessed date", - "albumTitle": "Album name", - "artistName": "Artist name", - "bitrate": "Bitrate", - "creationDate": "Creation date", - "domain": "Domain", - "duration": "Duration", - "expirationDate": "Expiry date", - "firstSeen": "First seen date", - "followers": "Followers", - "itemsCount": "Items", - "lastActivity": "Last activity", - "lastSeen": "Last seen date", - "modificationDate": "Modification date", - "name": "Name", - "receivedMessages": "Received messages", - "releaseDate": "Release date", - "dateJoined": "Sign-up date", - "size": "Size", - "trackTitle": "Track name", - "uploads": "Uploads", - "username": "Username", - "users": "Users" - }, - "fields": { - "privacyLevel": { - "label": "Activity visibility", - "help": "Determine the visibility level of your activity", - "shortChoices": { - "public": "Everyone", - "instance": "Instance", - "private": "Private" + "modal": { + "delete": { + "content": { + "warning": "This will completely delete this radio and cannot be undone." }, - "choices": { - "instance": "Everyone on this instance", - "public": "Everyone, across all instances", - "private": "Nobody except me" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Category", - "choices": { - "illegalContent": "Illegal content", - "invalidMetadata": "Invalid metadata", - "offensiveContent": "Offensive content", - "other": "Other", - "takedownRequest": "Takedown request" - } - }, - "importStatus": { - "label": "Click to display more information about the import process for this upload", - "choices": { - "draft": { - "label": "Draft", - "help": "This track has been uploaded, but hasn't been scheduled for processing yet" - }, - "errored": { - "label": "Errored", - "help": "This track could not be processed, please make sure it is tagged correctly" - }, - "finished": { - "label": "Finished", - "help": "Imported" - }, - "pending": { - "label": "Pending", - "help": "This track has been uploaded, but hasn't been processed by the server yet" - }, - "skipped": { - "label": "Skipped", - "help": "This track is already present in one of your libraries" - } - } - }, - "contentCategory": { - "label": "Content category", - "choices": { - "music": "Music", - "other": "Other", - "podcast": "Podcast" - } + "header": "Do you want to delete the radio {radio}?" } - } + }, + "title": "Radio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Account" - }, - "album": { - "typeLabel": "Album", - "label": "Report this albumā€¦" - }, - "artist": { - "typeLabel": "Artist", - "label": "Report this artistā€¦" - }, - "channel": { - "typeLabel": "Channel", - "label": "Report this channelā€¦" - }, - "library": { - "typeLabel": "Library", - "label": "Report this libraryā€¦" - }, - "playlist": { - "typeLabel": "Playlist", - "label": "Report this playlistā€¦" - }, - "track": { - "label": "Report this trackā€¦", - "typeLabel": "Track" - } - }, - "useReportConfigs": { - "account": { - "label": "Account", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Release date", - "title": "Title" - }, - "artist": { - "label": "Artist" - }, - "channel": { - "label": "Channel" - }, - "track": { - "copyright": "Copyright", - "license": "License", - "position": "Position", - "title": "Title", - "label": "Track" - }, - "creationDate": { - "label": "Creation date" - }, - "library": { - "description": "Description", - "label": "Library" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Name" - }, - "playlist": { - "label": "Playlist" - }, - "tags": { - "label": "Tags" - }, - "visibility": { - "label": "Visibility" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "License", - "position": "Position", - "title": "Title" - }, - "cover": { - "label": "Cover" - }, - "description": { - "label": "Description" - }, - "artist": { - "name": "Name" - }, - "album": { - "releaseDate": "Release date", - "title": "Title" - }, - "tags": { - "label": "Tags" - } - } - }, - "useThemeList": { - "darkTheme": "Dark", - "lightTheme": "Light" } - }, - "init": { - "serviceWorker": { - "newAppVersion": "A new version of the app is available.", - "actions": { - "later": "Later", - "update": "Update" - } - }, - "axios": { - "rateLimitDelay": "You sent too many requests and have been rate limited, please try again in { delay }", - "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" - } - }, - "App": { - "loading": "Loading..." } } From 807a6fd02c153fd93bf0902c3b4f9ddda56cda19 Mon Sep 17 00:00:00 2001 From: Aitor <amento@ni.eus> Date: Mon, 11 Dec 2023 11:58:55 +0000 Subject: [PATCH 203/371] Translated using Weblate (Basque) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/eu/ --- front/src/locales/eu.json | 8378 +++++++++++++++++++------------------ 1 file changed, 4246 insertions(+), 4132 deletions(-) diff --git a/front/src/locales/eu.json b/front/src/locales/eu.json index b511d46be..3600f4b25 100644 --- a/front/src/locales/eu.json +++ b/front/src/locales/eu.json @@ -1,1431 +1,66 @@ { + "App": { + "loading": "Kargatzenā€¦" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app }-(e)k zure Funkwhale kontura sartu nahi du", - "authorize": "Baimendu hirugarrenen aplikazioa", - "authorizeFailure": "Errorea aplikazioa baimentzerakoan", - "fetchFailure": "Errorea aplikazioaren datuak eskuratzerakoan", - "allScopes": "Sarbide osoa", - "readOnly": "Irakurtzeko soilik", - "writeOnly": "Idazteko soilik" - }, - "title": "Baimendu aplikazioa", - "button": { - "authorize": "Baimendu { app }" - }, - "help": { - "pasteCode": "Kopiatu eta itsatsi honako kodea aplikazioan:", - "redirect": "{ 0 }(e)ra birbideratua izango zara", - "copyCode": "Aplikazioan kopiatu eta itsasteko kodea erakutsiko zaizu." - }, - "message": { - "unknownPermissions": "Aplikazioak ondorengo baimen ezezagunak ere eskatzen ari da:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Sarbidea desgaituta", - "passwordUpdated": "Pasahitza eguneratuta", - "unavailable": "Subsonic APIa ez dago erabilgarri Funkwhale instantzia honetan." - }, - "button": { - "confirmDisable": "Sarbidea ezgaitu", - "disable": "Subsonic sarbidea ezgaitu", - "newPassword": "Eskatu pasahitz berria", - "confirmNewPassword": "Eskatu pasahitza" - }, - "modal": { - "disableSubsonic": { - "header": "Subsonic API sarbidea ezgaitu?", - "content": { - "warning": "Honek guztiz desgaituko du Subsonic APIrako sarbidea kontu honetatik." - } - }, - "newPassword": { - "header": "Eskatu Subsonic API pasahitz berria?", - "content": { - "warning": "Honek uneko pasahitza erabiltzen duten gailuetako zure saioak amaituko ditu." - } - } - }, - "link": { - "apps": "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" - }, - "header": { - "error": "Errorea", - "subsonic": "Subsonic API pasahitza" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da.", - "paragraph3": "Hala ere, bezero horietatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu.", - "paragraph2": "Zure zerrendak eta musika lineaz kanpo gozatzeko erabil ditzakezu, adibidez, zure mugikor edo tabletan." - } - }, - "label": { - "subsonicField": "Zure Subsonic API pasahitza" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Sarbide tokena", - "appId": "Aplikazioaren IDa", - "appSecret": "Aplikazioaren sekretua" - }, - "header": { - "appDetails": "Aplikazioaren xehetasunak", - "editApp": "Editatu aplikazioa" - }, - "help": { - "appDetails": "Aplikazioaren IDa eta sekretua balio sentikorrak dira eta pasahitz gisa tratatu behar dira. Ez partekatu beste inorrekin." - }, - "link": { - "settings": "Itzuli ezarpenetara" - }, - "title": "Editatu aplikazioa", - "button": { - "regenerateToken": "Birsortu tokena" - } - }, - "Settings": { - "title": "Kontuaren ezarpenak", - "header": { - "accountSettings": "Kontuaren ezarpenak", - "authorizedApps": "Baimendutako aplikazioak", - "avatar": "Irudia", - "changeEmail": "Aldatu nire eposta helbidea", - "changePassword": "Nire pasahitza aldatu", - "contentFilters": "Edukien iragazkiak", - "deleteAccount": "Ezabatu nire kontua", - "hiddenArtists": "Ezkutuko artistak", - "plugins": "Pluginak", - "settingsUpdated": "Ezarpenak eguneratuta", - "emailFailure": "Ezin dugu zure eposta helbidea aldatu", - "accountFailure": "Ezin dugu zure kontua ezabatu", - "noApps": "Ez daukazu kontuari konektatutako aplikaziorik.", - "noPersonalApps": "Ez daukazu aplikaziorik erregistratuta oraindik.", - "yourApps": "Zure aplikazioak", - "avatarFailure": "Zure avatarra ezin da gorde", - "passwordFailure": "Zure pasahitza ezin da aldatu", - "updateFailure": "Zure ezarpenak ezin dira eguneratu" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplikazioa", - "permissions": "Baimenak" - } - }, - "yourApps": { - "header": { - "application": "Aplikazioa", - "creationDate": "Sortze data", - "scopes": "Esparruak" - } - }, - "artists": { - "header": { - "creationDate": "Sortze data", - "name": "Izena" - } - } - }, - "label": { - "avatar": "Irudia", - "currentPassword": "Uneko pasahitza", - "newEmail": "Eposta helbide berria", - "newPassword": "Pasahitz berria", - "password": "Pasahitza" - }, - "button": { - "password": "Pasahitza aldatu", - "delete": "Ezabatu", - "deleteAccountConfirm": "Ezabatu nire kontua", - "deleteAccount": "Ezabatu nire kontuaā€¦", - "disableSubsonic": "Sarbidea ezgaitu", - "edit": "Editatu", - "refresh": "Freskatu", - "remove": "Kendu", - "removeApp": "Kendu aplikazioa", - "revoke": "Ezeztatu", - "revokeAccess": "Ezeztatu sarbidea", - "update": "Eguneratu", - "updateSettings": "Eguneratu ezarpenak" - }, - "description": { - "changeEmail": "Aldatu zure kontuarekin lotutako eposta helbidea. Berrespena bidaliko dizugu helbide berrira.", - "changePassword": { - "paragraph1": "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu.", - "paragraph2": "Pasahitz hau erabiltzen duten bezeroetan pasahitza eguneratu beharko duzu." - }, - "contentFilters": "Edukiaren iragazkiek zerbitzuan ikusi nahi ez duzun edukia ezkutatzen lagunduko dizute.", - "authorizedApps": "Hau da zure kontuaren datuetara sarbidea duten aplikazioen zerrenda.", - "yourApps": "Hau da erregistratu dituzun aplikazioen zerrenda.", - "plugins": "Erabili pluginak Funkwhale hedatu eta ezaugarri gehigarriak lortzeko.", - "deleteAccount": "Beheko formularioa erabiliz zure kontua eta erlazionatutako datu guztiak ezabatu ditzakezu behin betiko eta atzera bueltarik gabe. Berresteko eskatuko zaizu." - }, - "modal": { - "changePassword": { - "header": "Zure pasahitza aldatu?", - "content": { - "warning": "Pasahitza aldatzeak hurrengo ondorioak izango ditu:", - "logout": "Saio hau amaituko zaizu eta berriarekin hasi beharko duzu", - "subsonic": "Zure Subsonic pasahitza ausazko pasahitz batekin ordezkatuko da, Subsonic pasahitz zaharra erabiltzen duten gailuetan saioa amaituz" - } - }, - "deleteAccount": { - "header": "Zure kontua ezabatu nahi duzu?", - "content": { - "warning": "Hau ezin da desegin eta datuak behin betiko ezabatuko ditu gure zerbitzarietatik. Berehala zure saioa amaitu da." - } - }, - "deleteApp": { - "header": "\"{ application }\" aplikazioa kendu?", - "content": { - "warning": "Honek behin betiko ezabatuko ditu aplikazioa eta erlazionatutako token guztiak." - } - }, - "revokeApp": { - "header": "\"{ application }\" aplikazioaren sarbidea ezeztatu?", - "content": { - "warning": "Honek eragotzi egingo dio aplikazio honi zerbitzura zure izenean sartzea." - } - } - }, - "help": { - "noApps": "Hirugarrengoen aplikazioei zure datuetarako sarbidea baimentzen badiezu, aplikazio horiek hemen zerrendatuko dira.", - "changePassword": "Mesedez egiaztatu bi aldiz pasahitza zuzena dela", - "noPersonalApps": "Erregistratu bat Funkwhale hirugarrenen aplikazioekin integratzeko." - }, - "link": { - "managePlugins": "Kudeatu pluginak", - "newApp": "Erregistratu aplikazio berri bat" - }, - "warning": { - "deleteAccount": "Zure kontua gure zerbitzarietatik ezabatuko da minutu batzuk barru. Zure datuen kopia eduki dezaketen beste zerbitzariei ere ezabatzeko jakinaraziko diegu. Kontuan izan zerbitzari batzuk lineaz kanpo egon daitezkeela edo ez dutela eskaera osatu nahiko." - }, - "message": { - "currentEmail": "Zure uneko eposta helbidea { email } da.", - "confirmDelete": "Zure ezabatze eskaera bidali da, zure kontua eta edukia laster ezabatuko dira" - } - }, - "Logout": { - "header": { - "confirm": "Ziur al zaude saioa itxi nahi duzula?", - "unauthenticated": "Une honetan ez duzu saioa hasita" - }, - "link": { - "login": "Hasi saioa!" - }, - "title": "Amaitu saioa", - "button": { - "logout": "Bai, amaitu saioa!" - }, - "message": { - "loggedIn": "{ username } moduan saioa hasita" - } - }, - "ApplicationNew": { - "link": { - "settings": "Itzuli ezarpenetara" - }, - "title": "Sortu aplikazio berri bat" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Gurasoek \"Irakurri\" edo \"Idatzi\" esparruak egiaztatzeak dagozkien haurren esparru guztietarako sarbidea suposatzen du.", - "read": { - "label": "Irakurri", - "description": "Soilik irakurtzeko sarbidea erabiltzailearen datuetara" - }, - "write": { - "label": "Idatzi", - "description": "Idazteko soilik sarbidea erabiltzaile datuetara" - } - }, - "name": "Izena", - "redirectUri": "Birbideratu URIa" - }, - "button": { - "create": "Sortu aplikazioa", - "update": "Eguneratu aplikazioa" - }, - "help": { - "redirectUri": "Erabili \"urn:ietf:wg:oauth:2.0:oob\" birbideratzea URI bezala zure aplikazioa ez bada webean zerbitzatzen." - }, - "header": { - "failure": "Ezin ditugu zure aldaketak gorde" - } - }, - "LoginForm": { - "link": { - "createAccount": "Sortu kontua", - "resetPassword": "Berrezarri pasahitza" - }, - "placeholder": { - "username": "Idatzi zure erabiltzaile-izena edo eposta helbidea" - }, - "help": { - "approvalRequired": "Duela gutxi erregistratu bazara, baliteke moderazio taldeak zure kontua berrikusi edo zure eposta helbidea egiaztatu arte itxaron behar izatea.", - "invalidCredentials": "Egiaztatu erabiltzaile izena eta pasahitza zuzenak direla eta ziurtatu zure eposta helbidea egiaztatu duzula." - }, - "button": { - "login": "Sartu" - }, - "label": { - "password": "Pasahitza", - "username": "Erabiltzaile-izena edo eposta helbidea" - }, - "header": { - "loginFailure": "Ezin dugu zure saioa hasi" - } - }, - "SignupForm": { - "button": { - "create": "Sortu nire kontua" - }, - "label": { - "email": "Eposta helbidea", - "password": "Pasahitza", - "username": "Erabiltzaile-izena" - }, - "placeholder": { - "email": "Idatzi zure eposta helbidea", - "invitation": "Idatzi zure gonbidapen kodea (ez ditu maiuskulak eta minuskulak bereizten)", - "username": "Idatzi zure erabiltzaile-izena" - }, - "header": { - "login": "Sartu zure Funkwhale kontura", - "signupFailure": "Ezin da zure kontua sortu." - }, - "message": { - "registrationClosed": "Izena ematea itxita dago instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko.", - "requiresReview": "Instantzia honetako izen emateak irekita daude, baina moderatzaileek berrikusi behar dituzte onartu aurretik.", - "awaitingReview": "Zure kontu-eskaera arrakastaz bidali da. Eposta mezu bat jasoko duzu gure moderazio taldeak zure eskaera berrikusi duenean.", - "accountCreated": "Zure kontua arrakastaz sortu da. Egiaztatu zure eposta saio hasten saiatu aurretik." - } - }, - "Plugin": { - "link": { - "documentation": "Dokumentazioa" - }, - "label": { - "pluginEnabled": "Gaituta", - "library": "Liburutegia" - }, - "header": { - "failure": "Errorea plugina gordetzerakoan" - }, - "description": { - "library": "Fitxategiak ze liburutegitara inportatu behar diren." - }, - "button": { - "save": "Gorde", - "scan": "Eskaneatu" - } - } - }, "About": { - "stat": { - "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", - "hoursOfMusic": "ordu musika | ordu musika" + "description": { + "findApp": "Erabili Funkwhale beste gailuetan gure aplikazioekin.", + "funkwhale": "Funkwhale komunitateak bultzatutako proiektua da, eta musika eta audioa sare deszentralizatu eta ireki batean entzuteko eta partekatzeko aukera ematen du.", + "publicContent": "Entzun instantzia honetan partekatutako album eta erreprodukzio-zerrenda publikoak.", + "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!", + "signup": "Erregistratu orain zure gogokoenak jarraitzeko, erreprodukzio-zerrendak sortzeko, eduki berriak aurkitzeko eta askoz gehiago!" }, "header": { - "funkwhale": "Musikaz gozatzeko eta partekatzeko plataforma soziala", "aboutPod": "Instantzia honi buruz", - "publicContent": "Arakatu eduki publikoa", "findApp": "Bilatu aplikazio bat", + "funkwhale": "Musikaz gozatzeko eta partekatzeko plataforma soziala", + "publicContent": "Arakatu eduki publikoa", "signup": "Erregistratu" }, - "title": "Honi buruz", + "help": { + "closedRegistrations": "Izen-emateak itxita daude instantzia honetan. Beste instantzia batean eman dezakezu izena hurrengo esteka erabiliz." + }, "link": { "findOtherPod": "Bilatu beste instantzia bat", "learnMore": "Ikasi gehiago" }, - "description": { - "funkwhale": "Funkwhale komunitateak bultzatutako proiektua da, eta musika eta audioa sare deszentralizatu eta ireki batean entzuteko eta partekatzeko aukera ematen du.", - "publicContent": "Entzun pod honetan partekatutako album eta erreprodukzio-zerrenda publikoak.", - "signup": "Erregistratu orain zure gogokoenak jarraitzeko, erreprodukzio-zerrendak sortzeko, eduki berriak aurkitzeko eta askoz gehiago!", - "findApp": "Erabili Funkwhale beste gailuetan gure aplikazioekin.", - "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!" + "message": { + "greeting": "Kaixo {username}", + "loggedIn": "Saioa hasita zenuen!" }, "placeholder": { - "noDescription": "Ez dago deskribapenik eskuragarri." + "noDescription": "Ez dago azalpenik eskuragarri" }, - "message": { - "loggedIn": "Saioa hasita zenuen!" - } - }, - "Home": { "stat": { "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", - "hoursOfMusic": "Ordubete musika | { n } ordu musika" + "hoursOfMusic": "ordu musika | ordu musika" }, - "header": { - "aboutFunkwhale": "Funkwhale-ri buruz", - "about": "Funkwhale instantzia honi buruz", - "contact": "Kontaktua", - "login": "Hasi saioa", - "newChannels": "Kanal berriak", - "newAlbums": "Azken aldian gehitutako albumak", - "signup": "Erregistratu", - "statistics": "Estatistikak", - "links": "Esteka erabilgarriak", - "welcome": "Ongi etorri { podName }(e)ra!" - }, - "link": { - "publicContent": { - "label": "Arakatu eduki publikoa", - "description": "Entzun instantzia honetan partekatutako album eta erreprodukzio-zerrenda publikoak" - }, - "userGuides": { - "description": "Ezagutu Funkwhale eta bere ezaugarriei buruz jakin behar duzun guztia", - "label": "Erabiltzaile-gidak" - }, - "findOtherPod": "Bilatu beste instantzia bat", - "learnMore": "Ikasi gehiago", - "mobileApps": { - "label": "Mugikorreko aplikazioak", - "description": "Erabili Funkwhale beste gailuetan gure aplikazioekin" - }, - "rules": "Zerbitzariaren arauak", - "viewMore": "Ikusi gehiagoā€¦", - "funkwhale": "Bisitatu funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale librea eta doakoa da eta boluntario komunitate jator batek garatzen du.", - "paragraph1": "Instantzia honek Funkwhale erabiltzen du, sare ireki eta deszentralizatu batean musika eta audioak entzun eta partekatzeko aukera ematen duen komunitateak gidatutako proiektu bat." - }, - "signup": "Erregistratu orain zure gogokoen jarraipena egiteko, zerrendak sortzeko, eduki berria aurkitzeko eta asko gehiago!", - "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!" - }, - "title": "Hasiera", - "placeholder": { - "noDescription": "Ez dago deskribapenik." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - } - }, - "Widget": { - "button": { - "more": "Erakutsi gehiago" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - }, - "title": "{ date }-(e)an eguneratua" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "Saio { n } | { n } saio" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - } - }, - "Widget": { - "button": { - "more": "Erakutsi gehiago" - } - } - }, - "Player": { - "meta": { - "position": "{ index } / { length }" - }, - "header": { - "player": "Audio erreproduzigailua eta kontrolak" - }, - "label": { - "clearQueue": "Garbitu zure ilara", - "expandQueue": "Zabaldu ilara", - "addArtistContentFilter": "Ezkutatu artista honen edukiaā€¦", - "loopingDisabled": "Begizta desgaituta. Egin klik pista bakarreko begiztara aldatzeko.", - "loopingSingle": "Pista bakarreko begiztan. Egin klik ilara osoko begiztara aldatzeko.", - "loopingWholeQueue": "Ilara osoko begiztan. Egin klik begizta desgaitzeko.", - "audioPlayer": "Multimedia-erreproduzigailua", - "mute": "Isilarazi", - "nextTrack": "Hurrengo pista", - "pause": "Pausatu", - "play": "Erreproduzitu", - "previousTrack": "Aurreko pista", - "shuffleQueue": "Nahasi zure ilara", - "unmute": "Aktibatu audioa" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Gehitu uneko ilaran", - "addToPlaylist": "Gehitu erreprodukzio-zerrendanā€¦", - "episodeDetails": "Saioaren xehetasunak", - "hideArtist": "Ezkutatu artista honen edukia", - "discretePlay": "Erreproduzitu", - "playAlbum": "Erreproduzitu albuma", - "playArtist": "Erreproduzitu artista", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "playPlaylist": "Erreproduzitu zerrenda", - "startRadio": "Erreproduzitu antzeko kantak", - "playTrack": "Erreproduzitu pista", - "playTracks": "Erreproduzitu pistak", - "report": "Salatuā€¦", - "trackDetails": "Pistaren xehetasunak" - }, - "title": { - "more": "Gehiagoā€¦", - "unavailable": "Pista hau ez dago sarbidea duzun liburutegietan" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Gogokoetan sartu", - "addToPlaylist": "Gehitu erreprodukzio-zerrendanā€¦", - "addToQueue": "Gehitu ilaran", - "episodeDetails": "Saioaren xehetasunak", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "startRadio": "Erreproduzitu irratia", - "removeFromFavorites": "Kendu gogokoetatik", - "trackDetails": "Pistaren xehetasunak", - "albumDetails": "Ikusi albuma", - "artistDetails": "Ikusi artista", - "channelDetails": "Ikusi kanala", - "seriesDetails": "Ikusi serieak" - } - }, - "MobileRow": { - "button": { - "actions": "Erakutsi pistako ekintzak" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Gogokoetan sartu", - "addToPlaylist": "Gehitu erreprodukzio-zerrendanā€¦", - "addToQueue": "Gehitu ilaran", - "episodeDetails": "Saioaren xehetasunak", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "startRadio": "Erreproduzitu irratia", - "removeFromFavorites": "Kendu gogokoetatik", - "trackDetails": "Pistaren xehetasunak", - "albumDetails": "Ikusi albuma", - "artistDetails": "Ikusi artista", - "channelDetails": "Ikusi kanala", - "seriesDetails": "Ikusi serieak" - } - }, - "Table": { - "table": { - "header": { - "album": "Albuma", - "artist": "Artista", - "title": "Izenburua" - } - } - }, - "Widget": { - "empty": { - "noResults": "Ez da ezer aurkitu" - }, - "button": { - "more": "Erakutsi gehiago" - } - }, - "MobileRow": { - "button": { - "actions": "Erakutsi pistako ekintzak" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Doitu bolumena" - }, - "button": { - "mute": "Isilarazi", - "unmute": "Aktibatu audioa" - } - }, - "SearchBar": { - "label": { - "album": "Albuma", - "artist": "Artista", - "category": { - "federation": "Federazioa", - "podcasts": "Podcastak" - }, - "search": "Bilatu edukia", - "tag": "Etiketa", - "track": "Pista" - }, - "link": { - "more": "Emaitza gehiago šŸ”’", - "fediverse": "Bilatu fedibertsoan", - "rss": "Harpidetu podcastera RSS bidez" - }, - "header": { - "noResults": "Ez da bat datorren emaitzarik aurkitu" - }, - "placeholder": { - "search": "Bilatu artistaren, albumaren, pistenā€¦ arabera" - }, - "empty": { - "noResults": "Sentitzen dugu, ez dago emaitzarik bilaketa honentzat" - } - }, - "Search": { - "header": { - "albums": "Albumak", - "artists": "Artistak", - "search": "Bilatu musika pixka bat" - }, - "placeholder": { - "search": "Artista, albuma, pista ā€¦" - }, - "empty": { - "noAlbums": "Ez dago zure bilaketarekin bat datorren albumik", - "noArtists": "Ez dago zure bilaketarekin bat datorren artistarik" - } - }, - "ChannelForm": { - "label": { - "discography": "Artistaren diskografia", - "category": "Kategoria", - "image": "Kanalaren irudia", - "description": "Deskribapena", - "username": "Fedibertsoko izena", - "language": "Hizkuntza", - "name": "Izena", - "email": "Jabearen eposta helbidea", - "owner": "Jabearen izena", - "podcast": "Podcastak", - "subcategory": "Azpikategoria", - "tags": "Etiketak" - }, - "placeholder": { - "name": "Kanalaren izen bikaina", - "username": "kanalarenizenbikaina" - }, - "header": { - "error": "Errorea kanala gordetzerakoan" - }, - "help": { - "podcast": "Ostatatu zure saioak eta mantendu zure komunitatea eguneratuta.", - "discography": "Argitaratu zuk egindako musika album eta singlez osatutako diskografia eder batean.", - "podcastFields": "Spotify edo iTunes bezalako plataforma batzuetako itunes:email eta itune:name eremuetan erabiltzen da.", - "username": "URLetan eta kanal hau Fedibertsoan jarraitzeko erabiltzen da. Ezin duzu aldatu aurrerago." - }, - "loader": { - "loading": "Kargatzen" - }, - "legend": { - "purpose": "Zertarako erabiliko da kanal hau?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Utzi jarraitzeko eskaera", - "follow": "Jarraitu", - "unfollow": "Utzi jarraitzeari" - } - }, - "EmbedWizard": { - "button": { - "copy": "Kopiatu" - }, - "help": { - "embed": "Kopiatu eta itsatsi kode hau zure webguneko HTMLan", - "width": "Utzi hutsik widget moldagarrirako", - "anonymous": "Jarri zure administratzaileekin harremanetan eta eskatu dagokion ezarpena eguneratzeko." - }, - "label": { - "embed": "Txertatu kodea", - "height": "Widgetaren altuera", - "width": "Widgetaren zabalera" - }, - "header": { - "preview": "Aurrebista" - }, - "warning": { - "anonymous": "Partekatzeak ez du funtzionatuko instantzia honek ez duelako onartzen erabiltzaile anonimoek edukira sarbidea izatea." - }, - "message": { - "copy": "Testua arbelera kopiatu da!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Erakutsi gehiago" - }, - "help": { - "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Erakutsi gehiago" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "addDescription": "Gehitu deskribapenaā€¦" - } - }, - "ArtistBase": { - "title": "Artista", - "button": { - "cancel": "Ezeztatu", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiagoā€¦", - "play": "Erreproduzitu album denak" - }, - "modal": { - "embed": { - "header": "Txertatu artista honen lana zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "wikipedia": "Bilatu Wikipedian", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n", - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "Pista { n } dator bat iragazki konbinatuekin | { n } pista datoz bat iragazki konbinatuekin", - "builder": "Eraikitzailea", - "created": "Irratia sortuta", - "updated": "Irratia eguneratuta" - }, - "table": { - "filter": { - "header": { - "actions": "Akzioak", - "candidates": "Hautagaiak", - "config": "Konfigurazioa", - "exclude": "Baztertu", - "name": "Iragazkiaren izena" - } - } - }, - "button": { - "filter": "Iragazkia sortu", - "save": "Gorde" - }, - "label": { - "filter": "Iragazkiak sortu zure irratia pertsonalizatzeko", - "description": "Deskribapena", - "public": "Erakutsi publikoki", - "name": "Irratiaren izena" - }, - "placeholder": { - "description": "Nire deskribapen txundigarria", - "name": "Nire irrati txundigarria" - }, - "title": "Irrati eraikitzailea", - "option": { - "filter": "Aukeratu filtroa" - }, - "description": { - "builder": "Zure irizpidearen araberako pistak erreproduzituko dituen irrati pertsonalizatua sortu dezakezu interfaze honekin." - } - }, - "Filter": { - "cancelButton": "Ezeztatu", - "excludeLabel": "Baztertu", - "removeButton": "Kendu", - "matchingTracksModalHeader": "Iragazkiarekin bat datozen pistak" - } - }, - "FileUpload": { - "tooltip": { - "network": "Sare-errorea eman da fitxategi hau igotzerakoan", - "size": "Ezin da fitxategi hau igo, ziurtatu ez dela handiegia", - "extension": "Fitxategi-mota baliogabea, ziurtatu igotzen ari zarena audio-fitxategi bat dela. Onartzen diren fitxategi-luzapenak: { extensions }", - "retry": "Saiatu berriro", - "denied": "Igoera ukatuta, ziurtatu fitxategia ez dela handiegia eta ez zarela zure mugara iritsi", - "timeout": "Igoeraren denbora-muga, mesedez saiatu berriro" - }, - "table": { - "upload": { - "header": { - "actions": "Ekintzak", - "filename": "Fitxategi-izena", - "size": "Tamaina", - "status": "Egoera" - }, - "status": { - "pending": "Zain", - "uploaded": "Igota", - "uploading": "Igotzenā€¦" - } - } - }, - "button": { - "cancel": "Ezeztatu", - "retry": "Saiatu berriro huts egindako igoerekin" - }, - "label": { - "uploadWidget": "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak", - "remainingSpace": "Gelditzen den biltegiratze-lekua", - "extensions": "Euskarria duten hedapenak: { extensions }" - }, - "header": { - "failure": "Errorea inportazioa abiarazterakoan", - "server": "Inportazioaren egoera", - "status": "Inportatu egoera", - "local": "Igo musika zure gailutik" - }, - "link": { - "processing": "Prozesatzen", - "uploading": "Igotzen", - "picard": "Helburu horretarako Picard erabiltzea gomendatzen dugu." - }, - "description": { - "import": "Zure inportazioaren emaitzak:", - "previousImport": "Zure aurreko inportazioaren emaitzak:" - }, - "message": { - "local": { - "format": "Igotzen ari zaren audio fitxategiak OGG, Flac, MP3 edo AIFF formatuan daude", - "tag": "Igotzen ari zaren musika fitxategiak behar bezala etiketatuta daude.", - "message": "Zure liburutegira musika igotzera zoaz. Jarraitu aurretik, ziurtatu:", - "copyright": "Ez zarela ari copyright duen edukia liburutegi publiko batera igotzen, bestela legea hausten ari zara" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Zure aldaketak deskribatzen dituen laburpentxoa." - }, - "button": { - "cancel": "Ezeztatu", - "clear": "Garbitu", - "reset": "Berrezarri hasierako baliora", - "showUnreviewed": "Mugatu berrikusi gabeko edizioetara", - "showAll": "Erakutsi edizio guztiak", - "submit": "Bilatu eta aplikatu edizioa", - "new": "Bidali beste edizio bat", - "suggest": "Bidali iradokizuna" - }, - "header": { - "failure": "Errorea aldatutakoa bidaltzerakoan", - "recentEdits": "Azken aldiko edizioak", - "unreviewed": "Berrikuspenaren zain dauden azken aldiko edizioak", - "success": "Zure edizioa behar bezala bidalita." - }, - "notApplicable": "Daturik gabe", - "empty": { - "suggestEdit": "Iradoki aldaketa bat beheko formularioa erabiliz." - }, - "label": { - "summary": "Laburpena (hautazkoa)" - }, - "message": { - "noPermission": "Ez daukazu objektu hau editatzeko baimenik, baina aldaketak iradoki ditzakezu. Bidalitakoan, iradokizunak onartu aurretik berrikusiko dira." - } - }, - "Albums": { - "link": { - "addMusic": "Gehitu musikaren bat" - }, - "title": "Albumak", - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Albumak arakatzen" - }, - "placeholder": { - "search": "Idatzi albumaren izenaā€¦" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "label": { - "search": "Bilatu", - "tags": "Etiketak" - }, - "button": { - "search": "Bilatu" - } - }, - "Artists": { - "button": { - "upload": "Gehitu musikaren bat", - "search": "Bilatu" - }, - "label": { - "search": "Artistaren izena", - "excludeCompilation": "Baztertu bilduma-artistak", - "tags": "Etiketak" - }, - "title": "Artistak", - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Artistak arakatzen" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "placeholder": { - "search": "Bilatuā€¦" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Albuma", - "artist": "Artista", - "copyright": "Copyright-a", - "license": "Lizentzia", - "series": "Seriea", - "url": "URL", - "year": "Urtea" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Kodeka", - "downloads": "Deskargak", - "duration": "Iraupena", - "size": "Tamaina" - } - }, - "header": { - "episode": "Saioaren xehetasunak", - "library": "Erlazionatutako liburutegiak", - "playlists": "Erlazionatutako zerrendak", - "release": "Argitalpenaren xehetasunak", - "track": "Pistaren xehetasunak" - }, - "notApplicable": "Daturik gabe", - "description": { - "library": "Pista hau ondorengo liburutegietan dago:" - }, - "link": { - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "TagDetail": { - "link": { - "albums": "Albumak", - "artists": "Artistak", - "moderation": "Ireki moderazio interfazean" - }, - "header": { - "channels": "Kanalak", - "tracks": "Pistak" - } - }, - "ArtistDetail": { - "header": { - "album": "Artista honen albumak", - "track": "Artista honen pista berriak", - "library": "Erabiltzaileen liburutegiak" - }, - "button": { - "more": "Kargatu gehiagoā€¦", - "filter": "Kendu iragazkia" - }, - "link": { - "filter": "Berrikusi nire iragazkiak" - }, - "description": { - "library": "Artista hau ondorengo liburutegietan dago:" - }, - "message": { - "filter": "Artista honekin erlazionatutako edukia ezkutatzen ari zara une honetan." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Errore bat gertatu da igoera prozesatzean. Azpian informazio gehiago aurkituko duzu.", - "unknownError": { - "message": "Errore ezezaguna gertatu da", - "label": "Errore ezezaguna" - }, - "invalidMetadata": { - "label": "Metadatu baliogabeak", - "message": "Fitxategiaren metadatuak baliogabeak dira edo beharrezko eremuak falta dituzte." - } - }, - "button": { - "close": "Itxi" - }, - "table": { - "error": { - "debug": "Arazketa informazioa", - "errorDetail": "Errorearen xehetasuna", - "errorType": "Errore mota", - "help": "Lortu laguntza" - } - }, - "header": { - "importDetail": "Inportazioaren xehetasunak" - }, - "link": { - "support": "Ireki laguntza haria (sartu arazteko informazioa azpian, zure mezuan)", - "documentation": "Irakurri errori honi buruzko gure dokumentazioa" - }, - "message": { - "importDetail": "Igoera zain dago oraindik eta laster prozesatuko du zerbitzariak.", - "importSuccess": "Igoera behar bezala prozesatu da zerbitzarian." - }, - "warning": { - "importSkipped": "Igoera saltatu egin da zure liburutegietako batean antzeko bat badagoelako dagoeneko." - } - }, - "EditCard": { - "button": { - "approve": "Onartu", - "delete": "Ezabatu", - "reject": "Baztertu" - }, - "status": { - "approved": "Onartuta", - "applied": "Onartuta eta aplikatuta", - "pending": "Berrikuspenaren zain", - "rejected": "Baztertuta" - }, - "modal": { - "delete": { - "header": "Iradokizun hau ezabatu nahi duzu?" - }, - "content": { - "warning": "Iradokizuna guztiz ezabatuko da, ekintza hau ezin da desegin." - } - }, - "table": { - "update": { - "header": { - "field": "Eremua", - "newValue": "Balio berria", - "oldValue": "Balio zaharra" - }, - "notApplicable": "Daturik gabe" - } - }, - "header": { - "modification": "Aldaketa { id }" - }, - "link": { - "track": "Pista #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Podcastak arakatzen" - }, - "button": { - "cancel": "Ezeztatu", - "channel": "Sortu kanala", - "search": "Bilatu", - "subscribe": "Harpidetu", - "feed": "Harpidetu RSS jariora" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "label": { - "search": "Podcastaren izenburua", - "tags": "Etiketak" - }, - "title": "Podcastak", - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "placeholder": { - "search": "Bilatuā€¦" - }, - "modal": { - "subscription": { - "header": "Harpidetza" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "header": { - "browse": "Irratiak arakatzen", - "instance": "Instantziako irratiak", - "user": "Erabiltzaileen irratiak" - }, - "button": { - "add": "Sortu irrati bat", - "create": "Sortu zure irrati propioa" - }, - "placeholder": { - "search": "Idatzi irrati baten izena ā€¦" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "title": "Irratiak", - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "label": { - "search": "Bilatu" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatuā€¦", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiagoā€¦" - }, - "modal": { - "delete": { - "header": "Album hau ezabatu nahi duzu?", - "content": { - "warning": "Album hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu album hau zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n", - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "TrackBase": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatuā€¦", - "download": "Deskargatu", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiagoā€¦", - "play": "Erreproduzitu" - }, - "modal": { - "delete": { - "header": "Pista hau ezabatu nahi duzu?", - "content": { - "warning": "Pista eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu pista hau zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "wikipedia": "Bilatu Wikipedian", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n" - }, - "title": "Pista" - }, - "AlbumEdit": { - "header": { - "edit": "Editatu album hau", - "suggest": "Iradoki edizio bat album honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "ArtistEdit": { - "header": { - "edit": "Editatu artista hau", - "suggest": "Iradoki edizio bat artista honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "TrackEdit": { - "header": { - "edit": "Editatu pista hau", - "suggest": "Iradoki edizio bat pista honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Saioak", - "tracks": "Pistak", - "libraries": "Erabiltzaileen liburutegiak" - }, - "description": { - "libraries": "Album hau ondorengo liburutegietan dago:" - }, - "meta": { - "volume": "{ number } bolumena" - } - }, - "FsBrowser": { - "button": { - "import": "Inportatu" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Inportazioa ez da hasi oraindik" - } - }, - "Home": { - "title": "Liburutegia", - "header": { - "newChannels": "Kanal berriak", - "playlists": "Zerrendak", - "recentlyAdded": "Azken aldian gehituta", - "recentlyFavorited": "Azken aldian gogokoa", - "recentlyListened": "Azken aldian entzuna" - } - }, - "TagSelector": { - "placeholder": { - "search": "Bilatuā€¦" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "Gogoko { n } | { n } gogoko" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "link": { - "library": "Arakatu liburutegia" - }, - "loader": { - "loading": "Zure gogokoak kargatzenā€¦" - }, - "empty": { - "noFavorites": "Ez da pistarik gehitu oraindik zure gogokoetara" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "title": "Zure gogokoak" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Gogokoetan sartu", - "remove": "Kendu gogokoetatik" - }, - "label": { - "inFavorites": "Gogokoetan" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "Fitxategi { n } | { n } fitxategi", - "quota": "Gelditzen den biltegiratze-lekua:" - }, - "button": { - "cancel": "Ezeztatu", - "close": "Itxi", - "finishLater": "Amaitu beranduago", - "next": "Hurrengo pausoa", - "previous": "Aurreko pausoa", - "publish": "Argitaratu", - "update": "Eguneratu" - }, - "header": { - "uploadFiles": "Fitxategiak kargatzeko", - "processing": "Igoerak prozesatzen", - "publish": "Argitaratu audioa", - "uploadDetails": "Igoeraren xehetasunak" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "label": { - "album": "Albuma", - "series": "Serieak" - }, - "option": { - "none": "Bat ere ez" - } - }, - "LicenseSelect": { - "link": { - "license": "Lizentzia honi buruz" - }, - "label": { - "license": "Lizentzia" - }, - "option": { - "none": "Bat ere ez" - } - }, - "UploadForm": { - "help": { - "license": "Gehitu lizentzia zure igoerari zure entzuleei askatasun batzuk emateko." - }, - "label": { - "openBrowser": "Arakatuā€¦", - "channel": "Kanala" - }, - "message": { - "dragAndDrop": "Arrastatu eta askatu fitxategiak hemen edo ireki nabigatzailea fitxategiak igotzeko", - "pending": "Argitaratu gabeko igoera zirriborro batzuk dauzkazu." - }, - "button": { - "edit": "Editatu", - "ignore": "Ez ikusi egin", - "remove": "Kendu", - "resume": "Berrekin", - "retry": "Saiatu berriro" - }, - "header": { - "error": "Errorea argitaratzerakoan" - }, - "status": { - "errored": "Erroreduna", - "pending": "Zain", - "uploading": "Igotzen" - }, - "description": { - "extensions": "Euskarria duten hedapenak: { extensions }" - }, - "warning": { - "quota": "Ez daukazu fitxategiak kargatzeko leku librerik. Jarri moderatzaileekin harremanetan." - } - }, - "AlbumModal": { - "button": { - "cancel": "Ezeztatu", - "create": "Sortu" - }, - "header": { - "newAlbum": "Album berria", - "newSeries": "Serie berria" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Deskribapena", - "position": "Kokapena", - "tags": "Etiketak", - "title": "Izenburua", - "image": "Pistaren irudia" - } - }, - "AlbumForm": { - "header": { - "error": "Errorea sorketan" - }, - "label": { - "albumTitle": "Izenburua" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Harpidetu", - "unsubscribe": "Kendu harpidetza" - }, - "help": { - "auth": "Saioa hasi behar duzu kanal honetara harpidetzeko" - } - } + "title": "Honi buruz" }, "AboutPod": { - "stat": { - "hoursOfMusic": "ordu musika | ordu musika", - "activeUsers": "erabiltzaile aktibo | erabiltzaile aktibo", - "albumsCount": "album | album", - "artistsCount": "artista | artista", - "listeningsCount": "entzunaldi | entzunaldiak", - "tracksCount": "pista | pista" + "feature": { + "allowList": "Baimen-zerrenda", + "anonymousAccess": "Sarbide anonimoa", + "federation": "Federazioa", + "quota": "Igoera muga", + "registrations": "Izen-emateak", + "status": { + "closed": "Itxita", + "disabled": "Desgaituta", + "enabled": "Gaituta", + "open": "Irekita" + }, + "version": "Funkwhale bertsioa" + }, + "header": { + "about": "Instantzia honi buruz", + "contact": "Kontaktua", + "features": "Ezaugarriak", + "rules": "Arauak", + "statistics": "Estatistikak", + "terms": "Erabilera baldintzak eta pribatutasun politika" }, - "title": "Honi buruz", "link": { "about": "Instantzia honi buruz", "features": "Ezaugarriak", @@ -1434,360 +69,242 @@ "statistics": "Estatistikak", "terms": "Erabilera baldintzak eta pribatutasun politika" }, - "header": { - "about": "Instantzia honi buruz", - "contact": "Kontaktua", - "features": "Ezaugarriak", - "rules": "Arauak", - "statistics": "Estatistikak", - "terms": "Erabilera baldintzak eta pribatutasun politika" - }, - "feature": { - "allowList": "Baimen-zerrenda", - "anonymousAccess": "Sarbide anonimoa", - "status": { - "closed": "Itxita", - "disabled": "Desgaituta", - "enabled": "Gaituta", - "open": "Irekita" - }, - "federation": "Federazioa", - "version": "Funkwhale bertsioa", - "registrations": "Izen-emateak", - "quota": "Igoera muga" + "message": { + "contact": "Bidal iezaguzu mezu elektroniko bat: {'{{'} contactEmail {'}}'}" }, "notApplicable": "Daturik gabe", "placeholder": { - "noDescription": "Ez dago deskribapenik eskuragarri.", - "noRules": "Ez dago araurik erabilgarri.", - "noTerms": "Ez dago baldintzarik eskuragarri." + "noDescription": "Ez dago azalpenik eskuragarri", + "noRules": "Ez dago araurik erabilgarri", + "noTerms": "Ez dago baldintzarik eskuragarri" + }, + "stat": { + "activeUsers": "erabiltzaile aktibo | erabiltzaile aktibo", + "albumsCount": "album | album", + "artistsCount": "artista | artista", + "hoursOfMusic": "ordu musika | ordu musika", + "listeningsCount": "entzunaldi | entzunaldiak", + "tracksCount": "pista | pista" + }, + "title": "Honi buruz" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Instantzia honek Funkwhale erabiltzen du, sare ireki eta deszentralizatu batean musika eta audioak entzun eta partekatzeko aukera ematen duen komunitateak gidatutako proiektu bat.", + "paragraph2": "Funkwhale librea eta doakoa da eta boluntario komunitate jator batek garatzen du." + }, + "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!", + "signup": "Erregistratu orain zure gogokoen jarraipena egiteko, zerrendak sortzeko, eduki berria aurkitzeko eta asko gehiago!" + }, + "header": { + "about": "Funkwhale instantzia honi buruz", + "aboutFunkwhale": "Funkwhale-ri buruz", + "contact": "Kontaktua", + "links": "Esteka erabilgarriak", + "login": "Hasi saioa", + "newAlbums": "Azken aldian gehitutako albumak", + "newChannels": "Kanal berriak", + "signup": "Erregistratu", + "statistics": "Estatistikak", + "welcome": "Ongi etorri { podName }(e)ra!" + }, + "help": { + "registrationsClosed": "Izen-emateak itxita daude instantzia honetan. Beste instantzia batean eman dezakezu izena hurrengo esteka erabiliz." + }, + "link": { + "findOtherPod": "Bilatu beste instantzia bat", + "funkwhale": "Bisitatu funkwhale.audio", + "learnMore": "Ikasi gehiago", + "mobileApps": { + "description": "Erabili Funkwhale beste gailuetan gure aplikazioekin", + "label": "Mugikorreko aplikazioak" + }, + "publicContent": { + "description": "Entzun instantzia honetan partekatutako album eta zerrenda publikoak.", + "label": "Arakatu eduki publikoa" + }, + "rules": "Zerbitzariaren arauak", + "userGuides": { + "description": "Ezagutu Funkwhale eta bere ezaugarriei buruz jakin behar duzun guztia", + "label": "Erabiltzaile-gidak" + }, + "viewMore": "Ikusi gehiagoā€¦" + }, + "placeholder": { + "noDescription": "Ez dago azalpenik eskuragarri" + }, + "stat": { + "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", + "hoursOfMusic": "Ordubete musika | { n } ordu musika" + }, + "title": "Hasiera" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Orrialdea ez da aurkitu!" + }, + "link": { + "home": "Joan hasiera orrira" }, "message": { - "contact": "Bidal iezaguzu mezu elektroniko bat: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Sentitzen dugu, eskatu duzun orria ez da existitzen:" + }, + "title": "Orrialdea ez da aurkitu" + }, + "Queue": { + "button": { + "clear": "Garbitu", + "close": "Itxi", + "stopRadio": "Gelditu irratia" + }, + "header": { + "failure": "Pista ezin da kargatu", + "noSources": "Pistak ez du iturburu erabilgarririk.", + "radio": "Irrati bat martxan duzu" + }, + "label": { + "addArtistContentFilter": "Ezkutatu artista honen edukiaā€¦", + "duration": "Iraupena", + "enterFullscreen": "Sartu pantaila osoa moduan", + "exitFullscreen": "Irten pantaila osoa modutik", + "favorite": "Pista gogokoa", + "next": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "populatingRadio": "Irratiaren pista lortzenā€¦", + "previous": "Aurreko pista", + "queue": "Ilara", + "remove": "Kendu", + "restart": "Berrasi pista", + "selectTrack": "Hautatu pista", + "showCoverArt": "Erakutsi azala", + "showVisualizer": "Erakutsi MoonDrop bisualizatzailea" + }, + "message": { + "automaticPlay": "Hurrengo pista automatikoki erreproduzituko da segundo batzuk barruā€¦", + "radio": "Abesti berriak hemen gehituko dira automatikoki.", + "webglUnsupported": "Badirudi arakatzaileak ez duela onartzen WebGL2." + }, + "meta": { + "end": "Amaiera", + "queuePosition": "Pista { index } / { length }", + "startTime": "00:00", + "unknownAlbum": "Album ezezaguna", + "unknownArtist": "Artista ezezaguna" + }, + "warning": { + "connectivity": "Konexio arazo bat izan dezakezu." } }, - "common": { - "ActionTable": { - "button": { - "selected": "Aaukeratutako { n },{ total }(e)tik | { n } aukeratutako { total }(e)tik", - "allSelected": "Elementu bakarra hautatuta | { n } elementu hautatuta", - "go": "Joan", - "launch": "Abiarazi", - "refresh": "Freskatu taularen edukia", - "select": "Hautatu", - "selectAll": "Hautatu elementu guztiak", - "selectElement": "Hautatu elementu { n } | Hautatu { n } elementuak", - "selectCurrentPage": "Aukeratu orrialde hau bakarrik" + "RemoteSearchForm": { + "button": { + "fediverse": "Fedibertsoa", + "rss": "RSS", + "search": "Bilatu" + }, + "description": { + "fediverse": "Erabili formulario hau fedibertsoan ostatatutako kanal batera harpidetzeko.", + "rss": "Erabili formulario hau RSS jario batera bere URLaren bidez harpidetzeko." + }, + "error": { + "fetchFailed": "Objektu hau ezin da berreskuratu" + }, + "header": { + "fetchFailed": "Errorea objektua eskuratzerakoan" + }, + "label": { + "fediverse": { + "fieldLabel": "Fedibertsoko objektua", + "fieldPlaceholder": "{'@'}erabiltzaile-izena{'@'}adibidea.eus", + "title": "Harpidetu Fedibertsoan ostatatutako podcast batera" }, - "message": { - "success": "{ action } ekintza arrakastaz gauzatu da elementu batean | { action } ekintza arrakastaz gauzatu da { n } elementutan", - "needsRefresh": "Edukia eguneratu da, sakatu Freskatu eduki eguneratua ikusteko" - }, - "label": { - "actions": "Akzioak", - "performAction": "Burutu ekintzak" - }, - "modal": { - "performAction": { - "header": "{ action } abiarazi nahi duzu elementu batean? | { action } abiarazi nahi duzu { n } elementutan?", - "content": { - "warning": "Honek elementu askori eragin diezaieke edo ondorio konponezinak eduki, egiaztatu hau den benetan nahi duzuna." - } - } - }, - "header": { - "error": "Errorea akzioa aplikatzen zen bitartean" + "rss": { + "fieldLabel": "RSS jarioaren kokapena", + "fieldPlaceholder": "https://adibidea.eus/rss.xml", + "title": "Harpidetu podcast baten RSS jariora" } }, - "Duration": { - "meta": { - "hours": "{ hours } o { minutes } min", - "minutes": "{ minutes } minutu" - } - }, - "UserMenu": { - "link": { - "about": "Honi buruz", - "chat": "Txat gela", - "docs": "Dokumentazioa", - "forum": "Foroa", - "support": "Laguntza", - "git": "Arazoen jarraipena", - "login": "Hasi saioa", - "logout": "Amaitu saioa", - "notifications": "Jakinarazpenak", - "profile": "Profila", - "settings": "Ezarpenak", - "signup": "Erregistratu" - }, - "label": { - "shortcuts": "Laster-teklak", - "language": "Hizkuntza", - "theme": "Gaia" - } - }, - "UserModal": { - "link": { - "about": "Honi buruz", - "chat": "Txat gela", - "forum": "Foroa", - "support": "Laguntza", - "git": "Arazoen jarraipena", - "login": "Hasi saioa", - "logout": "Amaitu saioa", - "notifications": "Jakinarazpenak", - "profile": "Profila", - "settings": "Ezarpenak", - "signup": "Erregistratu" - }, - "label": { - "shortcuts": "Laster-teklak", - "language": "Hizkuntza", - "theme": "Gaia" - }, - "header": { - "options": "Aukerak" - }, - "button": { - "switchInstance": "Erabili beste instantzia bat" - } - }, - "DangerousButton": { - "button": { - "cancel": "Ezeztatu", - "confirm": "Baieztatu" - }, - "header": { - "confirm": "Nahi duzu akzio hau baieztatzea?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Ezeztatu", - "edit": "Editatu", - "less": "Erakutsi gutxiago", - "more": "Erakutsi gehiago", - "update": "Eguneratu deskribapena" - }, - "header": { - "failure": "Errorea deskribapena eguneratzerakoan" - }, - "empty": { - "noDescription": "Ez dago deskribapenik" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Garbitu" - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatuā€¦" - } - }, - "CollapseLink": { - "button": { - "collapse": "Tolestu", - "expand": "Zabaldu" - } - }, - "CopyInput": { - "button": { - "copy": "Kopiatu" - }, - "message": { - "success": "Testua arbelera kopiatu da!" - } - }, - "LoginModal": { - "link": { - "login": "Hasi saioa", - "signup": "Erregistratu" - }, - "header": { - "unauthenticated": "Autentifikatu gabe" - }, - "description": { - "noAccess": "Ez daukazu sarbiderik!" - } - }, - "ContentForm": { - "help": { - "markdown": "Markdown sintaxia onartzen da." - }, - "empty": { - "noContent": "Aurrebistarako ezer ez." - }, - "button": { - "preview": "Aurrebista", - "write": "Idatzi" - }, - "placeholder": { - "input": "Idatzi hitz batzuk hemenā€¦" - } - }, - "EmptyState": { - "header": { - "noResults": "Ez da emaitzarik aurkitu." - }, - "button": { - "refresh": "Freskatu" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG edo JPG. Neurriak 1400x1400px eta 3000x3000px artekoa izan behar du. Onartzen den gehienezko fitxategi-tamaina 5MB da." - }, - "button": { - "remove": "Kendu" - }, - "label": { - "upload": "Igo irudi berriaā€¦" - }, - "loader": { - "uploading": "Fitxategia igotzenā€¦" - }, - "header": { - "failure": "Zure eranskina ezin da gorde" - } - }, - "ExpandableDiv": { - "button": { - "less": "Erakutsi gutxiago", - "more": "Erakutsi gehiago" - } + "warning": { + "unsupported": "Objektu mota hau ez da onartzen oraindik" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - } + "SetInstanceModal": { + "button": { + "cancel": "Ezeztatu", + "submit": "Bidali" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } jada badago { 1 }(e)n." - }, - "button": { - "addDuplicate": "Gehitu halere", - "addToPlaylist": "Gehitu erreprodukzio-zerrenda honetan", - "addTrack": "Abestia sartu", - "cancel": "Ezeztatu", - "edit": "Editatu" - }, - "header": { - "addToPlaylist": "Gehitu erreprodukzio-zerrendan", - "available": "Zerrendak eskuragarri", - "manage": "Kudeatu zerrendak", - "noResults": "Ez dago zure iragazkiarekin bat datorren emaitzarik", - "addFailure": "Pista ezin da zerrenda batera gehitu" - }, - "table": { - "edit": { - "header": { - "edit": "Editatu", - "lastModification": "Azken aldaketa", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "placeholder": { - "filterPlaylist": "Idatzi erreprodukzio-zerrendaren izena" - }, - "label": { - "filter": "Iragazkia" - }, - "empty": { - "noPlaylists": "Ez da zerrendarik sortu oraindik" - } + "header": { + "chooseInstance": "Zure instantzia hautatu", + "failure": "Ezin da konektatu emandako URLarekin", + "suggestions": "Iradokitako aukerak" }, - "Editor": { - "button": { - "addDuplicate": "Gehitu halere", - "clear": "Garbitu zerrenda", - "copy": "Kopiatu uneko ilara erreprodukzio-zerrenda honetara", - "insertFromQueue": "Gehitu ilaratik (abesti { n }) | Gehitu ilaratik ({ n } abesti)" - }, - "error": { - "sync": "Errorea gertatu da aldaketak gordetzerakoan" - }, - "message": { - "sync": "Aldaketak zerbitzariarekin sinkronizatuta" - }, - "modal": { - "clearPlaylist": { - "header": "Nahi duzu \"{ playlist }\" zerrenda garbitzea?", - "content": { - "warning": "Honek zerrenda honetako pista guztiak kenduko ditu eta ezin da desegin." - } - } - }, - "help": { - "reorder": "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" - }, - "header": { - "editor": "Zerrenda editorea" - }, - "warning": { - "duplicate": "Zure ilarako pista batzuk zerrenda honetan daude dagoeneko:" - }, - "loading": { - "sync": "Aldaketak zerbitzariarekin sinkronizatzenā€¦" - } + "help": { + "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", + "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat.", + "serverDown": "Zerbitzaria erorita egon daiteke" }, - "TrackPlaylistIcon": { - "button": { - "add": "Gehitu erreprodukzio-zerrendanā€¦" - } + "label": { + "url": "Instantziaren URLa" }, - "Form": { - "header": { - "createPlaylist": "Zerrenda berria sortu", - "createSuccess": "Zerrenda sortuta", - "updateSuccess": "Zerrenda eguneratuta", - "createFailure": "Ezin izan da zerrenda sortu" - }, - "button": { - "create": "Zerrenda sortu", - "update": "Eguneratu zerrenda" - }, - "placeholder": { - "name": "Nire zerrenda txundigarria" - }, - "label": { - "name": "Zerrenda izena", - "visibility": "Zerrendaren ikusgaitasuna" - } - }, - "Widget": { - "button": { - "create": "Sortu erreprodukzio-zerrenda", - "more": "Erakutsi gehiago" - }, - "placeholder": { - "noPlaylists": "Ez da zerrendarik sortu oraindik" - } + "message": { + "currentConnection": "{ 0 } instantziara konektatuta zaude orain. Jarraituz gero, uneko instantziatik deskonektatuko zara eta datu lokal guztiak ezabatuko dira.", + "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username }-(e)k zure jarraipen-eskaera onartu du \"{ library }\" liburutegian", - "libraryFollow": "{ username } zure \"{ library }\" liburutegia jarraitzen hasi da", - "libraryPendingFollow": "{ username }-(e)k zure \"{ library }\" liburutegia jarraitu nahi du" + "ShortcutsModal": { + "button": { + "close": "Itxi" + }, + "header": { + "modal": "Laster-teklak" + }, + "shortcut": { + "audio": { + "clearQueue": "Garbitu ilara", + "decreaseVolume": "Jaitsi bolumena", + "expandQueue": "Zabaldu ilara/erreproduzigailu ikuspegia", + "increaseVolume": "Igo bolumena", + "label": "Audio erreproduzigailuaren laster-teklak", + "playNext": "Erreproduzitu hurrengo pista", + "playPause": "Pausatu/erreproduzitu uneko pista", + "playPrevious": "Erreproduzitu aurreko pista", + "seekBack30": "Bilatu atzeraka 30s", + "seekBack5": "Bilatu atzeraka 5s", + "seekForward30": "Bilatu aurreraka 30s", + "seekForward5": "Bilatu aurreraka 5s", + "shuffleQueue": "Nahasi ilara", + "toggleFavorite": "Txandakatu gogokoa", + "toggleLoop": "Txandakatu ilararen begizta", + "toggleMute": "Txandakatu mututzea" }, - "button": { - "approve": "Onartu", - "markRead": "Markatu irakurrita", - "markUnread": "Markatu irakurri gabe", - "reject": "Baztertu" + "general": { + "focus": "Fokuratu bilaketa-barra", + "label": "Lasterbide orokorrak", + "show": "Erakutsi erabilgarri dauden laster-tekla guztiak", + "unfocus": "Kendu fokua bilaketa-barrari" } } }, "Sidebar": { + "header": { + "administration": "Administrazioa", + "explore": "Arakatu", + "library": "Nire liburutegia", + "main": "Nabigazio nagusia", + "more": "Gehiago" + }, + "label": { + "add": "Edukia sartu", + "administration": "Administrazioa", + "edits": "Berrikuspen edizioak zain", + "follows": "Zain dauden jarraitzeko eskaerak", + "language": "Hizkuntza", + "main": "Menu nagusia", + "play": "Erreproduzitu pista hau", + "reports": "Zain dauden berrikuspen txostenak", + "theme": "Gaia" + }, "link": { "about": "Instantzia honi buruz", "albums": "Albumak", @@ -1805,44 +322,1985 @@ "radios": "Irratiak", "search": "Bilatu", "settings": "Ezarpenak", + "switchInstance": "Aldatu instantzia", "users": "Erabiltzaileak" - }, - "label": { - "add": "Edukia sartu", - "administration": "Administrazioa", - "language": "Hizkuntza", - "main": "Menu nagusia", - "follows": "Zain dauden jarraitzeko eskaerak", - "edits": "Berrikuspen edizioak zain", - "play": "Erreproduzitu pista hau", - "theme": "Gaia" - }, - "header": { - "administration": "Administrazioa", - "explore": "Arakatu", - "main": "Nabigazio nagusia", - "more": "Gehiago", - "library": "Nire liburutegia" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Gorde" + }, + "header": { + "error": "Errorea ezarpenak gordetzerakoan.", + "image": "Uneko irudia" + }, + "message": { + "success": "Ezarpenak arrakastaz eguneratuta." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Gehitu eremu berri bat", + "edit": "Editatu formularioa", + "preview": "Formularioaren aurrebista" + }, + "help": { + "additionalFields": "Formularioan erakusteko eremu gehigarriak. Soili eskuzko izen-emate baliozkotzea gaituta badago erakutsiko da.", + "helpText": "Izena emateko formularioaren hasieran bistaratuko den aukerako testua." + }, + "label": { + "additionalField": "Eremu gehigarria", + "additionalFields": "Eremu gehigarriak", + "delete": "Ezabatu", + "helpText": "Laguntza testua", + "moveDown": "Eraman behera", + "moveUp": "Eraman gora" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Ekintzak", + "label": "Eremuaren etiketa", + "required": "Beharrezkoa", + "type": "Eremu mota" + }, + "required": { + "false": "Ez", + "true": "Bai" + }, + "type": { + "long": "Testu luzea", + "short": "Testu laburra" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + }, + "title": "{ date }-(e)an eguneratua" + }, + "ChannelEntries": { + "help": { + "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." + } + }, + "ChannelForm": { + "header": { + "error": "Errorea kanala gordetzerakoan." + }, + "help": { + "discography": "Argitaratu zuk egindako musika album eta singlez osatutako diskografia eder batean.", + "podcast": "Ostatatu zure saioak eta mantendu zure komunitatea eguneratuta.", + "podcastFields": "Spotify edo iTunes bezalako plataforma batzuetako itunes:email eta itune:name eremuetan erabiltzen da.", + "username": "URLetan eta kanal hau Fedibertsoan jarraitzeko erabiltzen da. Ezin duzu aldatu aurrerago." + }, + "label": { + "category": "Kategoria", + "description": "Deskribapena", + "discography": "Artistaren diskografia", + "email": "Jabearen eposta helbidea", + "image": "Kanalaren irudia", + "language": "Hizkuntza", + "name": "Izena", + "owner": "Jabearen izena", + "podcast": "Podcastak", + "subcategory": "Azpikategoria", + "tags": "Etiketak", + "username": "Fedibertsoko izena" + }, + "legend": { + "purpose": "Zertarako erabiliko da kanal hau?" + }, + "loader": { + "loading": "Kargatzen" + }, + "placeholder": { + "name": "Kanalaren izen bikaina", + "username": "kanalarenizenbikaina" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "Saio { n } | { n } saio" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Erakutsi gehiago" + }, + "help": { + "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Erakutsi gehiago" + } + }, + "EmbedWizard": { + "button": { + "copy": "Kopiatu" + }, + "header": { + "preview": "Aurrebista" + }, + "help": { + "anonymous": "Jarri zure administratzaileekin harremanetan eta eskatu dagokion ezarpena eguneratzeko.", + "embed": "Kopiatu eta itsatsi kode hau zure webguneko HTMLan", + "width": "Utzi hutsik widget moldagarrirako" + }, + "label": { + "embed": "Txertatu kodea", + "height": "Widgetaren altuera", + "width": "Widgetaren zabalera" + }, + "message": { + "copy": "Testua arbelera kopiatu da!" + }, + "warning": { + "anonymous": "Partekatzeak ez du funtzionatuko instantzia honek ez duelako onartzen erabiltzaile anonimoek edukira sarbidea izatea." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Utzi jarraitzeko eskaera", + "follow": "Jarraitu", + "unfollow": "Utzi jarraitzeari" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu uneko ilaran", + "discretePlay": "Erreproduzitu", + "episodeDetails": "Saioaren xehetasunak", + "hideArtist": "Ezkutatu artista honen edukia", + "playAlbum": "Erreproduzitu albuma", + "playArtist": "Erreproduzitu artista", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "playPlaylist": "Erreproduzitu zerrenda", + "playTrack": "Erreproduzitu pista", + "playTracks": "Erreproduzitu pistak", + "report": "Salatuā€¦", + "startRadio": "Erreproduzitu antzeko kantak", + "trackDetails": "Pistaren xehetasunak" + }, + "title": { + "more": "Gehiagoā€¦", + "unavailable": "Pista hau ez dago sarbidea duzun liburutegietan" + } + }, + "Player": { + "header": { + "player": "Audio erreproduzigailua eta kontrolak" + }, + "label": { + "addArtistContentFilter": "Ezkutatu artista honen edukiaā€¦", + "audioPlayer": "Multimedia-erreproduzigailua", + "clearQueue": "Garbitu zure ilara", + "expandQueue": "Zabaldu ilara", + "loopingDisabled": "Begizta desgaituta. Egin klik pista bakarreko begiztara aldatzeko.", + "loopingSingle": "Pista bakarreko begiztan. Egin klik ilara osoko begiztara aldatzeko.", + "loopingWholeQueue": "Ilara osoko begiztan. Egin klik begizta desgaitzeko.", + "mute": "Isilarazi", + "nextTrack": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "previousTrack": "Aurreko pista", + "shuffleQueue": "Nahasi zure ilara", + "unmute": "Aktibatu audioa" + }, + "meta": { + "position": "{ index } / { length }", + "unknownAlbum": "Album ezezaguna", + "unknownArtist": "Artista ezezaguna" + } + }, + "PlayerControls": { + "labels": { + "next": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "previous": "Aurreko pista" + } + }, + "Search": { + "empty": { + "noAlbums": "Ez dago zure bilaketarekin bat datorren albumik", + "noArtists": "Ez dago zure bilaketarekin bat datorren artistarik" + }, + "header": { + "albums": "Albumak", + "artists": "Artistak", + "search": "Bilatu musika pixka bat" + }, + "placeholder": { + "search": "Artista, albuma, pista ā€¦" + } + }, + "SearchBar": { + "empty": { + "noResults": "Sentitzen dugu, ez dago emaitzarik bilaketa honentzat" + }, + "header": { + "noResults": "Ez da bat datorren emaitzarik aurkitu" + }, + "label": { + "album": "Albuma", + "artist": "Artista", + "category": { + "federation": "Federazioa", + "podcasts": "Podcastak" + }, + "search": "Bilatu edukia", + "tag": "Etiketa", + "track": "Pista" + }, + "link": { + "fediverse": "Bilatu fedibertsoan", + "more": "Emaitza gehiago šŸ”’", + "rss": "Harpidetu podcastera RSS bidez" + }, + "placeholder": { + "search": "Bilatu artistak, albumak, pistakā€¦" + } + }, + "VolumeControl": { + "button": { + "mute": "Isilarazi", + "unmute": "Aktibatu audioa" + }, + "label": { + "slider": "Doitu bolumena" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Erakutsi pistako ekintzak" + } + }, + "Modal": { + "button": { + "addToFavorites": "Gogokoetan sartu", + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu ilaran", + "albumDetails": "Ikusi albuma", + "artistDetails": "Ikusi artista", + "channelDetails": "Ikusi kanala", + "episodeDetails": "Saioaren xehetasunak", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "removeFromFavorites": "Kendu gogokoetatik", + "seriesDetails": "Ikusi serieak", + "startRadio": "Erreproduzitu irratia", + "trackDetails": "Pistaren xehetasunak" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Erakutsi pistako ekintzak" + } + }, + "Modal": { + "button": { + "addToFavorites": "Gogokoetan sartu", + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu ilaran", + "albumDetails": "Ikusi albuma", + "artistDetails": "Ikusi artista", + "channelDetails": "Ikusi kanala", + "episodeDetails": "Saioaren xehetasunak", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "removeFromFavorites": "Kendu gogokoetatik", + "seriesDetails": "Ikusi serieak", + "startRadio": "Erreproduzitu irratia", + "trackDetails": "Pistaren xehetasunak" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Albuma", + "artist": "Artista", + "title": "Izenburua" + } + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + }, + "empty": { + "noResults": "Ez da ezer aurkitu" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Birsortu tokena" + }, + "header": { + "appDetails": "Aplikazioaren xehetasunak", + "appSecretWarning": "Gorde token honen kopia bat leku seguru batean.", + "editApp": "Editatu aplikazioa" + }, + "help": { + "appDetails": "Aplikazioaren IDa eta sekretua balio sentikorrak dira eta pasahitz gisa tratatu behar dira. Ez partekatu beste inorrekin." + }, + "label": { + "accessToken": "Sarbide tokena", + "appId": "Aplikazioaren IDa", + "appSecret": "Aplikazioaren sekretua" + }, + "link": { + "settings": "Itzuli ezarpenetara" + }, + "message": { + "appSecretWarning": "Ezin izango duzu berriro ikusi behin pantaila honetatik irtetean." + }, + "title": "Editatu aplikazioa" + }, + "ApplicationForm": { + "button": { + "create": "Sortu aplikazioa", + "update": "Eguneratu aplikazioa" + }, + "header": { + "failure": "Ezin ditugu zure aldaketak gorde" + }, + "help": { + "redirectUri": "Erabili \"urn:ietf:wg:oauth:2.0:oob\" birbideratzea URI bezala zure aplikazioa ez bada webean zerbitzatzen." + }, + "label": { + "name": "Izena", + "redirectUri": "Birbideratu URIa", + "scopes": { + "description": "Gurasoek \"Irakurri\" edo \"Idatzi\" esparruak egiaztatzeak dagozkien haurren esparru guztietarako sarbidea suposatzen du.", + "label": "Esparruak", + "read": { + "description": "Soilik irakurtzeko sarbidea erabiltzailearen datuetara", + "label": "Irakurri" + }, + "write": { + "description": "Idazteko soilik sarbidea erabiltzaile datuetara", + "label": "Idatzi" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Itzuli ezarpenetara" + }, + "title": "Sortu aplikazio berri bat" + }, + "Authorize": { + "button": { + "authorize": "Baimendu { app }" + }, + "header": { + "access": "{ app }-(e)k zure Funkwhale kontura sartu nahi du", + "allScopes": "Sarbide osoa", + "authorize": "Baimendu hirugarrenen aplikazioa", + "authorizeFailure": "Errorea aplikazioa baimentzerakoan", + "fetchFailure": "Errorea aplikazioaren datuak eskuratzerakoan", + "readOnly": "Irakurtzeko soilik", + "writeOnly": "Idazteko soilik" + }, + "help": { + "copyCode": "Aplikazioan kopiatu eta itsasteko kodea erakutsiko zaizu", + "pasteCode": "Kopiatu eta itsatsi honako kodea aplikazioan:", + "redirect": "{ 0 }(e)ra birbideratua izango zara" + }, + "message": { + "unknownPermissions": "Aplikazioak ondorengo baimen ezezagunak ere eskatzen ari da:" + }, + "title": "Baimendu aplikazioa" + }, + "LoginForm": { + "button": { + "login": "Sartu" + }, + "header": { + "loginFailure": "Ezin dugu zure saioa hasi" + }, + "help": { + "approvalRequired": "Duela gutxi erregistratu bazara, baliteke moderazio taldeak zure kontua berrikusi edo zure eposta helbidea egiaztatu arte itxaron behar izatea.", + "invalidCredentials": "Egiaztatu erabiltzaile izena eta pasahitza zuzenak direla eta ziurtatu zure eposta helbidea egiaztatu duzula." + }, + "label": { + "password": "Pasahitza", + "username": "Erabiltzaile-izena edo eposta helbidea" + }, + "link": { + "createAccount": "Sortu kontua", + "resetPassword": "Berrezarri pasahitza" + }, + "message": { + "redirect": "{domain} domeinura birbideratua izango zara autentifikatzeko" + }, + "placeholder": { + "username": "Idatzi zure erabiltzaile-izena edo eposta helbidea" + } + }, + "Logout": { + "button": { + "logout": "Bai, amaitu saioa!" + }, + "header": { + "confirm": "Ziur al zaude saioa itxi nahi duzula?", + "unauthenticated": "Une honetan ez duzu saioa hasita" + }, + "link": { + "login": "Hasi saioa!" + }, + "message": { + "loggedIn": "{ username } moduan saioa hasita" + }, + "title": "Amaitu saioa" + }, + "Plugin": { + "button": { + "save": "Gorde", + "scan": "Eskaneatu" + }, + "description": { + "library": "Fitxategiak ze liburutegitara inportatu behar diren." + }, + "header": { + "failure": "Errorea plugina gordetzerakoan" + }, + "label": { + "library": "Liburutegia", + "pluginEnabled": "Gaituta" + }, + "link": { + "documentation": "Dokumentazioa" + } + }, + "Settings": { + "button": { + "delete": "Ezabatu", + "deleteAccount": "Ezabatu nire kontuaā€¦", + "deleteAccountConfirm": "Ezabatu nire kontua", + "disableSubsonic": "Sarbidea ezgaitu", + "edit": "Editatu", + "password": "Pasahitza aldatu", + "refresh": "Freskatu", + "remove": "Kendu", + "removeApp": "Kendu aplikazioa", + "revoke": "Ezeztatu", + "revokeAccess": "Ezeztatu sarbidea", + "update": "Eguneratu", + "updateSettings": "Eguneratu ezarpenak" + }, + "description": { + "authorizedApps": "Hau da zure kontuaren datuetara sarbidea duten aplikazioen zerrenda.", + "changeEmail": "Aldatu zure kontuarekin lotutako eposta helbidea. Berrespena bidaliko dizugu helbide berrira.", + "changePassword": { + "paragraph1": "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu.", + "paragraph2": "Pasahitz hau erabiltzen duten bezeroetan pasahitza eguneratu beharko duzu." + }, + "contentFilters": "Edukiaren iragazkiek zerbitzuan ikusi nahi ez duzun edukia ezkutatzen lagunduko dizute.", + "deleteAccount": "Beheko formularioa erabiliz zure kontua eta erlazionatutako datu guztiak ezabatu ditzakezu behin betiko eta atzera bueltarik gabe. Berresteko eskatuko zaizu.", + "plugins": "Erabili pluginak Funkwhale hedatu eta ezaugarri gehigarriak lortzeko.", + "yourApps": "Hau da erregistratu dituzun aplikazioen zerrenda." + }, + "header": { + "accountFailure": "Ezin dugu zure kontua ezabatu", + "accountSettings": "Kontuaren ezarpenak", + "authorizedApps": "Baimendutako aplikazioak", + "avatar": "Irudia", + "avatarFailure": "Zure avatarra ezin da gorde", + "changeEmail": "Aldatu nire eposta helbidea", + "changePassword": "Nire pasahitza aldatu", + "contentFilters": "Edukien iragazkiak", + "deleteAccount": "Ezabatu nire kontua", + "emailFailure": "Ezin dugu zure eposta helbidea aldatu", + "hiddenArtists": "Ezkutuko artistak", + "noApps": "Ez daukazu kontuari konektatutako aplikaziorik.", + "noPersonalApps": "Ez daukazu aplikaziorik erregistratuta oraindik.", + "passwordFailure": "Zure pasahitza ezin da aldatu", + "plugins": "Pluginak", + "settingsUpdated": "Ezarpenak eguneratuta", + "updateFailure": "Zure ezarpenak ezin dira eguneratu", + "yourApps": "Zure aplikazioak" + }, + "help": { + "changePassword": "Mesedez egiaztatu bi aldiz pasahitza zuzena dela", + "noApps": "Hirugarrengoen aplikazioei zure datuetarako sarbidea baimentzen badiezu, aplikazio horiek hemen zerrendatuko dira.", + "noPersonalApps": "Erregistratu bat Funkwhale hirugarrenen aplikazioekin integratzeko." + }, + "label": { + "avatar": "Irudia", + "currentPassword": "Uneko pasahitza", + "newEmail": "Eposta helbide berria", + "newPassword": "Pasahitz berria", + "password": "Pasahitza" + }, + "link": { + "managePlugins": "Kudeatu pluginak", + "newApp": "Erregistratu aplikazio berri bat" + }, + "message": { + "confirmDelete": "Zure ezabatze eskaera bidali da, zure kontua eta edukia laster ezabatuko dira", + "currentEmail": "Zure uneko posta elektronikoa {email} da" + }, + "modal": { + "changePassword": { + "content": { + "logout": "Saio hau amaituko zaizu eta berriarekin hasi beharko duzu", + "subsonic": "Zure Subsonic pasahitza ausazko pasahitz batekin ordezkatuko da, Subsonic pasahitz zaharra erabiltzen duten gailuetan saioa amaituz", + "warning": "Pasahitza aldatzeak hurrengo ondorioak izango ditu" + }, + "header": "Zure pasahitza aldatu?" + }, + "deleteAccount": { + "content": { + "warning": "Hau ezin da desegin eta datuak behin betiko ezabatuko ditu gure zerbitzarietatik. Berehala zure saioa amaitu da." + }, + "header": "Zure kontua ezabatu nahi duzu?" + }, + "deleteApp": { + "content": { + "warning": "Honek behin betiko ezabatuko ditu aplikazioa eta erlazionatutako token guztiak." + }, + "header": "\"{ application }\" aplikazioa kendu?" + }, + "revokeApp": { + "content": { + "warning": "Honek eragotzi egingo dio aplikazio honi zerbitzura zure izenean sartzea." + }, + "header": "\"{ application }\" aplikazioaren sarbidea ezeztatu?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Sortze data", + "name": "Izena" + } + }, + "authorizedApps": { + "header": { + "application": "Aplikazioa", + "permissions": "Baimenak" + } + }, + "yourApps": { + "header": { + "application": "Aplikazioa", + "creationDate": "Sortze data", + "scopes": "Esparruak" + } + } + }, + "title": "Kontuaren ezarpenak", + "warning": { + "deleteAccount": "Zure kontua gure zerbitzarietatik ezabatuko da minutu batzuk barru. Zure datuen kopia eduki dezaketen beste zerbitzariei ere ezabatzeko jakinaraziko diegu. Kontuan izan zerbitzari batzuk lineaz kanpo egon daitezkeela edo ez dutela eskaera osatu nahiko." + } + }, + "SignupForm": { + "button": { + "create": "Sortu nire kontua" + }, + "header": { + "login": "Sartu zure Funkwhale kontura", + "signupFailure": "Ezin da zure kontua sortu." + }, + "label": { + "email": "Eposta helbidea", + "invitation": "Gonbidapen kodea", + "password": "Pasahitza", + "username": "Erabiltzaile-izena" + }, + "message": { + "accountCreated": "Zure kontua arrakastaz sortu da. Egiaztatu zure eposta saio hasten saiatu aurretik.", + "awaitingReview": "Zure kontu-eskaera arrakastaz bidali da. Eposta mezu bat jasoko duzu gure moderazio taldeak zure eskaera berrikusi duenean.", + "registrationClosed": "Izena-emate publikoak itxita daude instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko.", + "requiresReview": "Instantzia honetako izen emateak irekita daude, baina moderatzaileek berrikusi behar dituzte onartu aurretik." + }, + "placeholder": { + "email": "Idatzi zure eposta helbidea", + "invitation": "Idatzi zure gonbidapen kodea (ez ditu maiuskulak eta minuskulak bereizten)", + "username": "Idatzi zure erabiltzaile-izena" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Sarbidea ezgaitu", + "confirmNewPassword": "Eskatu pasahitza", + "disable": "Subsonic sarbidea ezgaitu", + "newPassword": "Eskatu pasahitz berria" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da.", + "paragraph2": "Zure zerrendak eta musika lineaz kanpo gozatzeko erabil ditzakezu, adibidez, zure mugikor edo tabletan.", + "paragraph3": "Hala ere, bezero horietatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu." + } + }, + "header": { + "error": "Errorea", + "subsonic": "Subsonic API pasahitza" + }, + "label": { + "subsonicField": "Zure Subsonic API pasahitza" + }, + "link": { + "apps": "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" + }, + "message": { + "accessDisabled": "Sarbidea desgaituta", + "passwordUpdated": "Pasahitza eguneratuta", + "unavailable": "Subsonic APIa ez dago erabilgarri Funkwhale instantzia honetan." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Honek guztiz desgaituko du Subsonic APIrako sarbidea kontu honetatik." + }, + "header": "Subsonic API sarbidea ezgaitu?" + }, + "newPassword": { + "content": { + "warning": "Honek uneko pasahitza erabiltzen duten gailuetako zure saioak amaituko ditu." + }, + "header": "Eskatu Subsonic API pasahitz berria?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Errorea sorketan" + }, + "label": { + "albumTitle": "Izenburua" + } + }, + "AlbumModal": { + "button": { + "cancel": "Ezeztatu", + "create": "Sortu" + }, + "header": { + "newAlbum": "Album berria", + "newSeries": "Serie berria" + } + }, + "AlbumSelect": { + "label": { + "album": "Albuma", + "series": "Serieak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + }, + "option": { + "none": "Bat ere ez" + } + }, + "LicenseSelect": { + "label": { + "license": "Lizentzia" + }, + "link": { + "license": "Lizentzia honi buruz" + }, + "option": { + "none": "Bat ere ez" + } + }, + "SubscribeButton": { + "help": { + "auth": "Saioa hasi behar duzu kanal honetara harpidetzeko" + }, + "title": { + "subscribe": "Harpidetu", + "unsubscribe": "Kendu harpidetza" + } + }, + "UploadForm": { + "button": { + "edit": "Editatu", + "ignore": "Ez ikusi egin", + "remove": "Kendu", + "resume": "Berrekin", + "retry": "Saiatu berriro" + }, + "description": { + "extensions": "Euskarria duten hedapenak: { extensions }" + }, + "header": { + "error": "Errorea argitaratzerakoan" + }, + "help": { + "license": "Gehitu lizentzia zure igoerari zure entzuleei askatasun batzuk emateko." + }, + "label": { + "channel": "Kanala", + "openBrowser": "Arakatuā€¦" + }, + "message": { + "dragAndDrop": "Arrastatu eta askatu fitxategiak hemen edo ireki nabigatzailea fitxategiak igotzeko", + "pending": "Argitaratu gabeko igoera zirriborro batzuk dauzkazu." + }, + "status": { + "errored": "Erroreduna", + "pending": "Zain", + "uploading": "Igotzen" + }, + "warning": { + "quota": "Ez daukazu fitxategiak kargatzeko leku librerik. Jarri moderatzaileekin harremanetan." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Deskribapena", + "image": "Pistaren irudia", + "position": "Kokapena", + "tags": "Etiketak", + "title": "Izenburua" + } + }, + "UploadModal": { + "button": { + "cancel": "Ezeztatu", + "close": "Itxi", + "finishLater": "Amaitu beranduago", + "next": "Hurrengo pausoa", + "previous": "Aurreko pausoa", + "publish": "Argitaratu", + "update": "Eguneratu" + }, + "header": { + "processing": "Igoerak prozesatzen", + "publish": "Argitaratu audioa", + "uploadDetails": "Igoeraren xehetasunak", + "uploadFiles": "Fitxategiak kargatzeko" + }, + "meta": { + "files": "Fitxategi { n } | { n } fitxategi", + "quota": "Gelditzen den biltegiratze-lekua: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Elementu bakarra hautatuta | { n } elementu hautatuta", + "go": "Joan", + "launch": "Abiarazi", + "refresh": "Freskatu taularen edukia", + "select": "Hautatu", + "selectAll": "Hautatu elementu guztiak", + "selectCurrentPage": "Aukeratu orrialde hau bakarrik", + "selectElement": "Hautatu elementu { n } | Hautatu { n } elementuak", + "selected": "Aaukeratutako { n },{ total }(e)tik | { n } aukeratutako { total }(e)tik" + }, + "header": { + "error": "Errorea akzioa aplikatzen zen bitartean" + }, + "label": { + "actions": "Akzioak", + "performAction": "Burutu ekintzak" + }, + "message": { + "needsRefresh": "Edukia eguneratu da, sakatu Freskatu eduki eguneratua ikusteko", + "success": "{ action } ekintza arrakastaz gauzatu da elementu batean | { action } ekintza arrakastaz gauzatu da { n } elementutan" + }, + "modal": { + "performAction": { + "content": { + "warning": "Honek elementu askori eragin diezaieke edo ondorio konponezinak eduki, egiaztatu hau den benetan nahi duzuna." + }, + "header": "{ action } abiarazi nahi duzu elementu batean? | { action } abiarazi nahi duzu { n } elementutan?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Kendu" + }, + "header": { + "failure": "Zure eranskina ezin da gorde" + }, + "help": { + "upload": "PNG edo JPG. Neurriak 1400x1400px eta 3000x3000px artekoa izan behar du. Onartzen den gehienezko fitxategi-tamaina 5MB da." + }, + "label": { + "upload": "Igo irudi berriaā€¦" + }, + "loader": { + "uploading": "Fitxategia igotzenā€¦" + } + }, + "CollapseLink": { + "button": { + "collapse": "Tolestu", + "expand": "Zabaldu" + } + }, + "ContentForm": { + "button": { + "preview": "Aurrebista", + "write": "Idatzi" + }, + "empty": { + "noContent": "Aurreikusteko ezer" + }, + "help": { + "markdown": "Markdown sintaxia onartzen da" + }, + "placeholder": { + "input": "Idatzi hitz batzuk hemenā€¦" + } + }, + "CopyInput": { + "button": { + "copy": "Kopiatu" + }, + "message": { + "success": "Testua arbelera kopiatu da!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Baieztatu" + }, + "header": { + "confirm": "Nahi duzu akzio hau baieztatzea?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } o { minutes } min", + "minutes": "{ minutes } minutu" + } + }, + "EmptyState": { + "button": { + "refresh": "Freskatu" + }, + "header": { + "noResults": "Ez da emaitzarik aurkitu." + } + }, + "ExpandableDiv": { + "button": { + "less": "Erakutsi gutxiago", + "more": "Erakutsi gehiago" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Garbitu" + }, + "label": { + "search": "Bilatu" + }, + "placeholder": { + "search": "Bilatuā€¦" + } + }, + "LoginModal": { + "description": { + "noAccess": "Ez duzu sarbiderik" + }, + "header": { + "unauthenticated": "Autentifikatu gabe" + }, + "link": { + "login": "Hasi saioa", + "signup": "Erregistratu" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Ezeztatu", + "edit": "Editatu", + "less": "Erakutsi gutxiago", + "more": "Erakutsi gehiago", + "update": "Eguneratu deskribapena" + }, + "empty": { + "noDescription": "Ez dago deskribapenik" + }, + "header": { + "failure": "Errorea deskribapena eguneratzerakoan" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Hizkuntza", + "shortcuts": "Laster-teklak", + "theme": "Gaia" + }, + "link": { + "about": "Honi buruz", + "chat": "Txat gela", + "docs": "Dokumentazioa", + "forum": "Foroa", + "git": "Arazoen jarraipena", + "login": "Hasi saioa", + "logout": "Amaitu saioa", + "notifications": "Jakinarazpenak", + "profile": "Profila", + "settings": "Ezarpenak", + "signup": "Erregistratu", + "support": "Laguntza" + } + }, + "UserModal": { + "button": { + "switchInstance": "Erabili beste instantzia bat" + }, + "header": { + "options": "Aukerak" + }, + "label": { + "language": "Hizkuntza", + "shortcuts": "Laster-teklak", + "theme": "Gaia" + }, + "link": { + "about": "Honi buruz", + "chat": "Txat gela", + "docs": "Dokumentazioa", + "forum": "Foroa", + "git": "Arazoen jarraipena", + "login": "Hasi saioa", + "logout": "Amaitu saioa", + "notifications": "Jakinarazpenak", + "profile": "Profila", + "settings": "Ezarpenak", + "signup": "Erregistratu", + "support": "Laguntza" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Ez da pistarik gehitu oraindik zure gogokoetara" + }, + "header": { + "favorites": "Gogoko { n } | { n } gogoko" + }, + "link": { + "library": "Arakatu liburutegia" + }, + "loader": { + "loading": "Zure gogokoak kargatzenā€¦" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "title": "Zure gogokoak" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Gogokoetan sartu", + "remove": "Kendu gogokoetatik" + }, + "label": { + "inFavorites": "Gogokoetan" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Itxi", + "reload": "Itxi eta freskatu orria" + }, + "description": { + "failure": "Errore bat gertatu da datuak freskatzen saiatzean:", + "pending": "Freskatze eskaera ez da garaiz prozesatu gure zerbitzarian. Beranduago prozesatuko da.", + "skipped": "Urruneko zerbitzariak erantzun du, baina Funkwhalek ez du itzulitako datuen euskarririk.", + "success": "Datuak behar bezala freskatu dira urruneko zerbitzaritik." + }, + "header": { + "failure": "Freskatu errorea", + "pending": "Freskatu zain daudenak", + "refresh": "Objektua freskatzen urruneko zerbitzaritikā€¦", + "saveFailure": "Errorea ezarpenak gordetzerakoan", + "skipped": "Freskatzea saltatu da", + "success": "Arrakastaz freskatua" + }, + "loader": { + "awaitingResult": "Erantzunen zainā€¦", + "fetchRequest": "Bilaketa eskatzenā€¦" + }, + "table": { + "error": { + "label": { + "detail": "Errorearen xehetasuna", + "type": "Errore mota" + }, + "value": { + "connectionError": "Ezin izan da urruneko zerbitzarira konektatu", + "httpError": "HTTP errorea gertatu da urruneko zerbitzariarekin harremanetan jartzean", + "httpStatus": "Urruneko zerbitzariak HTTP { status } egoerarekin erantzun du", + "invalidAttributesError": "Urruneko zerbitzariak itzulitako datuek atributu baliogabeak edo faltan ditu", + "invalidJsonError": "Urruneko zerbitzariak baliogabeko JSON edo JSON-LD datuak itzuli ditu", + "timeoutError": "Urruneko zerbitzariak ez du behar bezain azkar erantzun", + "unknownError": "Errore ezezaguna" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Erakutsi gehiago" + }, + "empty": { + "noMatch": "Ez da bat datorren liburutegirik aurkitu." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Kopiatu" + }, + "message": { + "copy": "Testua arbelera kopiatu da!" + }, + "title": "Erakutsi/ezkutatu pasahitza" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Gehitu deskribapenaā€¦" + }, + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + }, + "title": "Albuma" + }, + "AlbumDetail": { + "description": { + "libraries": "Album hau ondorengo liburutegietan dago:" + }, + "header": { + "episodes": "Saioak", + "libraries": "Erabiltzaileen liburutegiak", + "tracks": "Pistak" + }, + "meta": { + "volume": "{ number } bolumena" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Ezeztatu", + "delete": "Ezabatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiagoā€¦" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "musicbrainz": "Ikusi MusicBrainz-en" + }, + "modal": { + "delete": { + "content": { + "warning": "Album hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Album hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu album hau zure webgunean" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Editatu album hau", + "suggest": "Iradoki edizio bat album honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "Albums": { + "button": { + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Albumak arakatzen" + }, + "label": { + "search": "Bilatu", + "tags": "Etiketak" + }, + "link": { + "addMusic": "Gehitu musikaren bat" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Idatzi albumaren izenaā€¦" + }, + "title": "Albumak" + }, + "ArtistBase": { + "button": { + "cancel": "Ezeztatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiagoā€¦", + "play": "Erreproduzitu album denak" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "musicbrainz": "Ikusi MusicBrainz-en", + "wikipedia": "Bilatu Wikipedian" + }, + "meta": { + "albums": "0 album | {n} album | {n} album", + "tracks": "0 pista hemen: | {count} pista hemen: | {count} pista hemen:" + }, + "modal": { + "embed": { + "header": "Txertatu artista honen lana zure webgunean" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Kendu iragazkia", + "more": "Kargatu gehiagoā€¦" + }, + "description": { + "library": "Artista hau ondorengo liburutegietan dago:" + }, + "header": { + "album": "Artista honen albumak", + "library": "Erabiltzaileen liburutegiak", + "track": "Artista honen pista berriak" + }, + "link": { + "filter": "Berrikusi nire iragazkiak" + }, + "message": { + "filter": "Artista honekin erlazionatutako edukia ezkutatzen ari zara une honetan." + } + }, + "ArtistEdit": { + "header": { + "edit": "Editatu artista hau", + "suggest": "Iradoki edizio bat artista honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "Artists": { + "button": { + "search": "Bilatu", + "upload": "Gehitu musikaren bat" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Artistak arakatzen" + }, + "label": { + "excludeCompilation": "Baztertu bilduma-artistak", + "search": "Artistaren izena", + "tags": "Etiketak" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Bilatuā€¦" + }, + "title": "Artistak" + }, + "EditCard": { + "button": { + "approve": "Onartu", + "delete": "Ezabatu", + "reject": "Baztertu" + }, + "header": { + "modification": "Aldaketa { id }" + }, + "link": { + "track": "Pista #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Iradokizuna guztiz ezabatuko da, ekintza hau ezin da desegin." + }, + "delete": { + "header": "Iradokizun hau ezabatu nahi duzu?" + } + }, + "status": { + "applied": "Onartuta eta aplikatuta", + "approved": "Onartuta", + "pending": "Berrikuspenaren zain", + "rejected": "Baztertuta" + }, + "table": { + "update": { + "header": { + "field": "Eremua", + "newValue": "Balio berria", + "oldValue": "Balio zaharra" + }, + "notApplicable": "Daturik gabe" + } + } + }, + "EditForm": { + "button": { + "cancel": "Ezeztatu", + "clear": "Garbitu", + "new": "Bidali beste edizio bat", + "reset": "Berrezarri hasierako baliora", + "showAll": "Erakutsi edizio guztiak", + "showUnreviewed": "Mugatu berrikusi gabeko edizioetara", + "submit": "Bilatu eta aplikatu edizioa", + "suggest": "Bidali iradokizuna" + }, + "empty": { + "suggestEdit": "Iradoki aldaketa bat beheko formularioa erabiliz" + }, + "header": { + "failure": "Errorea aldatutakoa bidaltzerakoan", + "recentEdits": "Azken aldiko edizioak", + "success": "Zure edizioa behar bezala bidalita.", + "unreviewed": "Berrikuspenaren zain dauden azken aldiko edizioak" + }, + "label": { + "summary": "Laburpena (hautazkoa)" + }, + "message": { + "noPermission": "Ez daukazu objektu hau editatzeko baimenik, baina aldaketak iradoki ditzakezu. Bidalitakoan, iradokizunak onartu aurretik berrikusiko dira." + }, + "notApplicable": "Daturik gabe", + "placeholder": { + "summary": "Zure aldaketak deskribatzen dituen laburpentxoa." + } + }, + "FileUpload": { + "button": { + "cancel": "Ezeztatu", + "retry": "Saiatu berriro huts egindako igoerekin" + }, + "description": { + "import": "Inportazioaren egoera", + "previousImport": "Zure aurreko inportazioaren emaitzak:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Errorea inportazioa abiarazterakoan", + "local": "Igo musika zure gailutik", + "server": "Inportazioaren egoera", + "status": "Inportatu egoera" + }, + "label": { + "extensions": "Euskarria duten hedapenak: { extensions }", + "remainingSpace": "Gelditzen den biltegiratze-lekua", + "uploadWidget": "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak" + }, + "link": { + "picard": "Helburu horretarako Picard erabiltzea gomendatzen dugu.", + "processing": "Prozesatzen", + "uploading": "Igotzen" + }, + "message": { + "listener": "Orri honek irten nahi duzula berrestea eskatzen du, baliteke sartutako datuak ez gordetzea.", + "local": { + "copyright": "Ez zarela ari copyright duen edukia liburutegi publiko batera igotzen, bestela legea hausten ari zara", + "format": "Igotzen ari zaren audio fitxategiak OGG, Flac, MP3 edo AIFF formatuan daude", + "message": "Zure liburutegira musika igotzera zoaz. Jarraitu aurretik, ziurtatu:", + "tag": "Igotzen ari zaren musika fitxategiak behar bezala etiketatuta daude." + } + }, + "table": { + "upload": { + "header": { + "actions": "Ekintzak", + "filename": "Fitxategi-izena", + "size": "Tamaina", + "status": "Egoera" + }, + "progress": "% {percent}", + "status": { + "pending": "Zain", + "uploaded": "Igota", + "uploading": "Igotzenā€¦" + } + } + }, + "tooltip": { + "denied": "Igoera ukatuta, ziurtatu fitxategia ez dela handiegia eta ez zarela zure mugara iritsi", + "extension": "Fitxategi-mota baliogabea, ziurtatu igotzen ari zarena audio-fitxategi bat dela. Onartzen diren fitxategi-luzapenak: { extensions }", + "network": "Sare-errorea eman da fitxategi hau igotzerakoan", + "retry": "Saiatu berriro", + "size": "Ezin da fitxategi hau igo, ziurtatu ez dela handiegia", + "timeout": "Igoeraren denbora-muga, mesedez saiatu berriro" + } + }, + "FsBrowser": { + "button": { + "import": "Inportatu" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Inportazioa ez da hasi oraindik" + } + }, + "Home": { + "header": { + "newChannels": "Kanal berriak", + "playlists": "Zerrendak", + "recentlyAdded": "Azken aldian gehituta", + "recentlyFavorited": "Azken aldian gogokoa", + "recentlyListened": "Azken aldian entzuna" + }, + "title": "Liburutegia" + }, + "ImportStatusModal": { + "button": { + "close": "Itxi" + }, + "error": { + "importFailure": "Errore bat gertatu da igoera prozesatzean. Azpian informazio gehiago aurkituko duzu.", + "invalidMetadata": { + "label": "Metadatu baliogabeak", + "message": "Fitxategiaren metadatuak baliogabeak dira edo beharrezko eremuak falta dituzte." + }, + "unknownError": { + "label": "Errore ezezaguna", + "message": "Errore ezezaguna gertatu da" + } + }, + "header": { + "importDetail": "Inportazioaren xehetasunak" + }, + "link": { + "documentation": "Irakurri errori honi buruzko gure dokumentazioa", + "support": "Ireki laguntza haria (sartu arazteko informazioa azpian, zure mezuan)" + }, + "message": { + "importDetail": "Igoera zain dago oraindik eta laster prozesatuko du zerbitzariak.", + "importSuccess": "Igoera behar bezala prozesatu da zerbitzarian." + }, + "table": { + "error": { + "debug": "Arazketa informazioa", + "errorDetail": "Errorearen xehetasuna", + "errorType": "Errore mota", + "help": "Lortu laguntza" + } + }, + "warning": { + "importSkipped": "Igoera saltatu egin da zure liburutegietako batean antzeko bat badagoelako dagoeneko." + } + }, + "Podcasts": { + "button": { + "cancel": "Ezeztatu", + "channel": "Sortu kanala", + "feed": "Harpidetu RSS jariora", + "search": "Bilatu", + "subscribe": "Harpidetu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Podcastak arakatzen" + }, + "label": { + "search": "Podcastaren izenburua", + "tags": "Etiketak" + }, + "modal": { + "subscription": { + "header": "Harpidetza" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Bilatuā€¦" + }, + "title": "Podcastak" + }, + "Radios": { + "button": { + "add": "Sortu irrati bat", + "create": "Sortu zure irrati propioa", + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Irratiak arakatzen", + "instance": "Instantziako irratiak", + "user": "Erabiltzaileen irratiak" + }, + "label": { + "search": "Bilatu" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Idatzi irrati baten izena ā€¦" + }, + "title": "Irratiak" + }, + "TagDetail": { + "header": { + "channels": "Kanalak", + "tracks": "Pistak" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "moderation": "Ireki moderazio interfazean" + } + }, + "TagSelector": { + "placeholder": { + "search": "Bilatuā€¦" + } + }, + "TrackBase": { + "button": { + "cancel": "Ezeztatu", + "delete": "Ezabatu", + "download": "Deskargatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiagoā€¦", + "play": "Erreproduzitu" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "wikipedia": "Bilatu Wikipedian" + }, + "modal": { + "delete": { + "content": { + "warning": "Pista eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Pista hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu pista hau zure webgunean" + } + }, + "subtitle": { + "with-uploader": "{0} erabiltzaileak igota data honetan: {1}", + "without-uploader": "Igoera-data: {0}" + }, + "title": "Pista" + }, + "TrackDetail": { + "description": { + "library": "Pista hau ondorengo liburutegietan dago:" + }, + "header": { + "episode": "Saioaren xehetasunak", + "library": "Erlazionatutako liburutegiak", + "playlists": "Erlazionatutako zerrendak", + "release": "Argitalpenaren xehetasunak", + "track": "Pistaren xehetasunak" + }, + "link": { + "musicbrainz": "Ikusi MusicBrainz-en" + }, + "notApplicable": "Daturik gabe", + "table": { + "release": { + "album": "Albuma", + "artist": "Artista", + "copyright": "Copyright-a", + "license": "Lizentzia", + "series": "Seriea", + "url": "URL", + "year": "Urtea" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Kodeka", + "downloads": "Deskargak", + "duration": "Iraupena", + "size": "Tamaina" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Editatu pista hau", + "suggest": "Iradoki edizio bat pista honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Iragazkia sortu", + "save": "Gorde" + }, + "description": { + "builder": "Zure irizpidearen araberako pistak erreproduzituko dituen irrati pertsonalizatua sortu dezakezu interfaze honekin." + }, + "header": { + "builder": "Eraikitzailea", + "created": "Irratia sortuta", + "matches": "Pista { n } dator bat iragazki konbinatuekin | { n } pista datoz bat iragazki konbinatuekin", + "updated": "Irratia eguneratuta" + }, + "label": { + "description": "Deskribapena", + "filter": "Iragazkiak sortu zure irratia pertsonalizatzeko", + "name": "Irratiaren izena", + "public": "Erakutsi publikoki" + }, + "option": { + "filter": "Aukeratu filtroa" + }, + "placeholder": { + "description": "Nire deskribapen txundigarria", + "name": "Nire irrati txundigarria" + }, + "table": { + "filter": { "header": { - "accessedDate": "Sarbide data", - "account": "Kontua", - "creationDate": "Sortze data", - "domain": "Domeinua", - "importStatus": "Inportazioaren egoera", - "library": "Liburutegia", - "name": "Izena", - "size": "Tamaina", - "visibility": "Ikusgaitasuna" + "actions": "Akzioak", + "candidates": "Hautagaiak", + "config": "Konfigurazioa", + "exclude": "Baztertu", + "name": "Iragazkiaren izena" } } }, + "title": "Irrati eraikitzailea" + }, + "Filter": { + "cancelButton": "Ezeztatu", + "excludeLabel": "Baztertu", + "matchingTracks": "iragazkiarekin bat datorren pistarik ez | iragazkiarekin bat datorren {n} pista | iragazkiarekin bat datozen {n} pista", + "matchingTracksModalHeader": "Iragazkiarekin bat datozen pistak", + "removeButton": "Kendu" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Kategoria", + "search": "Bilatu" + }, + "link": { + "local": "Lokala", + "moderation": "Ireki moderazio interfazean" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenaren, kontuaren arabera" + }, + "table": { + "channel": { + "header": { + "account": "Kontua", + "albums": "Albumak", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako albumak eta erlazionatutako pistak, igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "link": { + "local": "Lokala", + "moderation": "Ireki moderazio interfazean" + }, + "notApplicable": "Daturik gabe", + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, MusicBrainz IDaren arabera" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izenburua", + "releaseDate": "Argitalpen-data", + "tracks": "Pistak" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako artista eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "category": "Kategoria", + "search": "Bilatu" + }, + "link": { + "local": "Lokala" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenaren MusicBrainz IDaren arabera" + }, + "table": { + "artist": { + "header": { + "albums": "Albumak", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "all": "Dena", + "approved": "Onartuta", + "pending": "Berrikuspenaren zain", + "rejected": "Baztertuta" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu kontuaren, laburpenaren, domeinuaren arabera" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako liburutegia eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu", + "visibility": "Ikusgaitasuna" + }, + "link": { + "local": "Lokala" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, aktorearen, izenaren, azalpenaren arabera" + }, + "table": { + "library": { + "header": { + "account": "Kontua", + "creationDate": "Sortze data", + "domain": "Domeinua", + "followers": "Jarraitzaileak", + "name": "Izena", + "uploads": "Igoerak", + "visibility": "Ikusgaitasuna" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu izenaren arabera" + }, + "table": { + "tag": { + "header": { + "albums": "Albumak", + "artists": "Artistak", + "creationDate": "Sortze data", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako pistak eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "link": { + "local": "Lokala" + }, + "notApplicable": "Daturik gabe", + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren, MusicBrainz IDaren arabera" + }, + "table": { + "track": { + "header": { + "album": "Albuma", + "artist": "Artista", + "creationDate": "Sortze data", + "domain": "Domeinua", + "license": "Lizentzia", + "title": "Izenburua" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako igoerak ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu", + "status": "Inportazioaren egoera", + "visibility": "Ikusgaitasuna" + }, + "link": { + "local": "Lokala" + }, + "notApplicable": "Daturik gabe", "option": { "all": "Dena", "failed": "Huts egin du", @@ -1858,396 +2316,68 @@ }, "label": "Ordena" }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako igoerak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu", - "status": "Egoera", - "visibility": "Ikusgaitasuna" - }, - "placeholder": { - "search": "Bilatu domeinuaren, aktorearen, izenaren, erreferentziaren, iturburuaren... arabera" - }, "pagination": { "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "LibrariesTable": { + }, + "placeholder": { + "search": "Bilatu domeinuaren, aktorearen, izenaren, erreferentziaren, iturburuaren arabera" + }, "table": { - "library": { + "upload": { "header": { + "accessedDate": "Sarbide data", "account": "Kontua", "creationDate": "Sortze data", "domain": "Domeinua", - "followers": "Jarraitzaileak", + "importStatus": "Inportazioaren egoera", + "library": "Liburutegia", "name": "Izena", - "uploads": "Igoerak", + "size": "Tamaina", "visibility": "Ikusgaitasuna" } } - }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako liburutegia eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "label": { - "search": "Bilatu", - "visibility": "Ikusgaitasuna" - }, - "placeholder": { - "search": "Bilatu domeinuaren, aktorearen, izenaren, deskribapenarenā€¦ arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Albuma", - "artist": "Artista", - "creationDate": "Sortze data", - "domain": "Domeinua", - "license": "Lizentzia", - "title": "Izenburua" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako pistak eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren, MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albumak", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "label": { - "category": "Kategoria", - "search": "Bilatu" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako artista eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenaren MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albumak", - "artists": "Artistak", - "creationDate": "Sortze data", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." - } - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu izenaren arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "EditsCardList": { - "option": { - "all": "Dena", - "approved": "Onartuta", - "pending": "Berrikuspenaren zain", - "rejected": "Baztertuta" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "placeholder": { - "search": "Bilatu kontuaren, laburpenaren, domeinuaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - }, - "label": { - "status": "Egoera" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izenburua", - "releaseDate": "Argitalpen-data", - "tracks": "Pistak" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako albumak eta erlazionatutako pistak, igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala", - "moderation": "Ireki moderazio interfazean" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenburuaren, artistaren, MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Kontua", - "domain": "Domeinua", - "local": "Lokala", - "owner": "Jabea", - "type": "Mota" - }, - "status": { - "assignedTo": "Honi esleituta", - "internalNotes": "Barne oharrak", - "resolutionDate": "Ebazpenaren data", - "resolved": "Ebatzita", - "status": "Egoera", - "unresolved": "Konpondu gabea" - }, - "report": { - "category": "Kategoria", - "creationDate": "Sortze data", - "submittedBy": "Bidaltzailea" + "AccountsTable": { + "action": { + "purge": { + "label": "Kendu" } }, - "header": { - "actions": "Akzioak", - "notes": "Barne oharrak", - "message": "Mezua", - "reportedObject": "Salatutako objektua" - }, - "button": { - "confirmDelete": "Ezabatu", - "delete": "Ezabatu salatutako objektua", - "resolve": "Ebatzi", - "unresolve": "Konpondu gabe" - }, - "modal": { - "delete": { - "header": "Salatutako objektua ezabatu nahi duzu?", - "content": { - "warning": "Honek txostenarekin erlazionatutako objektua ezabatuko du. Ezabaketa ezin da desegin." - } - } - }, - "notApplicable": "Daturik gabe", - "link": { - "moderation": "Ireki moderazio interfazean", - "report": "Salatu { id }", - "publicPage": "Ikusi orrialde publikoa" - }, - "warning": { - "objectDeleted": "Txosten honekin lotutako objektua ezabatu da." - } - }, - "UserRequestCard": { - "header": { - "actions": "Akzioak", - "notes": "Barne oharrak", - "signup": "Mezua" - }, - "button": { - "approve": "Onartu", - "reject": "Ukatu" - }, - "table": { - "status": { - "approved": "Onartuta", - "assignedTo": "Honi esleituta", - "internalNotes": "Barne oharrak", - "pending": "Zain", - "refused": "Ukatuta", - "status": "Egoera" - }, - "request": { - "creationDate": "Sortze data", - "submittedBy": "Bidaltzailea" - } - }, - "notApplicable": "Daturik gabe", - "link": { - "request": "Eskatu { id }" - }, - "message": { - "signup": "Erabiltzaile honek zure instantzian erregistratu nahi du." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Gehitu moderazio-arau berri bat", - "editRule": "Editatu moderazio-arauak", - "failure": "Errorea araua sortzerakoan" - }, "label": { - "blockAll": "Blokeatu dena", - "policyDisabled": "Desgaituta", - "policyEnabled": "Gaituta", - "silenceActivity": "Isilarazi aktibitatea", - "silenceNotifications": "Isilarazi jakinarazpenak", - "customizeRule": "Edo pertsonalizatu zure araua", - "policyReason": "Arrazoia", - "rejectMedia": "Baztertu multimedia" + "search": "Bilatu" }, - "tooltip": { - "blockAll": "Blokeatu kontu edo domeinu honetako guztia. Erakundearekin edozein harreman ekidingo du, eta lotutako edukiak ezabatu (igoerak, liburutegiak, jarraitzeak, etab.)", - "rejectMedia": "Ez deskargatu multimedia fitxategirik (audioa, albumaren azala, kontuaren avatarra...) kontu edo domeinu honetatik.", - "summary": "Azaldu zergatik aplikatzen duzun gidalerro hau: arau hau zergatik gehitu duzun gogoratzen lagunduko dizu. Zure instantziaren konfigurazioaren arabera publikoki erakutsi liteke erabiltzaileei zein moderazio-arau dauden ulertzen laguntzeko.", - "silenceActivity": "Ezkutatu kontua edo domeinuaren edukia, jarraitzaileentzat ezik.", - "silenceNotifications": "Eragotzi kontu edo domeinuak jakinarazpenak abiaraztea, jarraitzaileengandik izan ezik.", - "isActive": "Erabili ezarpen hau gidalerroa aldi baterako gaitu/desgaitzeko, guztiz kendu gabe." + "link": { + "local": "Kontu lokala" }, - "button": { - "cancel": "Ezeztatu", - "create": "Sortu", - "delete": "Ezabatu", - "confirm": "Ezabatu moderazio-araua", - "update": "Eguneratu" + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" }, - "modal": { - "delete": { - "header": "Moderazio-arau hau ezabatu nahi duzu?", - "content": { - "warning": "Ekintza hau ezin da desegin." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Gehitu oharra" + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" }, "placeholder": { - "summary": "Deskribatu zer ekintza egin diren edo horiekin lotutako beste edozein eguneraketaā€¦" + "search": "Bilatu domeinuaren, erabiltzaile-izenaren, biografiaren arabera" }, - "header": { - "failure": "Errorea oharra bidaltzerakoan" + "table": { + "account": { + "header": { + "domain": "Domeinua", + "firstSeen": "Lehen aldiz ikusia", + "lastSeen": "Ikusi zen azken aldia", + "moderationRule": "Moderazio arauaren pean", + "name": "Izena", + "uploads": "Igoerak" + }, + "moderationRule": "Bai" + } } }, "DomainsTable": { @@ -2262,6 +2392,16 @@ "label": "Kendu baimenendutakoen zerrendatik" } }, + "empty": { + "noPods": "Ez da beste instantziarik aurkitu" + }, + "label": { + "inList": "Onartuen zerrendan dago", + "search": "Bilatu" + }, + "link": { + "list": "Domeinu hau zure onartuen zerrendan dago" + }, "option": { "all": "Dena", "no": "Ez", @@ -2275,76 +2415,32 @@ }, "label": "Ordena" }, - "table": { - "domain": { - "header": { - "firstSeen": "Lehen aldiz ikusia", - "name": "Izena", - "receivedMessages": "Jasotako mezuak", - "moderationRule": "Moderazio arauaren pean", - "users": "Erabiltzaileak" - }, - "moderationRule": "Bai" - } - }, - "label": { - "inList": "Onartuen zerrendan dago", - "search": "Bilatu" - }, - "empty": { - "noPods": "Ez da beste instantziarik aurkitu" + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" }, "placeholder": { "search": "Bilatu izenaren araberaā€¦" }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - }, - "link": { - "list": "Domeinu hau zure onartuen zerrendan dago" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domeinua", "firstSeen": "Lehen aldiz ikusia", - "lastSeen": "Ikusi zen azken aldia", - "name": "Izena", "moderationRule": "Moderazio arauaren pean", - "uploads": "Igoerak" + "name": "Izena", + "receivedMessages": "Jasotako mezuak", + "users": "Erabiltzaileak" }, "moderationRule": "Bai" } - }, - "link": { - "local": "Kontu lokala" - }, - "action": { - "purge": { - "label": "Kendu" - } - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, erabiltzaile-izenaren, biografiaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" } }, "InstancePolicyCard": { + "button": { + "edit": "Editatu" + }, + "header": { + "rule": "Araua" + }, "label": { "blockAll": "Blokeatu dena", "muteActivity": "Isilarazi aktibitatea", @@ -2352,15 +2448,49 @@ "reason": "Arrazoia", "rejectMedia": "Baztertu multimedia" }, - "button": { - "edit": "Editatu" - }, "status": { "enabled": "Gaituta", "paused": "Pausatuta" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Ezabatu moderazio-araua", + "create": "Sortu", + "delete": "Ezabatu", + "update": "Eguneratu" }, "header": { - "rule": "Araua" + "addRule": "Gehitu moderazio-arau berri bat", + "editRule": "Editatu moderazio-arauak", + "failure": "Errorea araua sortzerakoan" + }, + "label": { + "blockAll": "Blokeatu dena", + "customizeRule": "Edo pertsonalizatu zure araua", + "policyDisabled": "Desgaituta", + "policyEnabled": "Gaituta", + "policyReason": "Arrazoia", + "rejectMedia": "Baztertu multimedia", + "silenceActivity": "Isilarazi aktibitatea", + "silenceNotifications": "Isilarazi jakinarazpenak" + }, + "modal": { + "delete": { + "content": { + "warning": "Ekintza hau ezin da desegin" + }, + "header": "Moderazio-arau hau ezabatu nahi duzu?" + } + }, + "tooltip": { + "blockAll": "Blokeatu kontu edo domeinu honetako guztia. Erakundearekin edozein harreman ekidingo du, eta lotutako edukiak ezabatu (igoerak, liburutegiak, jarraitzeak, etab.)", + "isActive": "Erabili ezarpen hau gidalerroa aldi baterako gaitu/desgaitzeko, guztiz kendu gabe.", + "rejectMedia": "Ez deskargatu multimedia fitxategirik (audioa, albumaren azala, kontuaren avatarra...) kontu edo domeinu honetatik.", + "silenceActivity": "Ezkutatu kontua edo domeinuaren edukia, jarraitzaileentzat ezik.", + "silenceNotifications": "Eragotzi kontu edo domeinuak jakinarazpenak abiaraztea, jarraitzaileengandik izan ezik.", + "summary": "Azaldu zergatik aplikatzen duzun gidalerro hau: arau hau zergatik gehitu duzun gogoratzen lagunduko dizu. Zure instantziaren konfigurazioaren arabera publikoki erakutsi liteke erabiltzaileei zein moderazio-arau dauden ulertzen laguntzeko." } }, "InstancePolicyModal": { @@ -2370,161 +2500,130 @@ }, "modal": { "manage": { - "header": "Kudeatu { obj }(r)en moderazio arauak", "content": { "warning": "Entitate honek moderazio arau espezifikoak ditu" - } + }, + "header": "Kudeatu { obj }(r)en moderazio arauak" } } }, + "NoteForm": { + "button": { + "add": "Gehitu oharra" + }, + "header": { + "failure": "Errorea oharra bidaltzerakoan" + }, + "placeholder": { + "summary": "Deskribatu zer ekintza egin diren edo horiekin lotutako beste edozein eguneraketaā€¦" + } + }, "NotesThread": { "button": { "delete": "Ezabatu" }, "modal": { "delete": { - "header": "Ohar hau ezabatu nahi duzu?", "content": { "warning": "Oharra ezabatuko da. Ekintza hau ezin da desegin." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Kontua", - "albums": "Albumak", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izena", - "tracks": "Pistak" + }, + "header": "Ohar hau ezabatu nahi duzu?" } } }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" + "ReportCard": { + "button": { + "confirmDelete": "Ezabatu", + "delete": "Ezabatu salatutako objektua", + "resolve": "Ebatzi", + "unresolve": "Konpondu gabe" }, - "label": "Ordena" + "header": { + "actions": "Akzioak", + "message": "Mezua", + "notes": "Barne oharrak", + "reportedObject": "Salatutako objektua" + }, + "link": { + "moderation": "Ireki moderazio interfazean", + "publicPage": "Ikusi orrialde publikoa", + "report": "Salatu { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Honek txostenarekin erlazionatutako objektua ezabatuko du. Ezabaketa ezin da desegin." + }, + "header": "Salatutako objektua ezabatu nahi duzu?" + } + }, + "notApplicable": "Daturik gabe", + "table": { + "object": { + "account": "Kontua", + "domain": "Domeinua", + "local": "Lokala", + "owner": "Jabea", + "type": "Mota" + }, + "report": { + "category": "Kategoria", + "creationDate": "Sortze data", + "submittedBy": "Bidaltzailea" + }, + "status": { + "assignedTo": "Honi esleituta", + "internalNotes": "Barne oharrak", + "resolutionDate": "Ebazpenaren data", + "resolved": "Ebatzita", + "status": "Egoera", + "unresolved": "Konpondu gabea" + } + }, + "warning": { + "objectDeleted": "Txosten honekin lotutako objektua ezabatu da." + } }, - "label": { - "category": "Kategoria", - "search": "Bilatu" - }, - "link": { - "local": "Lokala", - "moderation": "Ireki moderazio interfazean" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenaren, kontuaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + "UserRequestCard": { + "button": { + "approve": "Onartu", + "reject": "Ukatu" + }, + "header": { + "actions": "Akzioak", + "notes": "Barne oharrak", + "signup": "Mezua" + }, + "link": { + "request": "Eskatu { id }" + }, + "message": { + "signup": "Erabiltzaile honek zure instantzian erregistratu nahi du." + }, + "notApplicable": "Daturik gabe", + "table": { + "request": { + "creationDate": "Sortze data", + "submittedBy": "Bidaltzailea" + }, + "status": { + "approved": "Onartuta", + "assignedTo": "Honi esleituta", + "internalNotes": "Barne oharrak", + "pending": "Zain", + "refused": "Ukatuta", + "resolutionDate": "Ebazpen-data", + "status": "Egoera" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Kontuaren egoera", - "email": "Eposta", - "lastActivity": "Azken jarduera", - "permissions": "Baimenak", - "signup": "Erregistratu", - "status": "Egoera", - "username": "Erabiltzaile-izena" - }, - "accountStatus": { - "active": "Aktibo", - "inactive": "Ez-aktiboa" - }, - "status": { - "admin": "Admin", - "regular": "Erabiltzaile arrunta", - "staff": "Taldeko kidea" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "permission": { - "library": "Liburutegia", - "moderation": "Moderazioa", - "settings": "Ezarpenak" - }, - "notApplicable": "Daturik gabe", - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, izenarenā€¦ arabera" - }, - "pagination": { - "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Dena", - "expired": "Iraungita/erabilita", - "open": "Ireki" - }, - "table": { - "invitation": { - "header": { - "code": "Kodea", - "creationDate": "Sortze data", - "expirationDate": "Iraungitze data", - "owner": "Jabea", - "status": "Egoera" - } - } - }, - "action": { - "delete": "Ezabatu" - }, - "label": { - "expired": "Iraungita", - "unused": "Ez da erabiltzen", - "search": "Bilatu", - "status": "Egoera", - "used": "Erabilita" - }, - "ordering": { - "label": "Ordena" - }, - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, kodearenā€¦ arabera" - }, - "pagination": { - "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" - } - }, "InvitationForm": { "button": { "clear": "Garbitu", "new": "Lortu gonbidapen berria" }, - "table": { - "invitation": { - "header": { - "code": "Kodea", - "link": "Partekatu esteka" - } - } - }, "header": { "failure": "Errorea gonbidapena sortzerakoan" }, @@ -2533,523 +2632,59 @@ }, "placeholder": { "invitation": "Utzi hutsik ausazko kode batentzat" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Ekintzak", - "label": "Eremuaren etiketa", - "type": "Eremu mota", - "required": "Beharrezkoa" - }, - "type": { - "long": "Testu luzea", - "short": "Testu laburra" - }, - "required": { - "false": "Ez", - "true": "Bai" - } - } - }, - "button": { - "add": "Gehitu eremu berri bat", - "edit": "Editatu formularioa", - "preview": "Formularioaren aurrebista" - }, - "label": { - "additionalField": "Eremu gehigarria", - "additionalFields": "Eremu gehigarriak", - "delete": "Ezabatu", - "helpText": "Laguntza testua", - "moveDown": "Eraman behera", - "moveUp": "Eraman gora" - }, - "help": { - "additionalFields": "Formularioan erakusteko eremu gehigarriak. Soili eskuzko izen-emate baliozkotzea gaituta badago erakutsiko da.", - "helpText": "Izena emateko formularioaren hasieran bistaratuko den aukerako testua." - } - }, - "SettingsGroup": { - "header": { - "image": "Uneko irudia", - "error": "Errorea ezarpenak gordetzerakoan" - }, - "button": { - "save": "Gorde" - }, - "message": { - "success": "Ezarpenak arrakastaz eguneratuta." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Dena" - }, - "label": { - "category": "Kategoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Salaketa anonimoak desgaituta daude. Hasi saioa salaketa bidaltzeko.", - "modal": "Objektu hau salatu nahi al duzu?", - "submissionFailure": "Errorea salaketa bidaltzerakoan" - }, - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali txostena" - }, - "label": { - "email": "Eposta", - "forwardToDomain": "Bidali { domain} domeinura", - "message": "Mezua" - }, - "description": { - "forwardToDomain": "Bidali zure txostenaren kopia anonimatua elementu hau hartzen duen zerbitzarira.", - "message": "Erabili eremu hau moderatzaileari zure txostenari buruzko informazio gehigarria emateko.", - "modal": "Erabili formulario hau moderazio taldeari txosten bat bidaltzeko.", - "email": "Eposta helbide hau erabiliko dugu salaketa hau dela eta zurekin harremanetan jarri behar badugu." - }, - "message": { - "submissionSuccess": "Salaketa arrakastaz bidali da, esker aunitz" - } - }, - "FilterModal": { - "button": { - "cancel": "Ezeztatu", - "hide": "Ezkutatu edukia" - }, - "message": { - "success": "Edukien iragazkia behar bezala gehitu da" - }, - "header": { - "modal": "\"{ name }\" artistaren edukia ezkutatu nahi duzu?", - "failure": "Errorea iragazkia sortzerakoan" - }, - "warning": { - "createFilter": { - "listItem2": "\"Azken aldian gehituta\" widget-ean", - "listItem3": "Artista eta albumen zerrendetan", - "listItem1": "Beste erabiltzaileen gogokoetan eta entzundakoen historian", - "listItem4": "Irratien iradokizunetan", - "listIntro": "Artista honen pista, album eta erabiltzaile aktibitatea ez dituzu ikusiko hemendik aurrera:" - } - }, - "help": { - "createFilter": "Zure iragazkiak nahi duzunean kudeatu eta eguneratu ditzakezu kontuaren ezarpenetan." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Errore bat gertatu da datuak freskatzen saiatzean:", - "success": "Datuak behar bezala freskatu dira urruneko zerbitzaritik.", - "pending": "Freskatze eskaera ez da garaiz prozesatu gure zerbitzarian. Beranduago prozesatuko da.", - "skipped": "Urruneko zerbitzariak erantzun du, baina Funkwhalek ez du itzulitako datuen euskarririk." - }, - "table": { - "error": { - "value": { - "httpError": "HTTP errorea gertatu da urruneko zerbitzariarekin harremanetan jartzean", - "invalidAttributesError": "Urruneko zerbitzariak itzulitako datuek atributu baliogabeak edo faltan ditu", - "connectionError": "Ezin izan da urruneko zerbitzarira konektatu", - "httpStatus": "Urruneko zerbitzariak HTTP { status } egoerarekin erantzun du", - "timeoutError": "Urruneko zerbitzariak ez du behar bezain azkar erantzun", - "invalidJsonError": "Urruneko zerbitzariak baliogabeko JSON edo JSON-LD datuak itzuli ditu", - "unknownError": "Errore ezezaguna" - }, - "label": { - "detail": "Errorearen xehetasuna", - "type": "Errore mota" - } - } - }, - "button": { - "close": "Itxi", - "reload": "Itxi eta freskatu orria" - }, - "header": { - "saveFailure": "Errorea ezarpenak gordetzerakoan", - "failure": "Freskatu errorea", - "pending": "Freskatu zain daudenak", - "success": "Arrakastaz freskatua", - "skipped": "Freskatzea saltatu da", - "refresh": "Objektua freskatzen urruneko zerbitzaritikā€¦" - }, - "loader": { - "fetchRequest": "Bilaketa eskatzenā€¦", - "awaitingResult": "Erantzunen zainā€¦" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Ez da bat datorren liburutegirik aurkitu." - }, - "button": { - "showMore": "Erakutsi gehiago" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Audio erreproduzigailuaren laster-teklak", - "clearQueue": "Garbitu ilara", - "decreaseVolume": "Jaitsi bolumena", - "expandQueue": "Zabaldu ilara/erreproduzigailu ikuspegia", - "increaseVolume": "Igo bolumena", - "playPause": "Pausatu/erreproduzitu uneko pista", - "playNext": "Erreproduzitu hurrengo pista", - "playPrevious": "Erreproduzitu aurreko pista", - "seekBack30": "Bilatu atzeraka 30s", - "seekBack5": "Bilatu atzeraka 5s", - "seekForward30": "Bilatu aurreraka 30s", - "seekForward5": "Bilatu aurreraka 5s", - "shuffleQueue": "Nahasi ilara", - "toggleFavorite": "Txandakatu gogokoa", - "toggleMute": "Txandakatu mututzea", - "toggleLoop": "Txandakatu ilararen begizta" - }, - "general": { - "focus": "Fokuratu bilaketa-barra", - "label": "Lasterbide orokorrak", - "show": "Erakutsi erabilgarri dauden laster-tekla guztiak", - "unfocus": "Kendu fokua bilaketa-barrari" - } - }, - "button": { - "close": "Itxi" - }, - "header": { - "modal": "Laster-teklak" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali" - }, - "header": { - "chooseInstance": "Zure instantzia hautatu", - "failure": "Ezin da konektatu emandako URLarekin", - "suggestions": "Iradokitako aukerak" - }, - "label": { - "url": "Instantziaren URLa" - }, - "help": { - "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", - "serverDown": "Zerbitzaria erorita egon daiteke", - "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat." - }, - "message": { - "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" - } - }, - "Queue": { - "button": { - "clear": "Garbitu", - "close": "Itxi", - "stopRadio": "Gelditu irratia" - }, - "label": { - "duration": "Iraupena", - "addArtistContentFilter": "Ezkutatu artista honen edukiaā€¦", - "next": "Hurrengo pista", - "pause": "Pausatu", - "play": "Erreproduzitu", - "previous": "Aurreko pista", - "queue": "Ilara", - "remove": "Kendu", - "restart": "Berrasi pista" - }, - "message": { - "radio": "Abesti berriak hemen gehituko dira automatikoki.", - "automaticPlay": "Hurrengo pista automatikoki erreproduzituko da segundo batzuk barruā€¦" - }, - "header": { - "failure": "Pista ezin da kargatu", - "radio": "Irrati bat martxan duzu" - }, - "meta": { - "queuePosition": "Pista { index } / { length }" - }, - "warning": { - "connectivity": "Konexio arazo bat izan dezakezu." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Kopiatu" - }, - "title": "Erakutsi/ezkutatu pasahitza", - "message": { - "copy": "Testua arbelera kopiatu da!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Editatu" - } - }, - "Button": { - "startRadio": "Erreproduzitu irratia", - "stopRadio": "Gelditu irratia" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Errorea objektua eskuratzerakoan" - }, - "button": { - "fediverse": "Fedibertsoa", - "rss": "RSS", - "search": "Bilatu" - }, - "label": { - "fediverse": { - "fieldLabel": "Fedibertsoko objektua", - "title": "Harpidetu Fedibertsoan ostatatutako podcast batera" - }, - "rss": { - "fieldPlaceholder": "https://adibidea.eus/rss.xml", - "fieldLabel": "RSS jarioaren kokapena", - "title": "Harpidetu podcast baten RSS jariora" - } - }, - "warning": { - "unsupported": "Objektu mota hau ez da onartzen oraindik" - }, - "error": { - "fetchFailed": "Objektu hau ezin da berreskuratu" - }, - "description": { - "fediverse": "Erabili formulario hau fedibertsoan ostatatutako kanal batera harpidetzeko.", - "rss": "Erabili formulario hau RSS jario batera bere URLaren bidez harpidetzeko." - } - }, - "PageNotFound": { - "link": { - "home": "Joan hasiera orrira" - }, - "title": "Orrialdea ez da aurkitu", - "header": { - "pageNotFound": "Orrialdea ez da aurkitu!" - }, - "message": { - "pageNotFound": "Sentitzen dugu, eskatu duzun orria ez da existitzen:" - } - }, - "vui": { - "Pagination": { - "next": "Hurrengo orria", - "label": "Orrialdekatzea", - "previous": "Aurreko orria" - } - }, - "tags": { - "List": { - "button": { - "more": "Erakutsi etiketa 1 gehiago | Erakutsi { n } etiketa gehiago" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "listenings": "Entzunaldi { n } | { n } entzunaldi", - "subscribers": "Harpidetu { n } | { n } harpidetu", - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "channelEpisodes": "Saio guztiak", - "mirrored": "{ domain } domeinutik ispilatua", - "moderation": "Ireki moderazio interfazean", - "channelOverview": "Informazio orokorra", - "channelTracks": "Pistak", - "domainView": "Ikusi { domain }(e)n" - }, - "header": { - "artistChannel": "Artistaren kanala", - "podcastChannel": "Podcast kanala" - }, - "button": { - "cancel": "Ezeztatu", - "confirm": "Ezabatu", - "delete": "Ezabatuā€¦", - "edit": "Editatuā€¦", - "embed": "Txertatu", - "play": "Erreproduzitu", - "updateChannel": "Eguneratu kanala", - "upload": "Igo" - }, - "title": "Kanala", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Kopiatu eta itsatsi URL hau zure podcast aplikazio gogokoenean:" - }, - "header": "Harpidetu RSS bidez" - }, - "fediverse": { - "content": { - "help": "Mastodon edo fedibertsoko beste aplikazioren bat erabiltzen ari bazara, kontu honetara harpidetu zaitezke:" - }, - "header": "Harpidetu Fedibertsoan" - }, - "funkwhale": { - "header": "Harpidetu Funkwhalen" - }, - "header": "Harpidetu kanal honetara" }, - "delete": { - "header": "Kanal hau ezabatu nahi duzu?", - "content": { - "warning": "Kanal hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu artista honen lana zure webgunean" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Gehitu berria", - "erroredUploads": "Ikusi huts egindako igoerak", - "skippedUploads": "Ikusi saltatutako igoerak" - }, - "header": { - "albums": "Albumak", - "latestEpisodes": "Azken saioak", - "latestTracks": "Azken abestiak", - "series": "Serieak", - "uploadsFailure": "Igoera batzuk ezin izan dira argitaratu", - "uploadsProcessing": "Igoerak prozesatzen", - "uploadsSuccess": "Igoerak arrakastaz argitaratuta" - }, - "meta": { - "progress": "Prozesatutako igoerak:" - }, - "message": { - "processing": "Funkwhale zure igoerak prozesatzen ari da eta laster izango dira prest." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Gehitu berria" - }, - "button": { - "cancel": "Ezeztatu", - "subscribe": "Harpidetu" - }, - "placeholder": { - "search": "Iragazi izenaren araberaā€¦" - }, - "title": "Harpidetutako kanalak", - "modal": { - "subscription": { - "header": "Harpidetza" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "details": "Liburutegiaren xehetasunak" - }, - "label": { - "size": "Liburutegi honetako fitxategien guztizko tamaina" - }, - "button": { - "upload": "Igo" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } erabilita baimendutako { max }e(ta)tik", - "errored": "Erroredun fitxategiak", - "pending": "Fitxategiak faltan", - "skipped": "Saltatutako fitxategiak" - }, - "header": { - "currentUsage": "Oraingo erabilera" - }, - "loading": { - "currentUsage": "Erabilpen datuak kargatzenā€¦" - }, - "button": { - "purge": "Kendu" - }, - "modal": { - "purgeErrored": { - "header": "Erroreak emandako fitxategiak kendu?", - "content": { - "description": "Igotako baina oraindik zerbitzariak prozesatu ezin izan dituen pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - }, - "purgePending": { - "header": "Zain dauden fitxategiak kendu?", - "content": { - "description": "Igotako baina oraindik prozesatu gabeko pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - }, - "purgeSkipped": { - "header": "Saltatutako fitxategiak kendu?", - "content": { - "description": "Inportazio prozesuan igotako baina saltatutako pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - } - }, - "link": { - "viewFiles": "Ikusi fitxategiak" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Albuma", - "artist": "Artista", - "duration": "Iraupena", - "importStatus": "Inportazioaren egoera", - "size": "Tamaina", - "title": "Izenburua", - "uploadDate": "Igoera data" + "code": "Kodea", + "link": "Partekatu esteka" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Ezabatu" + }, + "label": { + "expired": "Iraungita", + "search": "Bilatu", + "status": "Egoera", + "unused": "Ez da erabiltzen", + "used": "Erabilita" }, "option": { - "status": { - "all": "Dena", - "draft": "Zirriborroa", - "failed": "Huts egin du", - "finished": "Amaituta", - "pending": "Zain", - "skipped": "Saltatuta" - } + "all": "Dena", + "expired": "Iraungita/erabilita", + "open": "Ireki" }, + "ordering": { + "label": "Ordena" + }, + "pagination": { + "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" + }, + "placeholder": { + "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, kodearen arabera" + }, + "table": { + "invitation": { + "header": { + "code": "Kodea", + "creationDate": "Sortze data", + "expirationDate": "Iraungitze data", + "owner": "Jabea", + "status": "Egoera", + "user": "Erabiltzailea" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Bilatu" + }, + "notApplicable": "Daturik gabe", "ordering": { "direction": { "ascending": "Gorantza", @@ -3058,397 +2693,579 @@ }, "label": "Ordena" }, - "action": { - "delete": "Ezabatu", - "restartImport": "Hasi berriro inportazioa" + "pagination": { + "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" }, - "label": { - "importStatus": "Inportazioaren egoera", - "search": "Bilatu" - }, - "notApplicable": "Daturik gabe", - "empty": { - "noTracks": "Ez da pistarik gehitu oraindik liburutegi honetara" + "permission": { + "library": "Liburutegia", + "moderation": "Moderazioa", + "settings": "Ezarpenak" }, "placeholder": { - "search": "Bilatu izenburuaren, artistaren, albumarenā€¦ arabera" + "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, izenaren arabera" }, - "button": { - "showStatus": "Erakutsi pista honen igoeraren egoerari buruzko informazioa" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "Home": { - "link": { - "createLibrary": "Liburutegi berria sortu" - }, - "loading": { - "libraries": "Liburutegiak kargatzenā€¦" - }, - "empty": { - "noLibrary": "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua." - }, - "header": { - "libraries": "Nire liburutegiak" - } - }, - "Form": { - "button": { - "create": "Liburutegia sortu", - "delete": "Ezabatu", - "confirm": "Liburutegia ezabatu", - "update": "Eguneratu liburutegia" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu?", - "content": { - "warning": "Liburutegia eta bere pista guztiak ezabatuko dira. Ekintza hau ezin da desegin." + "table": { + "user": { + "accountStatus": { + "active": "Aktibo", + "inactive": "Ez-aktiboa" + }, + "header": { + "accountStatus": "Kontuaren egoera", + "email": "Eposta", + "lastActivity": "Azken jarduera", + "permissions": "Baimenak", + "signup": "Erregistratu", + "status": "Egoera", + "username": "Erabiltzaile-izena" + }, + "status": { + "admin": "Admin", + "regular": "Erabiltzaile arrunta", + "staff": "Taldeko kidea" } } - }, - "label": { - "description": "Deskribapena", - "name": "Izena", - "visibility": "Ikusgaitasuna" - }, - "header": { - "failure": "Errorea" - }, - "description": { - "library": "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu.", - "visibility": "Zure liburutegia besteekin partekatu dezakezu, ikusgaitasuna edozein dela ere." - }, - "message": { - "libraryCreated": "Liburutegia sortuta", - "libraryDeleted": "Liburutegia ezabatuta", - "libraryUpdated": "Liburutegia eguneratuta" - }, - "placeholder": { - "name": "Nire liburutegi txundigarria", - "description": "Liburutegi honetan nire musika pertsonala dago, espero dut gustuko izango duzula." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista", - "failedTracks": "Erroredun pistak:", - "lastUpdate": "Azken eguneraketa:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." - }, - "header": "Liburutegi hau jarraitzeari utzi?" - } - }, - "button": { - "cancel": "Utzi jarraitzeko eskaera", - "follow": "Jarraitu", - "pending": "Jarraipen-eskaera onarpenaren zain", - "unfollow": "Utzi jarraitzeari" - }, - "link": { - "scanDetails": "Xehetasunak", - "scan": "Eskaneatu orain" - }, - "label": { - "scanFailure": "Arazoa eskaneatzean", - "scanPending": "Eskaneatzeko zain", - "scanSuccess": "Eskaneatzea amaituta", - "scanPartialSuccess": "Erroreak eskaneatzean", - "scanProgress": "Eskaneatzenā€¦ ({ progress }%)", - "sharingLink": "Esteka partekatzen" - }, - "message": { - "scanLaunched": "Eskaneatzea abiarazita", - "scanSkipped": "Eskaneatzea saltatuta (aurreko eskaneatzea oso berria da)" - }, - "tooltip": { - "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", - "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" - } - }, - "ScanForm": { - "header": { - "failure": "Ezin izan da eskuratu urruneko liburutegia" - }, - "placeholder": { - "url": "Idatzi liburutegiaren URLa" - }, - "label": { - "search": "Bilatu urruneko liburutegia" - }, - "button": { - "submit": "Bidali bilaketa" - } - }, - "Home": { - "header": { - "knownLibraries": "Liburutegi ezagunak", - "remoteLibraries": "Urruneko liburutegiak" - }, - "loading": { - "remoteLibraries": "Urruneko liburutegiak kargatzenā€¦" - }, - "button": { - "refresh": "Freskatu" - }, - "description": { - "remoteLibraries": "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." - } - } - }, - "Home": { - "title": "Gehitu eta kudeatu edukia", - "description": { - "follow": "Jarraitu beste erabiltzaile batzuen liburutegiak musika berria eskuratzeko. Liburutegi publikoak zuzenean jarraitu daitezke, baina liburutegi pribatu bat jarraitzeko bere sortzailearen onespena behar da.", - "channel": { - "1": "Musikaria edo podcast egilea bazara, kanalak zuretzat diseinatuta daude!", - "2": "Partekatu zure lana publikoki eta lortu harpidetzak Funkwhalen, fedibertsoan edo edozein podcast aplikaziotan." - }, - "upload": "Igo zure musikaren liburutegi pertsonala Funkwhalera edozein lekutatik gozatu eta lagun eta familiarekin partekatzeko." - }, - "header": { - "follow": "Jarraitu urruneko liburutegiak", - "channel": "Argitaratu zure lana kanal batean", - "upload": "Igo hirugarrengoen edukia liburutegi batera" - }, - "button": { - "start": "Hasi erabiltzen" - }, - "help": { - "uploadQuota": "Instantzia honek {quota}eko biltegiratzea eskaintzen dio erabiltzaile bakoitzari." - } - }, - "Base": { - "title": "Edukia sartu", - "link": { - "libraries": "Liburutegiak", - "tracks": "Pistak" - }, - "menu": { - "secondary": "Bigarren mailako menua" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "moderation": "Ireki moderazio interfazean", - "owner": "Jabea { username } da", - "tracks": "Pistak", - "domain": "Ikusi { domain }(e)n" - }, - "button": { - "edit": "Editatu", - "upload": "Igo" - }, - "title": "Liburutegia", - "label": { - "private": "Pribatua", - "public": "Publikoa", - "instance": "Mugatuta", - "sharingLink": "Esteka partekatzen" - }, - "description": { - "sharingLink": "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten instantziaren bilaketa barran kopiatu eta itsatsiz." - }, - "tooltip": { - "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", - "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu", - "instance": "Liburutegi hau instantzia honetako erabiltzaileetara mugatua dago" - } - }, - "Edit": { - "button": { - "accept": "Onartu", - "reject": "Baztertu" - }, - "table": { - "action": { - "status": { - "accepted": "Onartuta", - "pending": "Onarpenaren zain", - "rejected": "Baztertuta" - }, - "header": { - "action": "Akzioa", - "date": "Data", - "status": "Egoera", - "user": "Erabiltzailea" - } - } - }, - "header": { - "followers": "Jarraitzaileak", - "libraryContents": "Liburutegiaren edukiak" - }, - "loading": { - "followers": "Jarraitzaileak kargatzenā€¦" - }, - "empty": { - "noFollowers": "Inor ez da liburutegi hau jarraitzen ari" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - }, - "DetailOverview": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - }, - "DetailTracks": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - } - }, - "auth": { - "ProfileBase": { - "title": "{ username }-(r)en profila", - "link": { - "activity": "Jarduera", - "moderation": "Ireki moderazio interfazean", - "overview": "Informazio orokorra", - "domainView": "Ikusi { domain }(e)n" - }, - "label": { - "self": "Hau zu zara!" - } - }, - "PasswordReset": { - "label": { - "email": "Kontuaren eposta" - }, - "button": { - "requestReset": "Eskatu pasahitza berrezartzeko" - }, - "link": { - "back": "Itzuli sarrerara" - }, - "placeholder": { - "email": "Idatzi zure kontuarekin lotutako eposta helbidea" - }, - "header": { - "failure": "Errorea pasahitza berrezartzerakoan", - "reset": "Berrezarri pasahitza" - }, - "title": "Berrezarri pasahitza", - "help": { - "form": "Erabili formulario hau pasahitza berrezartzea eskatzeko. Emandako eposta helbidera mezu bat bidaliko dizugu, zure pasahitza berrezartzeko argibideekin." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Gehitu berria" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Artistaren kanala" - }, - "header": "Sortu kanala", - "podcast": { - "header": "Podcast kanala" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Ezeztatu", - "createChannel": "Sortu kanala", - "next": "Hurrengo pausoa", - "previous": "Aurreko pausoa" + "hide": "Ezkutatu edukia" }, "header": { - "channels": "Kanalak", - "sharedLibraries": "Erabiltzaile honek ondorengo liburutegiak partekatu ditu", - "libraries": "Erabiltzaileen liburutegiak" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Itzuli sarrerara", - "login": "Jarraitu saio hasierara" + "failure": "Errorea iragazkia sortzerakoan", + "modal": "\"{ name }\" artistaren edukia ezkutatu nahi duzu?" }, - "title": "Zure pasahitza aldatu", - "header": { - "failure": "Errorea zure pasahitza aldatzerakoan", - "success": "Pasahitza arrakastaz eguneratu da" + "help": { + "createFilter": "Zure iragazkiak nahi duzunean kudeatu eta eguneratu ditzakezu kontuaren ezarpenetan." }, "message": { - "requestSent": "Aurreko pausoan emandako eposta helbidea zuzena bada eta erabiltzaile kontu bati lotuta badago, datozen minututan eposta mezu bat jaso beharko zenuke pasahitza berrezartzeko argibideekin.", - "success": "Pasahitza arrakastaz eguneratu da." + "success": "Edukien iragazkia behar bezala gehitu da" }, + "warning": { + "createFilter": { + "listIntro": "Artista honen pista, album eta erabiltzaile aktibitatea ez dituzu ikusiko hemendik aurrera:", + "listItem1": "Beste erabiltzaileen gogokoetan eta entzundakoen historian", + "listItem2": "\"Azken aldian gehituta\" widget-ean", + "listItem3": "Artista eta albumen zerrendetan", + "listItem4": "Irratien iradokizunetan" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Pasahitz berria" + "category": "Kategoria" }, + "option": { + "all": "Dena" + } + }, + "ReportModal": { "button": { - "update": "Eguneratu zure pasahitza" - } - }, - "EmailConfirm": { - "title": "Egiaztatu zure e-posta helbidea", - "label": { - "confirmationCode": "Berrespen kodea" + "cancel": "Ezeztatu", + "submit": "Bidali txostena" + }, + "description": { + "email": "Eposta helbide hau erabiliko dugu salaketa hau dela eta zurekin harremanetan jarri behar badugu.", + "forwardToDomain": "Bidali zure txostenaren kopia anonimatua elementu hau hartzen duen zerbitzarira.", + "message": "Erabili eremu hau moderatzaileari zure txostenari buruzko informazio gehigarria emateko.", + "modal": "Erabili formulario hau moderazio taldeari txosten bat bidaltzeko" + }, + "error": { + "nodeinfoFetch": "Ezin da lortu nodoaren informazioa: {error}" }, "header": { - "failure": "Ezin izan da berretsi zure helbide elektronikoa", - "success": "E-posta helbidea egiaztatu da" + "disabled": "Salaketa anonimoak desgaituta daude. Hasi saioa salaketa bidaltzeko.", + "modal": "Objektu hau salatu nahi al duzu?", + "submissionFailure": "Errorea salaketa bidaltzerakoan" }, - "link": { - "login": "Jarraitu saio hasierara", - "back": "Itzuli saio hasierara" + "label": { + "email": "Eposta", + "forwardToDomain": "Bidali { domain} domeinura", + "message": "Mezua" }, "message": { - "success": "Zerbitzua mugarik gabe erabil dezakezu orain." - } - }, - "Signup": { - "header": { - "createAccount": "Sortu Funkwhale kontua" - }, - "title": "Erregistratu" - }, - "Login": { - "title": "Hasi saioa", - "header": { - "login": "Sartu zure Funkwhale kontura" - } - }, - "Callback": { - "header": { - "loggingIn": "Saioa hastenā€¦" - } - }, - "Plugins": { - "title": "Kudeatu pluginak" - }, - "ProfileActivity": { - "header": { - "playlists": "Zerrendak", - "recentlyFavorited": "Azken aldian gogokoa", - "recentlyListened": "Azken aldian entzuna" + "submissionSuccess": "Salaketa arrakastaz bidali da, esker aunitz" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Onartu", + "markRead": "Markatu irakurrita", + "markUnread": "Markatu irakurri gabe", + "reject": "Baztertu" + }, + "message": { + "libraryAcceptFollow": "{ username }-(e)k zure jarraipen-eskaera onartu du \"{ library }\" liburutegian", + "libraryFollow": "{ username } zure \"{ library }\" liburutegia jarraitzen hasi da", + "libraryPendingFollow": "{ username }-(e)k zure \"{ library }\" liburutegia jarraitu nahi du", + "libraryReject": "{username} erabiltzailearen \"{liburutegia}\" jarraitzeko eskaera ukatu duzu" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "Editor": { + "button": { + "addDuplicate": "Gehitu halere", + "clear": "Garbitu zerrenda", + "copy": "Kopiatu uneko ilara erreprodukzio-zerrenda honetara", + "insertFromQueue": "Gehitu ilaratik (abesti { n }) | Gehitu ilaratik ({ n } abesti)" + }, + "error": { + "sync": "Errorea gertatu da aldaketak gordetzerakoan" + }, + "header": { + "editor": "Zerrenda editorea" + }, + "help": { + "reorder": "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" + }, + "loading": { + "sync": "Aldaketak zerbitzariarekin sinkronizatzenā€¦" + }, + "message": { + "sync": "Aldaketak zerbitzariarekin sinkronizatuta" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Honek zerrenda honetako pista guztiak kenduko ditu eta ezin da desegin." + }, + "header": "Nahi duzu \"{ playlist }\" zerrenda garbitzea?" + } + }, + "warning": { + "duplicate": "Zure ilarako pista batzuk zerrenda honetan daude dagoeneko:" + } + }, + "Form": { + "button": { + "create": "Zerrenda sortu", + "update": "Eguneratu zerrenda" + }, + "header": { + "createFailure": "Ezin izan da zerrenda sortu", + "createPlaylist": "Zerrenda berria sortu", + "createSuccess": "Zerrenda sortuta", + "updateSuccess": "Zerrenda eguneratuta" + }, + "label": { + "name": "Zerrenda izena", + "visibility": "Zerrendaren ikusgaitasuna" + }, + "placeholder": { + "name": "Nire zerrenda txundigarria" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Gehitu halere", + "addToPlaylist": "Gehitu erreprodukzio-zerrenda honetan", + "addTrack": "Abestia sartu", + "cancel": "Ezeztatu", + "edit": "Editatu" + }, + "empty": { + "noPlaylists": "Ez da zerrendarik sortu oraindik" + }, + "header": { + "addFailure": "Pista ezin da zerrenda batera gehitu", + "addToPlaylist": "Gehitu erreprodukzio-zerrendan", + "available": "Zerrendak eskuragarri", + "manage": "Kudeatu zerrendak", + "noResults": "Ez dago zure iragazkiarekin bat datorren emaitzarik", + "track": "{title}, honen eskutik: {artist}" + }, + "label": { + "filter": "Iragazkia" + }, + "placeholder": { + "filterPlaylist": "Idatzi erreprodukzio-zerrendaren izena" + }, + "table": { + "edit": { + "header": { + "edit": "Editatu", + "lastModification": "Azken aldaketa", + "name": "Izena", + "tracks": "Pistak" + } + } + }, + "warning": { + "duplicate": "{ 0 } jada badago { 1 }(e)n." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Gehitu erreprodukzio-zerrendanā€¦" + } + }, + "Widget": { + "button": { + "create": "Sortu erreprodukzio-zerrenda", + "more": "Erakutsi gehiago" + }, + "placeholder": { + "noPlaylists": "Ez da zerrendarik sortu oraindik" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Hasi artisten irratia", + "startPlaylistsRadio": "Hasi zerrenden irratia", + "startRadio": "Erreproduzitu irratia", + "startTagsRadio": "Hasi etiketen irratia", + "stopArtistsRadio": "Gelditu artisten irratia", + "stopPlaylistsRadio": "Gelditu zerrenden irratia", + "stopRadio": "Gelditu irratia", + "stopTagsRadio": "Gelditu etiketen irratia" + }, + "Card": { + "button": { + "edit": "Editatu" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Erakutsi etiketa 1 gehiago | Erakutsi { n } etiketa gehiago" + } + } + }, + "vui": { + "Pagination": { + "label": "Orrialdekatzea", + "next": "Hurrengo orria", + "previous": "Aurreko orria" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Pista { n } gehitu da zure ilaran | { n } pista gehitu dira zure ilaran" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musika", + "other": "Beste bat", + "podcast": "Podcasta" + }, + "label": "Edukien kategoria" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Pista hau igo da, baina ez da prozesatzeko programatu oraindik", + "label": "Zirriborroa" + }, + "errored": { + "help": "Ezin izan da pista hau prozesatu, mesedez ziurtatu behar bezala etiketatuta dagoela", + "label": "Erroreduna" + }, + "finished": { + "help": "Inportatuta", + "label": "Amaituta" + }, + "pending": { + "help": "Pista igo da, baina zerbitzariak ez du prozesatu oraindik", + "label": "Zain" + }, + "skipped": { + "help": "Pista hau zure liburutegietako batean dago jadanik", + "label": "Saltatuta" + } + }, + "label": "Egin klik igoera honen inportazio prozesuari buruzko informazio gehiago bistaratzeko" + }, + "privacyLevel": { + "choices": { + "instance": "Instantzia honetako edonork", + "private": "Soilik ni", + "public": "Edonork, instantzia guztietan zehar" + }, + "help": "Zehaztu zure jardueraren ikusgarritasun maila", + "label": "Jardueraren ikusgarritasuna", + "shortChoices": { + "instance": "Instantzia", + "private": "Pribatua", + "public": "Edonork" + } + }, + "reportType": { + "choices": { + "illegalContent": "Eduki ilegala", + "invalidMetadata": "Metadatu baliogabeak", + "offensiveContent": "Eduki mingarria", + "other": "Beste bat", + "takedownRequest": "Edukia kentzeko eskaera" + }, + "label": "Kategoria" + }, + "summary": { + "label": "Biografia" + } + }, + "filters": { + "accessedDate": "Atzitutako datuak", + "albumTitle": "Albumaren izena", + "appliedDate": "Aplikatu zeneko data", + "artistName": "Artistaren izena", + "bitrate": "Bit-tasa", + "creationDate": "Sortze data", + "dateJoined": "Erregistroaren data", + "domain": "Domeinua", + "duration": "Iraupena", + "expirationDate": "Iraungitze data", + "firstSeen": "Lehen aldiz ikusi zeneko data", + "followers": "Jarraitzaileak", + "handledDate": "Kudeaketa data", + "itemsCount": "Elementuak", + "lastActivity": "Azken jarduera", + "lastSeen": "Azkenekoz ikusi zeneko data", + "modificationDate": "Aldatze data", + "name": "Izena", + "receivedMessages": "Jasotako mezuak", + "releaseDate": "Argitalpen-data", + "size": "Tamaina", + "trackTitle": "Pistaren izena", + "uploads": "Igoerak", + "username": "Erabiltzaile-izena", + "users": "Erabiltzaileak" + }, + "scopes": { + "edits": { + "description": "Edizioetara sarbidea", + "label": "Edizioak" + }, + "favorites": { + "description": "Sartu gogokoenetara", + "label": "Gogokoak" + }, + "filters": { + "description": "Eduki-iragazkietara sarbidea", + "label": "Edukien iragazkiak" + }, + "follows": { + "description": "Jarraitutakoetara sarbidea", + "label": "Jarraitutakoak" + }, + "libraries": { + "description": "Sarbidea audio-fitxategi, liburutegi, artista, album eta pistetara", + "label": "Liburutegiak eta igoerak" + }, + "listenings": { + "description": "Entzunaldi-historiarako sarbidea", + "label": "Entzunaldiak" + }, + "notifications": { + "description": "Jakinarazpenetarako sarbidea", + "label": "Jakinarazpenak" + }, + "playlists": { + "description": "Erreprodukzio-zerrendetarako sarbidea", + "label": "Zerrendak" + }, + "profile": { + "description": "Sarbidea eposta, erabiltzaile-izen eta profil informaziora", + "label": "Profila" + }, + "radios": { + "description": "Irratietarako sarbidea", + "label": "Irratiak" + }, + "reports": { + "description": "Moderazio-salaketetarako sarbidea", + "label": "Salaketak" + }, + "security": { + "description": "Pasahitza eta baimenak bezalako segurtasun ezarpenetarako sarbidea", + "label": "Segurtasuna" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Argitalpen-data", + "title": "Izenburua" + }, + "artist": { + "name": "Izena" + }, + "cover": { + "label": "Azala" + }, + "description": { + "label": "Deskribapena" + }, + "tags": { + "label": "Etiketak" + }, + "track": { + "copyright": "Copyright-a", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + } + }, + "useReport": { + "account": { + "label": "Salatu {'@'}{username}", + "typeLabel": "Kontua" + }, + "album": { + "label": "Salatu album hauā€¦", + "typeLabel": "Albuma" + }, + "artist": { + "label": "Salatu artista hauā€¦", + "typeLabel": "Artista", + "unknownLabel": "Artista ezezaguna" + }, + "channel": { + "label": "Salatu kanal hauā€¦", + "typeLabel": "Kanala" + }, + "library": { + "label": "Salatu liburutegi hauā€¦", + "typeLabel": "Liburutegia" + }, + "playlist": { + "label": "Salatu erreprodukzio-zerrenda hauā€¦", + "typeLabel": "Zerrenda" + }, + "track": { + "label": "Salatu pista hauā€¦", + "typeLabel": "Pista" + } + }, + "useReportConfigs": { + "account": { + "label": "Kontua", + "summary": "Biografia" + }, + "album": { + "label": "Albuma", + "releaseDate": "Argitalpen-data", + "title": "Izenburua" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Kanala" + }, + "creationDate": { + "label": "Sortze data" + }, + "library": { + "description": "Deskribapena", + "label": "Liburutegia" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Izena" + }, + "playlist": { + "label": "Zerrenda" + }, + "tags": { + "label": "Etiketak" + }, + "track": { + "copyright": "Copyright-a", + "label": "Pista", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + }, + "visibility": { + "label": "Ikusgaitasuna" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "Zergatik gertatu den uler dezagun laguntzeko, erantsi errorea abiarazteko egin duzunaren azalpen xehatu bat.", + "errorReportTitle": "Ustekabeko errore bat gertatu da.", + "leaveFeedback": "Eman iritzia", + "unexpectedError": "Ustekabeko errore bat gertatu da." + }, + "useThemeList": { + "browserDefault": "Arakatzaileak lehenetsitakoa", + "darkTheme": "Iluna", + "lightTheme": "Argia" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu { delay } igarotzean", + "rateLimitLater": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu beranduago" + }, + "sentry": { + "allow": "Onartu", + "deny": "Ukatu", + "funkwhaleInstance": "Funkwhale-ren Glitchtip instantzia ofiziala", + "message": "Erroreak nola eta noiz gertatzen diren uler dezagun laguntzeko, piloaren aztarnak honekin partekatuko dira: { 0 }", + "title": "Gure zerbitzuen kalitatea hobetzeko, saioan gerta litezkeen akatsen informazioa biltzea gustatuko litzaiguke." + }, + "serviceWorker": { + "actions": { + "later": "Geroago", + "update": "Eguneratu" + }, + "newAppVersion": "Aplikazioaren bertsio berria eskuragarri dago." + } + }, + "views": { "Notifications": { + "button": { + "read": "Markatu dena irakurrita", + "submit": "Ulertuta!" + }, + "empty": { + "notifications": "Ez dago jakinarazpenik erakusteko" + }, + "header": { + "funkwhaleSupport": "Gustuko al duzu Funkwhale?", + "instanceSupport": "Babestu Funkwhale instantzia hau", + "messages": "Zure mezuak", + "notifications": "Zure jakinarazpenak" + }, + "label": { + "reminder": "Gogorarazi hau barru:", + "showRead": "Erakutsi irakurritako jakinarazpenak" + }, + "link": { + "donate": "Dohaintza egin", + "help": "Ezagutu laguntzeko beste modu batzuk" + }, + "loading": { + "notifications": "Jakinarazpenak kargatzenā€¦" + }, + "message": { + "funkwhaleSupport": "Denbora pixkat daramazu hemen. Funkwhale erabilgarria iruditzen bazaizu, oraindik hobea egiten lagun gaitzakezu!" + }, "option": { "delay": { "30": "30 egun", @@ -3457,584 +3274,63 @@ "never": "Inoiz ez" } }, - "link": { - "help": "Ezagutu laguntzeko beste modu batzuk", - "donate": "Dohaintza egin" + "title": "Jakinarazpenak" + }, + "Search": { + "button": { + "submit": "Bidali bilaketaren kontsulta" }, "header": { - "funkwhaleSupport": "Gustuko al duzu Funkwhale?", - "instanceSupport": "Babestu Funkwhale instantzia hau", - "messages": "Zure mezuak", - "notifications": "Zure jakinarazpenak" + "remote": "Bilatu urruneko objektu bat", + "rss": "Harpidetu podcast baten RSS jariora", + "search": "Bilatu" }, - "button": { - "submit": "Ulertuta!", - "read": "Markatu dena irakurrita" - }, - "loading": { - "notifications": "Jakinarazpenak kargatzenā€¦" - }, - "empty": { - "notifications": "Ez dago jakinarazpenik erakusteko." - }, - "title": "Jakinarazpenak", "label": { - "reminder": "Gogorarazi hau barru:", - "showRead": "Erakutsi irakurritako jakinarazpenak" - }, - "message": { - "funkwhaleSupport": "Denbora pixkat daramazu hemen. Funkwhale erabilgarria iruditzen bazaizu, oraindik hobea egiten lagun gaitzakezu!" + "albums": "Albumak", + "artists": "Artistak", + "playlists": "Zerrendak", + "podcasts": "Podcastak", + "radios": "Irratiak", + "series": "Serieak", + "tags": "Etiketak", + "tracks": "Pistak" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Erabiltzaile-izena", - "loginStatus": { - "disabled": "Desgaituta", - "enabled": "Gaituta", - "label": "Saioaren egoera" - }, - "displayName": "Bistaratzeko izena", - "email": "Eposta helbidea", - "lastActivity": "Azken jarduera", - "lastChecked": "Azken egiaztapena", - "permissions": "Baimenak", - "signupDate": "Erregistroaren data", - "userType": "Mota" - }, - "audioContent": { - "cachedSize": "Cachearen tamaina", - "megabyte": "MB", - "totalSize": "Tamaina guztira", - "uploadQuota": "Igoera muga" - }, - "activity": { - "emittedFollows": "Eskatutako liburutegi-jarraitzeak", - "emittedMessages": "Bidalitako mezuak", - "firstSeen": "Lehen aldiz ikusia", - "receivedFollows": "Jasotako liburutegiaren jarraipenak" - } - }, - "header": { - "accountData": "Kontuaren datuak", - "activity": "Jarduera", - "audioContent": "Audio edukia", - "localAccount": "Kontu lokala", - "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", - "noPolicy": "Ez daukazu araurik kontu honetan oraindik." - }, - "button": { - "addPolicy": "Gehitu moderazio-gidalerroa" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "domain": "Domeinua", - "libraries": "Liburutegiak", - "linkedReports": "Estekatutako txostenak", - "openProfile": "Ireki profila", - "remoteProfile": "Ireki urruneko profila", - "requests": "Eskaerak", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "tooltip": { - "uploadQuota": "Zehaztu erabiltzaileak zenbat eduki igo dezakeen. Utzi hutsik instantziaren balio lehenetsia erabiltzeko." - }, - "option": { - "permission": { - "library": "Liburutegia", - "moderation": "Moderazioa", - "settings": "Ezarpenak" - } - }, - "description": { - "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute." - }, - "notApplicable": "Daturik gabe", - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "Base": { - "link": { - "accounts": "Kontuak", - "domains": "Domeinuak", - "reports": "Salaketak", - "userRequests": "Erabiltzaileen eskaerak" - }, - "title": "Moderazioa", - "menu": { - "secondary": "Bigarren mailako menua" - } - }, - "DomainsDetail": { - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "instanceData": "Instantziaren datuak", - "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", - "noPolicy": "Ez daukazu araurik domeinu honentzat." - }, - "button": { - "addPolicy": "Gehitu moderazio-gidalerroa", - "addToAllowList": "Gehitu baimen-zerrendan", - "refreshNodeInfo": "Freskatu nodoaren informazioa", - "removeFromAllowList": "Kendu baimenendutakoen zerrendatik" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "knownAccounts": "Kontu ezagunak", - "libraries": "Liburutegiak", - "website": "Ireki webgunea", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "activity": { - "emittedFollows": "Eskatutako liburutegi-jarraitzeak", - "emittedMessages": "Bidalitako mezuak", - "firstSeen": "Lehen aldiz ikusia", - "receivedFollows": "Jasotako liburutegiaren jarraipenak" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Errorea nodoaren informazioa eskuratzerakoan", - "label": "Egoera" - }, - "inAllowList": { - "label": "Onartuen zerrendan dago", - "false": "Ez", - "true": "Bai" - }, - "lastChecked": "Azken egiaztapena", - "domainName": "Izena", - "software": { - "label": "Softwarea" - }, - "totalUsers": "Erabiltzaileak guztira" - } - }, - "description": { - "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute." - }, - "notApplicable": "Daturik gabe", - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "DomainsList": { - "button": { - "add": "Gehitu" - }, - "label": { - "addDomain": "Gehitu domeinua", - "addToAllowList": "Gehitu baimen-zerrendan" - }, - "title": "Domeinuak", - "header": { - "domains": "Domeinuak", - "failure": "Errorea domeinua sortzerakoan" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Dena", - "resolved": "Ebatzita", - "unresolved": "Konpondu gabea" - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "title": "Salaketak", - "header": { - "reports": "Salaketak" - }, - "label": { - "search": "Bilatu", - "status": "Egoera" - }, - "placeholder": { - "search": "Bilatu kontuaren, laburpenaren, domeinuaren... arabera" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Dena", - "approved": "Onartuta", - "pending": "Zain", - "refused": "Ukatuta" - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "label": { - "search": "Bilatu", - "status": "Egoera" - }, - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren araberaā€¦" - }, - "title": "Erabiltzaileen eskaerak", - "header": { - "userRequests": "Erabiltzaileen eskaerak" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Sarbide data", - "firstSeen": "Lehen aldiz ikusia" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Cachearen tamaina", - "duration": "Iraupena", - "size": "Tamaina", - "track": "Pista" - }, - "upload": { - "name": "Izena" - } - }, - "link": { - "account": "Kontua", - "domain": "Domeinua", - "importStatus": "Inportazioaren egoera", - "library": "Liburutegia", - "remoteProfile": "Ireki urruneko profila", - "type": "Mota", - "django": "Ikusi Django-ren administrazioan", - "visibility": "Ikusgaitasuna" - }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "local": "Lokala", - "uploadData": "Igoera data" - }, - "button": { - "delete": "Ezabatu", - "download": "Deskargatu" - }, - "modal": { - "delete": { - "header": "Igoera hau ezabatu nahi duzu?", - "content": { - "warning": "Igoera ezabatu egingo da. Ekintza hau ezin da desegin." - } - } - }, - "notApplicable": "Daturik gabe" - }, - "LibraryDetail": { - "link": { - "account": "Kontua", - "albums": "Albumak", - "artists": "Artistak", - "domain": "Domeinua", - "reports": "Estekatutako txostenak", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan", - "visibility": "Ikusgaitasuna" - }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "libraryData": "Liburutegiaren datuak", - "local": "Lokala" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "library": { - "description": "Deskribapena", - "name": "Izena" - }, - "activity": { - "firstSeen": "Lehen aldiz ikusia", - "followers": "Jarraitzaileak" - } - }, - "button": { - "delete": "Ezabatu" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu?", - "content": { - "warning": "Liburutegi hau eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "AlbumDetail": { - "header": { - "activity": "Jarduera", - "albumData": "Albumaren datuak", - "audioContent": "Audio edukia", - "local": "Lokala" - }, - "link": { - "artist": "Artista", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "album": { - "description": "Deskribapena", - "title": "Izenburua" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Album hau ezabatu nahi duzu?", - "content": { - "warning": "Album hau eta erlazionatutako igoerak, pistak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "ArtistDetail": { - "header": { - "activity": "Jarduera", - "artistData": "Artistaren datuak", - "audioContent": "Audio edukia", - "local": "Lokala" - }, - "link": { - "albums": "Albumak", - "category": "Kategoria", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "artist": { - "description": "Deskribapena", - "name": "Izena" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Artista hau ezabatu nahi duzu?", - "content": { - "warning": "Artista hau eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "TagDetail": { - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "tagData": "Etiketaren datuak" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "localProfile": "Ireki profil lokala", - "tracks": "Pistak", - "django": "Ikusi Django-ren administrazioan" - }, - "button": { - "delete": "Ezabatu" - }, - "modal": { - "delete": { - "header": "Etiketa hau ezabatu nahi duzu?", - "content": { - "warning": "Etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." - } - } - }, - "table": { - "activity": { - "firstSeen": "Lehen aldiz ikusia" - }, - "tag": { - "name": "Izena" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Jarduera", - "local": "Lokala", - "trackData": "Pistaren datuak" - }, - "link": { - "album": "Albuma", - "albumArtist": "Artista honen albumak", - "artist": "Artista", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "trackData": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "track": { - "copyright": "Copyright-a", - "description": "Deskribapena", - "discNumber": "Disko zenbakia", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Pista hau ezabatu nahi duzu?", - "content": { - "warning": "Pista eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "Base": { - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "tags": "Etiketak", - "tracks": "Pistak", - "uploads": "Igoerak" - }, - "title": "Kudeatu liburutegia", - "menu": { - "secondary": "Bigarren mailako menua" - } - }, - "EditsList": { - "title": "Edizioak", - "header": { - "edits": "Liburutegiaren edizioak" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Ezabatu", + "openRemote": "Ireki urruneko profila", + "refresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "channelData": "Kanalaren datuak" + }, + "label": { + "local": "Lokala" + }, + "link": { + "django": "Ikusi Django-ren administrazioan", + "localProfile": "Ireki profil lokala" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanal hau eta erlazionatutako igoerak, pistak eta albumak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu nahi duzu?" + } + }, "table": { - "channelData": { - "account": "Kontua", - "category": "Kategoria", - "description": "Deskribapena", - "domain": "Domeinua", - "name": "Izena", - "rss": "RSS jarioa", - "url": "URL" + "activity": { + "edits": "Edizioak", + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "linkedReports": "Estekatutako txostenak", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" }, "audioContent": { "albums": "Albumak", @@ -4043,40 +3339,16 @@ "tracks": "Pistak", "uploads": "Igoerak" }, - "activity": { - "edits": "Edizioak", - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "linkedReports": "Estekatutako txostenak", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" + "channelData": { + "account": "Kontua", + "category": "Kategoria", + "description": "Deskribapena", + "domain": "Domeinua", + "name": "Izena", + "rss": "RSS jarioa", + "url": "URL" } }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "channelData": "Kanalaren datuak" - }, - "button": { - "delete": "Ezabatu", - "openRemote": "Ireki urruneko profila", - "refresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu nahi duzu?", - "content": { - "warning": "Kanal hau eta erlazionatutako igoerak, pistak eta albumak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "label": { - "local": "Lokala" - }, - "link": { - "localProfile": "Ireki profil lokala", - "django": "Ikusi Django-ren administrazioan" - }, "warning": { "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" } @@ -4100,53 +3372,1205 @@ "channels": "Kanalak", "federation": "Federazioa", "instanceInfo": "Instantziaren informazioa", - "settings": "Instantziaren ezarpenak", "moderation": "Moderazioa", "music": "Musika", "playlists": "Zerrendak", "sections": "Atalak", "security": "Segurtasuna", + "settings": "Instantziaren ezarpenak", "signups": "Erregistroak", "stats": "Estatistikak", "subsonic": "Subsonic", "ui": "Erabiltzaile interfazea" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "albumData": "Albumaren datuak", + "audioContent": "Audio edukia", + "local": "Lokala" + }, + "link": { + "artist": "Artista", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Album hau eta erlazionatutako igoerak, pistak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Album hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "album": { + "description": "Deskribapena", + "title": "Izenburua" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "ArtistDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "artistData": "Artistaren datuak", + "audioContent": "Audio edukia", + "local": "Lokala" + }, + "link": { + "albums": "Albumak", + "category": "Kategoria", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Artista hau eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Artista hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "artist": { + "description": "Deskribapena", + "name": "Izena" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "Base": { + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "tags": "Etiketak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Kudeatu liburutegia" + }, + "EditsList": { + "header": { + "edits": "Liburutegiaren edizioak" + }, + "title": "Edizioak" + }, + "LibraryDetail": { + "button": { + "delete": "Ezabatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "libraryData": "Liburutegiaren datuak", + "local": "Lokala" + }, + "link": { + "account": "Kontua", + "albums": "Albumak", + "artists": "Artistak", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak", + "visibility": "Ikusgaitasuna" + }, + "modal": { + "delete": { + "content": { + "warning": "Liburutegi hau eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu?" + } + }, + "table": { + "activity": { + "firstSeen": "Lehen aldiz ikusia", + "followers": "Jarraitzaileak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + }, + "library": { + "description": "Deskribapena", + "name": "Izena" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "TagDetail": { + "button": { + "delete": "Ezabatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "tagData": "Etiketaren datuak" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "django": "Ikusi Django-ren administrazioan", + "localProfile": "Ireki profil lokala", + "tracks": "Pistak" + }, + "modal": { + "delete": { + "content": { + "warning": "Etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." + }, + "header": "Etiketa hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "firstSeen": "Lehen aldiz ikusia" + }, + "tag": { + "name": "Izena" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "local": "Lokala", + "trackData": "Pistaren datuak" + }, + "link": { + "album": "Albuma", + "albumArtist": "Artista honen albumak", + "artist": "Artista", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Pista eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Pista hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "track": { + "copyright": "Copyright-a", + "description": "Deskribapena", + "discNumber": "Disko zenbakia", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + }, + "trackData": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "UploadDetail": { + "button": { + "delete": "Ezabatu", + "download": "Deskargatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "local": "Lokala", + "uploadData": "Igoera data" + }, + "link": { + "account": "Kontua", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "importStatus": "Inportazioaren egoera", + "library": "Liburutegia", + "remoteProfile": "Ireki urruneko profila", + "type": "Mota", + "visibility": "Ikusgaitasuna" + }, + "modal": { + "delete": { + "content": { + "warning": "Igoera ezabatu egingo da. Ekintza hau ezin da desegin." + }, + "header": "Igoera hau ezabatu nahi duzu?" + } + }, + "notApplicable": "Daturik gabe", + "table": { + "activity": { + "accessedDate": "Sarbide data", + "firstSeen": "Lehen aldiz ikusia" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Cachearen tamaina", + "duration": "Iraupena", + "size": "Tamaina", + "track": "Pista" + }, + "upload": { + "name": "Izena" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Gehitu moderazio-gidalerroa" + }, + "description": { + "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute" + }, + "header": { + "accountData": "Kontuaren datuak", + "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", + "activity": "Jarduera", + "audioContent": "Audio edukia", + "localAccount": "Kontu lokala", + "noPolicy": "Ez daukazu araurik kontu honetan oraindik." + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "libraries": "Liburutegiak", + "linkedReports": "Estekatutako txostenak", + "openProfile": "Ireki profila", + "remoteProfile": "Ireki urruneko profila", + "requests": "Eskaerak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "notApplicable": "Daturik gabe", + "option": { + "permission": { + "library": "Liburutegia", + "moderation": "Moderazioa", + "settings": "Ezarpenak" + } + }, + "table": { + "accountData": { + "displayName": "Bistaratzeko izena", + "email": "Eposta helbidea", + "lastActivity": "Azken jarduera", + "lastChecked": "Azken egiaztapena", + "loginStatus": { + "disabled": "Desgaituta", + "enabled": "Gaituta", + "label": "Saioaren egoera" + }, + "permissions": "Baimenak", + "signupDate": "Erregistroaren data", + "userType": "Mota", + "username": "Erabiltzaile-izena" + }, + "activity": { + "emittedFollows": "Eskatutako liburutegi-jarraitzeak", + "emittedMessages": "Bidalitako mezuak", + "firstSeen": "Lehen aldiz ikusia", + "receivedFollows": "Jasotako liburutegiaren jarraipenak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "megabyte": "MB", + "totalSize": "Tamaina guztira", + "uploadQuota": "Igoera muga" + } + }, + "tooltip": { + "uploadQuota": "Zehaztu erabiltzaileak zenbat eduki igo dezakeen. Utzi hutsik instantziaren balio lehenetsia erabiltzeko." + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "Base": { + "link": { + "accounts": "Kontuak", + "domains": "Domeinuak", + "reports": "Salaketak", + "userRequests": "Erabiltzaileen eskaerak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Moderazioa" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Gehitu moderazio-gidalerroa", + "addToAllowList": "Gehitu baimen-zerrendan", + "refreshNodeInfo": "Freskatu nodoaren informazioa", + "removeFromAllowList": "Kendu baimenendutakoen zerrendatik" + }, + "description": { + "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute" + }, + "header": { + "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", + "activity": "Jarduera", + "audioContent": "Audio edukia", + "instanceData": "Instantziaren datuak", + "noPolicy": "Ez daukazu araurik domeinu honentzat." + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "django": "Ikusi Django-ren administrazioan", + "knownAccounts": "Kontu ezagunak", + "libraries": "Liburutegiak", + "tracks": "Pistak", + "uploads": "Igoerak", + "website": "Ireki webgunea" + }, + "notApplicable": "Daturik gabe", + "table": { + "activity": { + "emittedFollows": "Eskatutako liburutegi-jarraitzeak", + "emittedMessages": "Bidalitako mezuak", + "firstSeen": "Lehen aldiz ikusia", + "receivedFollows": "Jasotako liburutegiaren jarraipenak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + }, + "instanceData": { + "domainName": "Izena", + "inAllowList": { + "false": "Ez", + "label": "Onartuen zerrendan dago", + "true": "Bai" + }, + "lastChecked": "Azken egiaztapena", + "nodeInfoStatus": { + "label": "Egoera", + "value": "Errorea nodoaren informazioa eskuratzerakoan" + }, + "software": { + "label": "Softwarea", + "value": "{name} ({version})" + }, + "totalUsers": "Erabiltzaileak guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "DomainsList": { + "button": { + "add": "Gehitu" + }, + "header": { + "domains": "Domeinuak", + "failure": "Errorea domeinua sortzerakoan" + }, + "label": { + "addDomain": "Gehitu domeinua", + "addToAllowList": "Gehitu baimen-zerrendan" + }, + "title": "Domeinuak" + }, + "ReportsList": { + "header": { + "reports": "Salaketak" + }, + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "status": { + "all": "Dena", + "resolved": "Ebatzita", + "unresolved": "Konpondu gabea" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "placeholder": { + "search": "Bilatu kontuaren, laburpenaren, domeinuaren arabera" + }, + "title": "Salaketak" + }, + "RequestsList": { + "header": { + "userRequests": "Erabiltzaileen eskaerak" + }, + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "status": { + "all": "Dena", + "approved": "Onartuta", + "pending": "Zain", + "refused": "Ukatuta" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "placeholder": { + "search": "Bilatu erabiltzaile-izenaren arabera" + }, + "title": "Erabiltzaileen eskaerak" + } + }, "users": { "Base": { "link": { "invitations": "Gonbidapenak", "users": "Erabiltzaileak" }, - "title": "Kudeatu erabiltzaileak", "menu": { "secondary": "Bigarren mailako menua" + }, + "title": "Kudeatu erabiltzaileak" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Saioa hastenā€¦" + } + }, + "EmailConfirm": { + "header": { + "failure": "Ezin izan da berretsi zure helbide elektronikoa", + "success": "E-posta helbidea egiaztatu da" + }, + "label": { + "confirmationCode": "Berrespen kodea" + }, + "link": { + "back": "Itzuli saio hasierara", + "login": "Jarraitu saio hasierara" + }, + "message": { + "success": "Zerbitzua mugarik gabe erabil dezakezu orain" + }, + "title": "Egiaztatu zure e-posta helbidea" + }, + "Login": { + "header": { + "login": "Sartu zure Funkwhale kontura" + }, + "title": "Hasi saioa" + }, + "PasswordReset": { + "button": { + "requestReset": "Eskatu pasahitza berrezartzeko" + }, + "header": { + "failure": "Errorea pasahitza berrezartzerakoan", + "reset": "Berrezarri pasahitza" + }, + "help": { + "form": "Erabili formulario hau pasahitza berrezartzea eskatzeko. Emandako eposta helbidera mezu bat bidaliko dizugu, zure pasahitza berrezartzeko argibideekin." + }, + "label": { + "email": "Kontuaren eposta" + }, + "link": { + "back": "Itzuli sarrerara" + }, + "placeholder": { + "email": "Idatzi zure kontuarekin lotutako eposta helbidea" + }, + "title": "Berrezarri pasahitza" + }, + "PasswordResetConfirm": { + "button": { + "update": "Eguneratu zure pasahitza" + }, + "header": { + "failure": "Errorea zure pasahitza aldatzerakoan", + "success": "Pasahitza arrakastaz eguneratu da" + }, + "label": { + "newPassword": "Pasahitz berria" + }, + "link": { + "back": "Itzuli sarrerara", + "login": "Jarraitu saio hasierara" + }, + "message": { + "requestSent": "Aurreko pausoan emandako eposta helbidea zuzena bada eta erabiltzaile kontu bati lotuta badago, datozen minututan eposta mezu bat jaso beharko zenuke pasahitza berrezartzeko argibideekin.", + "success": "Pasahitza arrakastaz eguneratu da." + }, + "title": "Zure pasahitza aldatu" + }, + "Plugins": { + "title": "Kudeatu pluginak" + }, + "ProfileActivity": { + "header": { + "playlists": "Zerrendak", + "recentlyFavorited": "Azken aldian gogokoa", + "recentlyListened": "Azken aldian entzuna" + } + }, + "ProfileBase": { + "label": { + "self": "Hau zu zara!" + }, + "link": { + "activity": "Jarduera", + "domainView": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "overview": "Informazio orokorra" + }, + "title": "{ username }-(r)en profila" + }, + "ProfileOverview": { + "button": { + "cancel": "Ezeztatu", + "createChannel": "Sortu kanala", + "next": "Hurrengo pausoa", + "previous": "Aurreko pausoa" + }, + "header": { + "channels": "Kanalak", + "libraries": "Erabiltzaileen liburutegiak", + "sharedLibraries": "Erabiltzaile honek ondorengo liburutegiak partekatu ditu" + }, + "link": { + "addNew": "Gehitu berria" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Artistaren kanala" + }, + "header": "Sortu kanala", + "podcast": { + "header": "Podcast kanala" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Sortu Funkwhale kontua" + }, + "title": "Erregistratu" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Ezabatu", + "delete": "Ezabatuā€¦", + "edit": "Editatuā€¦", + "embed": "Txertatu", + "play": "Erreproduzitu", + "updateChannel": "Eguneratu kanala", + "upload": "Igo" + }, + "header": { + "artistChannel": "Artistaren kanala", + "podcastChannel": "Podcast kanala" + }, + "link": { + "channelEpisodes": "Saio guztiak", + "channelOverview": "Informazio orokorra", + "channelTracks": "Pistak", + "domainView": "Ikusi { domain }(e)n", + "mirrored": "{ domain } domeinutik ispilatua", + "moderation": "Ireki moderazio interfazean" + }, + "meta": { + "episodes": "Saio { n } | { n } saio", + "listenings": "Entzunaldi { n } | { n } entzunaldi", + "subscribers": "Harpidetu { n } | { n } harpidetu", + "tracks": "Pista { n } | { n } pista" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanal hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Kanal hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu artista honen lana zure webgunean" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Mastodon edo fedibertsoko beste aplikazioren bat erabiltzen ari bazara, kontu honetara harpidetu zaitezke:" + }, + "header": "Harpidetu Fedibertsoan" + }, + "funkwhale": { + "header": "Harpidetu Funkwhalen" + }, + "header": "Harpidetu kanal honetara", + "rss": { + "content": { + "help": "Kopiatu eta itsatsi URL hau zure podcast aplikazio gogokoenean:" + }, + "header": "Harpidetu RSS bidez" + } + } + }, + "title": "Kanala" + }, + "DetailOverview": { + "header": { + "albums": "Albumak", + "latestEpisodes": "Azken saioak", + "latestTracks": "Azken abestiak", + "series": "Serieak", + "uploadsFailure": "Igoera batzuk ezin izan dira argitaratu", + "uploadsProcessing": "Igoerak prozesatzen", + "uploadsSuccess": "Igoerak arrakastaz argitaratuta" + }, + "link": { + "addAlbum": "Gehitu berria", + "erroredUploads": "Ikusi huts egindako igoerak", + "skippedUploads": "Ikusi saltatutako igoerak" + }, + "message": { + "processing": "Funkwhale zure igoerak prozesatzen ari da eta laster izango dira prest." + }, + "meta": { + "progress": "Prozesatutako igoerak: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Ezeztatu", + "subscribe": "Harpidetu" + }, + "link": { + "addNew": "Gehitu berria" + }, + "modal": { + "subscription": { + "header": "Harpidetza" + } + }, + "placeholder": { + "search": "Iragazi izenaren araberaā€¦" + }, + "title": "Harpidetutako kanalak" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Liburutegiak", + "tracks": "Pistak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Edukia sartu" + }, + "Home": { + "button": { + "start": "Hasi erabiltzen" + }, + "description": { + "channel": { + "1": "Musikaria edo podcast egilea bazara, kanalak zuretzat diseinatuta daude!", + "2": "Partekatu zure lana publikoki eta lortu harpidetzak Funkwhalen, fedibertsoan edo edozein podcast aplikaziotan." + }, + "follow": "Jarraitu beste erabiltzaile batzuen liburutegiak musika berria eskuratzeko. Liburutegi publikoak zuzenean jarraitu daitezke, baina liburutegi pribatu bat jarraitzeko bere sortzailearen onespena behar da.", + "upload": "Igo zure musikaren liburutegi pertsonala Funkwhalera edozein lekutatik gozatu eta lagun eta familiarekin partekatzeko." + }, + "header": { + "channel": "Argitaratu zure lana kanal batean", + "follow": "Jarraitu urruneko liburutegiak", + "upload": "Igo hirugarrengoen edukia liburutegi batera" + }, + "help": { + "uploadQuota": "Instantzia honek {quota}eko biltegiratzea eskaintzen dio erabiltzaile bakoitzari." + }, + "title": "Gehitu eta kudeatu edukia" + }, + "libraries": { + "Card": { + "button": { + "upload": "Igo" + }, + "label": { + "size": "Liburutegi honetako fitxategien guztizko tamaina" + }, + "link": { + "details": "Liburutegiaren xehetasunak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "FilesTable": { + "action": { + "delete": "Ezabatu", + "restartImport": "Hasi berriro inportazioa" + }, + "button": { + "showStatus": "Erakutsi pista honen igoeraren egoerari buruzko informazioa" + }, + "empty": { + "noTracks": "Ez da pistarik gehitu oraindik liburutegi honetara" + }, + "label": { + "importStatus": "Inportazioaren egoera", + "search": "Bilatu" + }, + "notApplicable": "Daturik gabe", + "option": { + "status": { + "all": "Dena", + "draft": "Zirriborroa", + "failed": "Huts egin du", + "finished": "Amaituta", + "pending": "Zain", + "skipped": "Saltatuta" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren arabera" + }, + "table": { + "file": { + "header": { + "album": "Albuma", + "artist": "Artista", + "duration": "Iraupena", + "importStatus": "Inportazioaren egoera", + "size": "Tamaina", + "title": "Izenburua", + "uploadDate": "Igoera data" + } + } + } + }, + "Form": { + "button": { + "confirm": "Liburutegia ezabatu", + "create": "Liburutegia sortu", + "delete": "Ezabatu", + "update": "Eguneratu liburutegia" + }, + "description": { + "library": "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu.", + "visibility": "Zure liburutegia besteekin partekatu dezakezu, ikusgaitasuna edozein dela ere." + }, + "header": { + "failure": "Errorea" + }, + "label": { + "description": "Deskribapena", + "name": "Izena", + "visibility": "Ikusgaitasuna" + }, + "message": { + "libraryCreated": "Liburutegia sortuta", + "libraryDeleted": "Liburutegia ezabatuta", + "libraryUpdated": "Liburutegia eguneratuta" + }, + "modal": { + "delete": { + "content": { + "warning": "Liburutegia eta bere pista guztiak ezabatuko dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu?" + } + }, + "placeholder": { + "description": "Liburutegi honetan nire musika pertsonala dago, espero dut gustuko izango duzula.", + "name": "Nire liburutegi txundigarria" + } + }, + "Home": { + "empty": { + "noLibrary": "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua." + }, + "header": { + "libraries": "Nire liburutegiak" + }, + "link": { + "createLibrary": "Liburutegi berria sortu" + }, + "loading": { + "libraries": "Liburutegiak kargatzenā€¦" + } + }, + "Quota": { + "button": { + "purge": "Kendu" + }, + "header": { + "currentUsage": "Oraingo erabilera" + }, + "label": { + "currentUsage": "{ current } erabilita baimendutako { max }e(ta)tik", + "errored": "Erroredun fitxategiak", + "pending": "Fitxategiak faltan", + "percentUsed": "% {progress}", + "skipped": "Saltatutako fitxategiak" + }, + "link": { + "viewFiles": "Ikusi fitxategiak" + }, + "loading": { + "currentUsage": "Erabilpen datuak kargatzenā€¦" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Igotako baina oraindik zerbitzariak prozesatu ezin izan dituen pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Erroreak emandako fitxategiak kendu?" + }, + "purgePending": { + "content": { + "description": "Igotako baina oraindik prozesatu gabeko pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Zain dauden fitxategiak kendu?" + }, + "purgeSkipped": { + "content": { + "description": "Inportazio prozesuan igotako baina saltatutako pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Saltatutako fitxategiak kendu?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Utzi jarraitzeko eskaera", + "follow": "Jarraitu", + "pending": "Jarraipen-eskaera onarpenaren zain", + "unfollow": "Utzi jarraitzeari" + }, + "error": { + "follow": "Ezin da jarraitu urruneko liburutegia: {error}", + "unfollow": "Ezin da jarraitzeari utzi urruneko liburutegia: {error}" + }, + "label": { + "scanFailure": "Arazoa eskaneatzean", + "scanPartialSuccess": "Erroreak eskaneatzean", + "scanPending": "Eskaneatzeko zain", + "scanProgress": "Eskaneatzenā€¦ ({ progress }%)", + "scanSuccess": "Eskaneatzea amaituta", + "sharingLink": "Esteka partekatzen" + }, + "link": { + "scan": "Eskaneatu orain ", + "scanDetails": "Xehetasunak" + }, + "message": { + "scanLaunched": "Eskaneatzea abiarazita", + "scanSkipped": "Eskaneatzea saltatuta (aurreko eskaneatzea oso berria da)" + }, + "meta": { + "failedTracks": "Huts egin duten pistak: {tracks}", + "lastUpdate": "Azken eguneraketa: ", + "tracks": "Pista { n } | { n } pista" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." + }, + "header": "Liburutegi hau jarraitzeari utzi?" + } + }, + "tooltip": { + "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", + "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" + } + }, + "Home": { + "button": { + "refresh": "Freskatu" + }, + "description": { + "remoteLibraries": "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." + }, + "header": { + "knownLibraries": "Liburutegi ezagunak", + "remoteLibraries": "Urruneko liburutegiak" + }, + "loading": { + "remoteLibraries": "Urruneko liburutegiak kargatzenā€¦" + } + }, + "ScanForm": { + "button": { + "submit": "Bidali bilaketa" + }, + "header": { + "failure": "Ezin izan da eskuratu urruneko liburutegia" + }, + "label": { + "search": "Bilatu urruneko liburutegia" + }, + "placeholder": { + "url": "Idatzi liburutegiaren URLa" } } } }, - "Search": { - "label": { - "albums": "Albumak", - "artists": "Artistak", - "playlists": "Zerrendak", - "podcasts": "Podcastak", - "radios": "Irratiak", - "series": "Serieak", - "tags": "Etiketak", - "tracks": "Pistak" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } }, - "header": { - "search": "Bilatu", - "remote": "Bilatu urruneko objektu bat", - "rss": "Harpidetu podcast baten RSS jariora" + "DetailOverview": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } }, - "button": { - "submit": "Bidali bilaketaren kontsulta" + "DetailTracks": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } + }, + "Edit": { + "button": { + "accept": "Onartu", + "reject": "Baztertu" + }, + "empty": { + "noFollowers": "Inor ez da liburutegi hau jarraitzen ari" + }, + "header": { + "followers": "Jarraitzaileak", + "libraryContents": "Liburutegiaren edukiak" + }, + "loading": { + "followers": "Jarraitzaileak kargatzenā€¦" + }, + "table": { + "action": { + "header": { + "action": "Akzioa", + "date": "Data", + "status": "Egoera", + "user": "Erabiltzailea" + }, + "status": { + "accepted": "Onartuta", + "pending": "Onarpenaren zain", + "rejected": "Baztertuta" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Editatu", + "upload": "Igo" + }, + "description": { + "sharingLink": "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten instantziaren bilaketa barran kopiatu eta itsatsiz." + }, + "label": { + "instance": "Mugatuta", + "private": "Pribatua", + "public": "Publikoa", + "sharingLink": "Esteka partekatzen" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "owner": "Jabea { username } da", + "tracks": "Pistak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + }, + "title": "Liburutegia", + "tooltip": { + "instance": "Liburutegi hau instantzia honetako erabiltzaileetara mugatua dago", + "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", + "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Zerrenda ezabatu", + "delete": "Ezabatu", + "edit": "Editatu", + "embed": "Txertatu", + "playAll": "Erreproduzitu dena", + "stopEdit": "Utzi editatzeari" + }, + "empty": { + "noTracks": "Oraindik ez dago pistarik zerrenda honetan" + }, + "header": { + "tracks": "Pistak" + }, + "meta": { + "tracks": "Zerrendak { username }-(r)en pista { n } du | Zerrendak { username }-(r)en { n } pista ditu" + }, + "modal": { + "delete": { + "content": { + "warning": "Honek guztiz ezabatuko du zerrenda hau eta ekintza ezin da desegin." + }, + "header": "Nahi duzu \"{ playlist }\" zerrenda ezabatzea?" + }, + "embed": { + "header": "Txertatu erreprodukzio zerrenda hau zure webgunean" + } + }, + "title": "Zerrenda" + }, "List": { + "button": { + "create": "Sortu erreprodukzio-zerrenda", + "manage": "Kudeatu zure zerrendak", + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Zerrendak arakatzen", + "playlists": "Zerrendak" + }, + "label": { + "search": "Bilatu" + }, "ordering": { "direction": { "ascending": "Gorantza", @@ -4155,58 +4579,11 @@ }, "label": "Ordena" }, - "header": { - "browse": "Zerrendak arakatzen", - "playlists": "Zerrendak" - }, - "button": { - "create": "Sortu erreprodukzio-zerrenda", - "manage": "Kudeatu zure zerrendak", - "search": "Bilatu" - }, - "placeholder": { - "search": "Idatzi erreprodukzio-zerrendaren izenaā€¦" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, "pagination": { "results": "Emaitzak orrialdeko" }, - "label": { - "search": "Bilatu" - } - }, - "Detail": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu", - "confirm": "Zerrenda ezabatu", - "edit": "Editatu", - "embed": "Txertatu", - "playAll": "Erreproduzitu dena", - "stopEdit": "Utzi editatzeari" - }, - "modal": { - "delete": { - "header": "Nahi duzu \"{ playlist }\" zerrenda ezabatzea?", - "content": { - "warning": "Honek guztiz ezabatuko du zerrenda hau eta ekintza ezin da desegin." - } - }, - "embed": { - "header": "Txertatu erreprodukzio zerrenda hau zure webgunean" - } - }, - "title": "Zerrenda", - "meta": { - "tracks": "Zerrendak { username }-(r)en pista { n } du | Zerrendak { username }-(r)en { n } pista ditu" - }, - "empty": { - "noTracks": "Oraindik ez dago pistarik zerrenda honetan" - }, - "header": { - "tracks": "Pistak" + "placeholder": { + "search": "Idatzi erreprodukzio-zerrendaren izenaā€¦" } } }, @@ -4214,289 +4591,26 @@ "Detail": { "button": { "confirm": "Irratia ezabatu", + "delete": "Ezabatu", "edit": "Editatuā€¦" }, - "modal": { - "delete": { - "header": "Nahi duzu \"{ radio }\" irratia ezabatzea?", - "content": { - "warning": "Honek guztiz ezabatuko du irrati hau eta ekintza ezin da desegin." - } - } - }, "empty": { "noTracks": "Ez da pistarik gehitu oraindik irrati honetara" }, - "title": "Irratia", "header": { + "radio": "{tracks} pista dituen irratia, honen eskutik: ", "tracks": "Pistak" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Pista { n } gehitu da zure ilaran | { n } pista gehitu dira zure ilaran" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Sarbidea audio-fitxategi, liburutegi, artista, album eta pistetara", - "label": "Liburutegiak eta igoerak" - }, - "filters": { - "description": "Eduki-iragazkietara sarbidea", - "label": "Edukien iragazkiak" - }, - "profile": { - "description": "Sarbidea eposta, erabiltzaile-izen eta profil informaziora", - "label": "Profila" - }, - "edits": { - "description": "Edizioetara sarbidea", - "label": "Edizioak" - }, - "follows": { - "description": "Jarraitutakoetara sarbidea", - "label": "Jarraitutakoak" - }, - "listenings": { - "description": "Entzunaldi-historiarako sarbidea", - "label": "Entzunaldiak" - }, - "reports": { - "description": "Moderazio-salaketetarako sarbidea", - "label": "Salaketak" - }, - "notifications": { - "description": "Jakinarazpenetarako sarbidea", - "label": "Jakinarazpenak" - }, - "playlists": { - "description": "Erreprodukzio-zerrendetarako sarbidea", - "label": "Zerrendak" - }, - "radios": { - "description": "Irratietarako sarbidea", - "label": "Irratiak" - }, - "security": { - "description": "Pasahitza eta baimenak bezalako segurtasun ezarpenetarako sarbidea", - "label": "Segurtasuna" - }, - "favorites": { - "label": "Gogokoak" - } }, - "filters": { - "accessedDate": "Sarbide data", - "albumTitle": "Albumaren izena", - "artistName": "Artistaren izena", - "bitrate": "Bitrate", - "creationDate": "Sortze data", - "domain": "Domeinua", - "duration": "Iraupena", - "expirationDate": "Iraungitze data", - "firstSeen": "Lehen aldiz ikusitako data", - "followers": "Jarraitzaileak", - "itemsCount": "Elementuak", - "lastActivity": "Azken jarduera", - "lastSeen": "Ikusi zen azken aldiaren data", - "modificationDate": "Aldatze data", - "name": "Izena", - "receivedMessages": "Jasotako mezuak", - "releaseDate": "Argitalpen-data", - "dateJoined": "Erregistroaren data", - "size": "Tamaina", - "trackTitle": "Pistaren izena", - "uploads": "Igoerak", - "username": "Erabiltzaile-izena", - "users": "Erabiltzaileak" - }, - "fields": { - "privacyLevel": { - "label": "Jardueraren ikusgarritasuna", - "help": "Zehaztu zure jardueraren ikusgarritasun maila", - "shortChoices": { - "public": "Edonork", - "instance": "Instantzia", - "private": "Pribatua" + "modal": { + "delete": { + "content": { + "warning": "Honek guztiz ezabatuko du irrati hau eta ekintza ezin da desegin." }, - "choices": { - "instance": "Instantzia honetako edonork", - "public": "Edonork, instantzia guztietan zehar", - "private": "Soilik ni" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Kategoria", - "choices": { - "illegalContent": "Eduki ilegala", - "invalidMetadata": "Metadatu baliogabeak", - "offensiveContent": "Eduki mingarria", - "other": "Beste bat", - "takedownRequest": "Edukia kentzeko eskaera" - } - }, - "importStatus": { - "label": "Egin klik igoera honen inportazio prozesuari buruzko informazio gehiago bistaratzeko", - "choices": { - "draft": { - "label": "Zirriborroa", - "help": "Pista hau igo da, baina ez da prozesatzeko programatu oraindik" - }, - "errored": { - "label": "Erroreduna", - "help": "Ezin izan da pista hau prozesatu, mesedez ziurtatu behar bezala etiketatuta dagoela" - }, - "finished": { - "label": "Amaituta", - "help": "Inportatuta" - }, - "pending": { - "label": "Zain", - "help": "Pista igo da, baina zerbitzariak ez du prozesatu oraindik" - }, - "skipped": { - "label": "Saltatuta", - "help": "Pista hau zure liburutegietako batean dago jadanik" - } - } - }, - "contentCategory": { - "label": "Edukien kategoria", - "choices": { - "music": "Musika", - "other": "Beste bat", - "podcast": "Podcasta" - } + "header": "Nahi duzu \"{ radio }\" irratia ezabatzea?" } - } + }, + "title": "Irratia" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Kontua" - }, - "album": { - "typeLabel": "Albuma", - "label": "Salatu album hauā€¦" - }, - "artist": { - "typeLabel": "Artista", - "label": "Salatu artista hauā€¦" - }, - "channel": { - "typeLabel": "Kanala", - "label": "Salatu kanal hauā€¦" - }, - "library": { - "typeLabel": "Liburutegia", - "label": "Salatu liburutegi hauā€¦" - }, - "playlist": { - "typeLabel": "Zerrenda", - "label": "Salatu erreprodukzio-zerrenda hauā€¦" - }, - "track": { - "label": "Salatu pista hauā€¦", - "typeLabel": "Pista" - } - }, - "useReportConfigs": { - "account": { - "label": "Kontua", - "summary": "Bio" - }, - "album": { - "label": "Albuma", - "releaseDate": "Argitalpen-data", - "title": "Izenburua" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Kanala" - }, - "track": { - "copyright": "Copyright-a", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua", - "label": "Pista" - }, - "creationDate": { - "label": "Sortze data" - }, - "library": { - "description": "Deskribapena", - "label": "Liburutegia" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Izena" - }, - "playlist": { - "label": "Zerrenda" - }, - "tags": { - "label": "Etiketak" - }, - "visibility": { - "label": "Ikusgaitasuna" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright-a", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua" - }, - "cover": { - "label": "Azala" - }, - "description": { - "label": "Deskribapena" - }, - "artist": { - "name": "Izena" - }, - "album": { - "releaseDate": "Argitalpen-data", - "title": "Izenburua" - }, - "tags": { - "label": "Etiketak" - } - } - }, - "useThemeList": { - "darkTheme": "Iluna", - "lightTheme": "Argia" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Aplikazioaren bertsio berria eskuragarri dago.", - "actions": { - "later": "Geroago", - "update": "Eguneratu" - } - }, - "axios": { - "rateLimitDelay": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu { delay } igarotzean", - "rateLimitLater": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu beranduago" } } } From 9da91df798334c7a1fee9534a39da96bf63ad83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Azn=C3=B6rth=20Niryn?= <nathanael.barentin@disroot.org> Date: Sun, 10 Dec 2023 11:45:17 +0000 Subject: [PATCH 204/371] Translated using Weblate (French) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 6c0d148fa..d21766622 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -2485,7 +2485,7 @@ } }, "tooltip": { - "blockAll": "Tout bloquer de ce compte ou domaine. Cela empĆŖche toute interaction avec l'entitĆ©, et purge le contenu liĆ© (pistes, librairies, suivis, etc.)", + "blockAll": "Tout bloquer de ce compte ou domaine. Cela empĆŖche toute interaction avec, et purge le contenu liĆ©, telles que les pistes, audiothĆØques, abonnements, etc.", "isActive": "Utilisez ce paramĆØtre pour activer/dĆ©sactiver temporairement la rĆØgle sans la supprimer complĆØtement.", "rejectMedia": "Ne jamais tĆ©lĆ©charger de mĆ©dias (audio, album, couverture, avatar de compteā€¦) de ce compte ou domaine. Cela purgera aussi le contenu existant.", "silenceActivity": "Cacher le contenu du compte ou du domaine, sauf aux abonnĆ©s.", From f0e79b4a0a24299bf742cdef8296e39ad728d128 Mon Sep 17 00:00:00 2001 From: Matteo Piovanelli <thebovaz@gmail.com> Date: Mon, 11 Dec 2023 14:25:39 +0000 Subject: [PATCH 205/371] Translated using Weblate (Italian) Currently translated at 97.0% (2117 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/it/ --- front/src/locales/it.json | 8312 +++++++++++++++++++------------------ 1 file changed, 4183 insertions(+), 4129 deletions(-) diff --git a/front/src/locales/it.json b/front/src/locales/it.json index 39c0b3e4e..8a0064725 100644 --- a/front/src/locales/it.json +++ b/front/src/locales/it.json @@ -1,1435 +1,60 @@ { "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } vuole accedere al tuo account Funkwhale", - "authorize": "Autorizza app di terze parti", - "authorizeFailure": "Errore durante l'autorizzazione dell'applicazione", - "fetchFailure": "Errore durante il recupero dei dati dell'applicazione", - "allScopes": "Accesso completo", - "readOnly": "Sola lettura", - "writeOnly": "Sola-scrittura" - }, - "title": "Permetti applicazione", - "button": { - "authorize": "Autorizza { app }" - }, - "help": { - "pasteCode": "Copia-incolla il codice seguente in questa applicazione:", - "redirect": "Sarai reindirizzato su { 0 }", - "copyCode": "Ti sarĆ  mostrato un codice da copiare-incollare nell'applicazione." - }, - "message": { - "unknownPermissions": "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Accesso disabilitato", - "passwordUpdated": "Password aggiornata", - "unavailable": "L'API Subsonic non ĆØ disponibile su questa istanza Funkwhale." - }, - "button": { - "confirmDisable": "Disabilita accesso", - "disable": "Disabilita accesso Subsonic", - "newPassword": "Richiedi una nuova password", - "confirmNewPassword": "Richiedi una password" - }, - "modal": { - "disableSubsonic": { - "header": "Disabilitare l'accesso alle API Subsonic?", - "content": { - "warning": "Questo disabiliterĆ  completamente l'accesso alla API Subsonic dagli account." - } - }, - "newPassword": { - "header": "Richiedere una nuova password API Subsonic?", - "content": { - "warning": "Questo ti disconnetterĆ  dai dispositivi esistenti che utilizzano la password attuale." - } - } - }, - "link": { - "apps": "Scopri come utilizzare Funkwhale attraverso altre app" - }, - "header": { - "error": "Errore", - "subsonic": "Password API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale ĆØ compatibile con altri lettori musicali che supportano le Subsonic API.", - "paragraph3": "Tuttavia, accedere a Funkwhale da quelle applicazioni richiede un'altra password che puoi impostare qui sotto.", - "paragraph2": "Puoi usarli per ascoltare le tue playlist e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio." - } - }, - "label": { - "subsonicField": "La tua password per le API subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token di accesso", - "appId": "ID Applicazione", - "appSecret": "Secret dell'applicazione" - }, - "header": { - "appDetails": "Dettagli dell'applicazione", - "editApp": "Modifica applicazione" - }, - "help": { - "appDetails": "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." - }, - "link": { - "settings": "Torna alle impostazioni" - }, - "title": "Modifica applicazione", - "button": { - "regenerateToken": "Rigenera token" - } - }, - "Settings": { - "title": "Impostazioni dell'account", - "header": { - "accountSettings": "Impostazioni dell'account", - "authorizedApps": "App autorizzate", - "avatar": "Avatar", - "changeEmail": "Cambia il mio indirizzo email", - "changePassword": "Cambia la mia password", - "contentFilters": "Filtri di contenuto", - "deleteAccount": "Elimina il mio account", - "hiddenArtists": "Artisti nascosti", - "plugins": "Plugin", - "settingsUpdated": "Impostazioni aggiornate", - "emailFailure": "Non possiamo cambiare il tuo indirizzo email", - "accountFailure": "Non possiamo eliminare il tuo account", - "noApps": "Non hai nessuna applicazione connessa al tuo account.", - "noPersonalApps": "Non hai ancora registrato nessuna applicazione.", - "yourApps": "Le tue applicazioni", - "avatarFailure": "La tua immagine di profilo non puĆ² essere salvata", - "passwordFailure": "La tua password non puĆ² essere cambiata", - "updateFailure": "Le tue impostazioni non possono essere aggiornate" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Applicazione", - "permissions": "Permessi" - } - }, - "yourApps": { - "header": { - "application": "Applicazione", - "creationDate": "Data di creazione", - "scopes": "VisibilitĆ " - } - }, - "artists": { - "header": { - "creationDate": "Data di creazione", - "name": "Nome" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Password corrente", - "newEmail": "Nuovo indirizzo email", - "newPassword": "Nuova password", - "password": "Password" - }, - "button": { - "password": "Cambia password", - "delete": "Elimina", - "deleteAccountConfirm": "Elimina il mio account", - "deleteAccount": "Elimina il mio accountā€¦", - "disableSubsonic": "Disabilita accesso", - "edit": "Modifica", - "refresh": "Aggiorna", - "remove": "Rimuovi", - "removeApp": "Rimuovi applicazione", - "revoke": "Revoca", - "revokeAccess": "Revoca accesso", - "update": "Aggiorna", - "updateSettings": "Aggiorna impostazioni" - }, - "description": { - "changeEmail": "Cambia l'indirizzo email associato al tuo account. Ti invieremo una conferma al nuovo indirizzo.", - "changePassword": { - "paragraph1": "Cambiando la tua password cambierĆ  anche la password della API Subsonic se ne hai richiesta una.", - "paragraph2": "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." - }, - "contentFilters": "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio.", - "authorizedApps": "Questa ĆØ la lista di applicazioni che hanno accesso ai dati del tuo account.", - "yourApps": "Questa ĆØ la lista di applicazioni che hai registrato.", - "plugins": "Usa i plugin per estendere Funkwhale ed ottenere funzionalitĆ  aggiuntive.", - "deleteAccount": "Puoi eliminare permanentemente e irreversibilmente il tuo account e tutti i dati ad esso associati tramite il modulo qui sotto. Ti verrĆ  richiesta una conferma." - }, - "modal": { - "changePassword": { - "header": "Cambiare la tua password?", - "content": { - "warning": "Cambiare la tua password avrĆ  queste conseguenze:", - "logout": "Sarai disconnesso da questa sessione e dovrai accedere con una nuova", - "subsonic": "La tua password Subsonic sarĆ  cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic" - } - }, - "deleteAccount": { - "header": "Vuoi eliminare il tuo account?", - "content": { - "warning": "Questo ĆØ irreversibile e rimuoverĆ  permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." - } - }, - "deleteApp": { - "header": "Rimuovere l'applicazione \"{ application }\"?", - "content": { - "warning": "Questo cancellerĆ  permanentemente l'applicazione e tutti i token associati." - } - }, - "revokeApp": { - "header": "Revoca accesso per l'applicazione \"{ application }\"?", - "content": { - "warning": "Questo eviterĆ  a questa applicazione di accedere al servizio a tuo nome." - } - } - }, - "help": { - "noApps": "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui.", - "changePassword": "Per favore controlla se la tua password ĆØ corretta", - "noPersonalApps": "Creane una per integrare Funkwhale con applicazioni di terze parti." - }, - "link": { - "managePlugins": "Gestisci i plugin", - "newApp": "Registra una nuova applicazione" - }, - "warning": { - "deleteAccount": "Il tuo account sarĆ  eliminato dai nostri servers in pochi minuti. Notificheremo anche gli altri server che potrebbero avere una copia di alcuni dei tuoi dati in modo che possano procedere all'eliminazione. Nota perĆ² che alcuni di questi server potrebbero essere offline o potrebbero rifiutarsi di procedere." - }, - "message": { - "currentEmail": "Il tuo indirizzo email corrente ĆØ { email }.", - "confirmDelete": "La tua richiesta di eliminazione ĆØ stata inviata, il tuo account e il suo contenuto saranno eliminati a breve" - } - }, - "Logout": { - "header": { - "confirm": "Sei sicuro di volerti disconnettere?", - "unauthenticated": "Non hai ancora effettuato l'accesso" - }, - "link": { - "login": "Accedi!" - }, - "title": "Disconnetti", - "button": { - "logout": "Si, disconnettimi!" - }, - "message": { - "loggedIn": "Sei attualmente connesso come { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Torna alle impostazioni" - }, - "title": "Crea una nuova applicazione" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori.", - "read": { - "label": "Lettura", - "description": "Accesso in sola lettura ai dati utente" - }, - "write": { - "label": "Scrivi", - "description": "Accesso in sola-scrittura ai dati utente" - } - }, - "name": "Nome", - "redirectUri": "URI di redirezione" - }, - "button": { - "create": "Crea applicazione", - "update": "Aggiorna applicazione" - }, - "help": { - "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non ĆØ servita sul web." - }, - "header": { - "failure": "Non ĆØ stato possibile salvare le tue modifiche" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crea un account", - "resetPassword": "Resetta la tua password" - }, - "placeholder": { - "username": "Inserisci il tuo nome utente o indirizzo email" - }, - "help": { - "approvalRequired": "Se ti sei registrato di recente potresti dover aspettare che il nostro team di moderazione controlli il tuo account o verificare la tua email.", - "invalidCredentials": "Per favore, controlla che la combinazione username/password sia corretta e assicurati di aver verificato il tuo indirizzo email." - }, - "button": { - "login": "Accedi" - }, - "label": { - "password": "Password", - "username": "Nome utente o indirizzo email" - }, - "header": { - "loginFailure": "Non riusciamo a farti accedere" - } - }, - "SignupForm": { - "button": { - "create": "Crea il mio account" - }, - "label": { - "email": "Indirizzo email", - "password": "Password", - "username": "Nome utente" - }, - "placeholder": { - "email": "Inserisci il tuo indirizzo email", - "invitation": "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)", - "username": "Inserisci il tuo nome utente" - }, - "header": { - "login": "Accedi al tuo account Funkwhale", - "signupFailure": "Il tuo account non puĆ² essere creato." - }, - "message": { - "registrationClosed": "Le registrazioni sono chiuse su questa istanza, ĆØ necessario un codice d'invito per registrarsi.", - "requiresReview": "Le iscrizioni su questa istanza sono aperte, ma sono revisionate dai moderatori prima di essere approvate.", - "awaitingReview": "La richiesta di registrazione ĆØ stata inviata con successo. Sarai notificato tramite email quando il nostro team di moderazione avrĆ  verificato la tua richiesta.", - "accountCreated": "Il tuo account ĆØ stato creato con successo. Verifica la tua email prima di fare il login." - } - }, - "Plugin": { - "link": { - "documentation": "Documentazione" - }, - "label": { - "pluginEnabled": "Abilitato", - "library": "Libreria" - }, - "header": { - "failure": "Errore durante il salvataggio del plugin" - }, - "description": { - "library": "Libreria dove i file dovrebbero essere importati." - }, - "button": { - "save": "Salva", - "scan": "Scansiona" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } utente attivo | { n } utenti attivi", - "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" + "description": { + "findApp": "Usa Funkwhale su altri dispositivi con le nostre app.", + "funkwhale": "Funkwhale ĆØ un progetto guidato dalla comunitĆ  che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", + "publicContent": "Ascolta album e playlist pubbliche condivise su questa istanza.", + "quota": "Gli utenti su questo pod ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!", + "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!" }, "header": { - "funkwhale": "Una piattaforma sociale dove ascoltare e condividere musica", "aboutPod": "A proposito di questa istanza", - "publicContent": "Naviga tra i contenuti pubblici", "findApp": "Trova un'app", + "funkwhale": "Una piattaforma sociale dove ascoltare e condividere musica", + "publicContent": "Naviga tra i contenuti pubblici", "signup": "Registrati" }, - "title": "Informazioni su", "link": { "findOtherPod": "Trova un altro pod", "learnMore": "Scopri di piĆ¹" }, - "description": { - "funkwhale": "Funkwhale ĆØ un progetto guidato dalla comunitĆ  che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", - "publicContent": "Ascolta album e playlist pubbliche condivise su questa istanza.", - "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!", - "findApp": "Usa Funkwhale su altri dispositivi con le nostre app.", - "quota": "Gli utenti su questo pod ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!" + "message": { + "greeting": "Ciao {username}", + "loggedIn": "Risulti giĆ  autenticato!" }, "placeholder": { "noDescription": "Nessuna descrizione disponibile." }, - "message": { - "loggedIn": "Risulti giĆ  autenticato!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } utente attivo | { n } utenti attivi", "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" }, - "header": { - "aboutFunkwhale": "A proposito di Funkwhale", - "about": "A proposito di questa istanza Funkwhale", - "contact": "Contatta", - "login": "Accedi", - "newChannels": "Nuovi canali", - "newAlbums": "Album aggiunti di recente", - "signup": "Registrati", - "statistics": "Statistiche", - "links": "Link utili", - "welcome": "Benvenuto a { podName }!" - }, - "link": { - "publicContent": { - "label": "Naviga tra i contenuti pubblici", - "description": "Ascolta album e playlist pubbliche condivise su questa istanza" - }, - "userGuides": { - "description": "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalitĆ ", - "label": "Manuali utente" - }, - "findOtherPod": "Trova un'altra istanza", - "learnMore": "Scopri di piĆ¹", - "mobileApps": { - "label": "App mobile", - "description": "Usa Funkwhale su altri dispositivi con le nostre app" - }, - "rules": "Regole del server", - "viewMore": "Visualizza altriā€¦", - "funkwhale": "Visita funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale ĆØ gratuito e sviluppato da un'amichevole comunitĆ  di volontari.", - "paragraph1": "Su questo pod gira Funkwhale, un progetto guidato dalla comunitĆ  che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata." - }, - "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!", - "quota": "Gli utenti su questa istanza ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!" - }, - "title": "Pagina Iniziale", - "placeholder": { - "noDescription": "Nessuna descrizione disponibile." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - } - }, - "Widget": { - "button": { - "more": "Mostra altri" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - }, - "title": "Aggiornato il { date }" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodi" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - } - }, - "Widget": { - "button": { - "more": "Mostra altri" - } - } - }, - "Player": { - "meta": { - "position": "{ index } su { length }" - }, - "header": { - "player": "Player audio e controlli" - }, - "label": { - "clearQueue": "Pulisci la tua coda", - "expandQueue": "Espandi coda", - "addArtistContentFilter": "Nascondi contenuti di questo artistaā€¦", - "loopingDisabled": "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia.", - "loopingSingle": "Ripeti una singola traccia. Clicca per ripetere l'intera coda.", - "loopingWholeQueue": "Ripete l'intera coda. Clicca per disattivare la ripetizione.", - "audioPlayer": "Riproduttore musicale", - "mute": "Muto", - "nextTrack": "Prossima traccia", - "pause": "Pausa", - "play": "Riproduci", - "previousTrack": "Traccia precedente", - "shuffleQueue": "Mischia la tua coda", - "unmute": "Non silenziare" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Aggiungi alla coda attuale", - "addToPlaylist": "Aggiungi alla playlistā€¦", - "episodeDetails": "Dettagli dell'episodio", - "hideArtist": "Nascondi contenuti di questo artista", - "discretePlay": "Riproduci", - "playAlbum": "Riproduci album", - "playArtist": "Riproduci artista", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "playPlaylist": "Riproduci playlist", - "startRadio": "Riproduci canzoni simili", - "playTrack": "Riproduci traccia", - "playTracks": "Riproduci tracce", - "report": "Segnalaā€¦", - "trackDetails": "Dettagli sulla traccia" - }, - "title": { - "more": "Di piĆ¹ā€¦", - "unavailable": "Questa traccia non ĆØ disponibile in nessuna libreria alla quale hai accesso" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Aggiungi ai preferiti", - "addToPlaylist": "Aggiungi alla playlistā€¦", - "addToQueue": "Aggiungi alla coda", - "episodeDetails": "Dettagli dell'episodio", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "startRadio": "Riproduci radio", - "removeFromFavorites": "Rimuovi dai preferiti", - "trackDetails": "Dettagli sulla traccia", - "albumDetails": "Vedi album", - "artistDetails": "Vedi artisti", - "channelDetails": "Vedi canali", - "seriesDetails": "Vedi serie" - } - }, - "MobileRow": { - "button": { - "actions": "Mostra le azioni per la traccia" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Aggiungi ai preferiti", - "addToPlaylist": "Aggiungi alla playlistā€¦", - "addToQueue": "Aggiungi alla coda", - "episodeDetails": "Dettagli dell'episodio", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "startRadio": "Riproduci radio", - "removeFromFavorites": "Rimuovi dai preferiti", - "trackDetails": "Dettagli sulla traccia", - "albumDetails": "Vedi album", - "artistDetails": "Vedi artisti", - "channelDetails": "Vedi canali", - "seriesDetails": "Vedi serie" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artista", - "title": "Titolo" - } - } - }, - "Widget": { - "empty": { - "noResults": "Nessun risultato" - }, - "button": { - "more": "Mostra altri" - } - }, - "MobileRow": { - "button": { - "actions": "Mostra le azioni per la traccia" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Regola volume" - }, - "button": { - "mute": "Muto", - "unmute": "Non silenziare" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artista", - "category": { - "federation": "Federazione", - "podcasts": "Podcast" - }, - "search": "Ricerca contenuti", - "tag": "Etichetta", - "track": "Traccia" - }, - "link": { - "more": "Altri risultati šŸ”’", - "fediverse": "Cerca sul fediverso", - "rss": "Iscriviti al podcast tramite RSS" - }, - "header": { - "noResults": "Nessun risultato trovato" - }, - "placeholder": { - "search": "Cerca per artisti, album, tracceā€¦" - }, - "empty": { - "noResults": "Spiacente, questa ricerca non ha restituito risultati" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artisti", - "search": "Cerca un po' di musica" - }, - "placeholder": { - "search": "Artista, album, tracciaā€¦" - }, - "empty": { - "noAlbums": "Nessun album corrisponde alla tua ricerca", - "noArtists": "Nessun artista corrisponde alla tua ricerca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografia dell'artista", - "category": "Categoria", - "image": "Immagine del canale", - "description": "Descrizione", - "username": "Fediverso", - "language": "Lingua", - "name": "Nome", - "email": "Indirizzo email del proprietario", - "owner": "Nome proprietario", - "podcast": "Podcast", - "subcategory": "Sottocategoria", - "tags": "Tag" - }, - "placeholder": { - "name": "Nome del canale fantastico", - "username": "nomecanalefantastico" - }, - "header": { - "error": "Errore durante il salvataggio del canale" - }, - "help": { - "podcast": "Carica i tuoi episodi e tieni aggiornata la tua community.", - "discography": "Pubblica la musica che fai come una bella discografia di album e singoli.", - "podcastFields": "Utilizzato per itunes:email e itunes:name field richiesto da alcune piattaforme come Spotify o iTunes.", - "username": "Utilizzato negli URL e per seguire questo canale nel Fediverso. Non puĆ² essere cambiato una volta impostato." - }, - "loader": { - "loading": "Caricamento" - }, - "legend": { - "purpose": "Per cosa sarĆ  utilizzato questo canale?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Annulla richiesta di follow", - "follow": "Segui", - "unfollow": "Smetti di seguire" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copia" - }, - "help": { - "embed": "Copia/incolla questo codice nel tuo sito HTML", - "width": "Lascia vuoto per un widget adattivo", - "anonymous": "Contatta i tuoi amministratori e chiedigli di cambiare l'impostazione corrispondente." - }, - "label": { - "embed": "Incorpora codice", - "height": "Altezza del widget", - "width": "Larghezza del widget" - }, - "header": { - "preview": "Anteprima" - }, - "warning": { - "anonymous": "La condivisione non funzionerĆ  perchĆØ questa istanza non permette agli utenti anonimi di accedere al contenuto." - }, - "message": { - "copy": "Testo copiato negli appunti!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Mostra altri" - }, - "help": { - "subscribe": "Potresti aver bisogno di seguire questo canale per vedere i suoi contenuti." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Mostra altri" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Potresti aver bisogno di seguire questo canale per vedere il suo contenuto." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "addDescription": "Aggiungi una descrizioneā€¦" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } traccia in | { n } tracce in", - "albums": "{ n } album | { n } album" - }, - "title": "Artista", - "button": { - "cancel": "Annulla", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di piĆ¹ā€¦", - "play": "Riproduci tutti gli album" - }, - "modal": { - "embed": { - "header": "Incorpora il lavoro di questo artista nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "wikipedia": "Cerca su Wikipedia", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }", - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } traccia corrisponde ai filtri selezionati | { n } tracce corrispondono ai filtri selezionati", - "builder": "Crea", - "created": "Radio creata", - "updated": "Radio aggiornata" - }, - "table": { - "filter": { - "header": { - "actions": "Azioni", - "candidates": "Candidati", - "config": "Configurazione", - "exclude": "Escludi", - "name": "Filtra nome" - } - } - }, - "button": { - "filter": "Aggiungi filtro", - "save": "Salva" - }, - "label": { - "filter": "Aggiungi filtri per personalizzare la tua radio", - "description": "Descrizione", - "public": "Mostra pubblicamente", - "name": "Nome radio" - }, - "placeholder": { - "description": "La mia stupenda descrizione", - "name": "La mia eccezionale radio" - }, - "title": "Creatore Radio", - "option": { - "filter": "Seleziona un filtro" - }, - "description": { - "builder": "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrĆ  tracce in accordo con i tuoi criteri." - } - }, - "Filter": { - "cancelButton": "Annulla", - "excludeLabel": "Escludi", - "removeButton": "Rimuovi", - "matchingTracksModalHeader": "Tracce che corrispondono al filtro" - } - }, - "FileUpload": { - "tooltip": { - "network": "Si ĆØ verificato un errore di rete durante il caricamento del file", - "size": "Impossibile caricare questo file, controlla che non sia troppo grande", - "extension": "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono { extensions }", - "retry": "Riprova", - "denied": "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota", - "timeout": "Caricamento scaduto, per favore riprova" - }, - "table": { - "upload": { - "header": { - "actions": "Azioni", - "filename": "Nome file", - "size": "Dimensione", - "status": "Stato" - }, - "status": { - "pending": "In sospeso", - "uploaded": "Caricato", - "uploading": "Caricamentoā€¦" - } - } - }, - "button": { - "cancel": "Annulla", - "retry": "Riprova upload falliti" - }, - "label": { - "uploadWidget": "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle", - "remainingSpace": "Spazio di archiviazione rimanente", - "extensions": "Estensioni supportate: { extensions }" - }, - "header": { - "failure": "Errore durante l'avvio dell'importazione", - "server": "Stato dell'importazione", - "status": "Stato dell'importazione", - "local": "Importa musica dalla tua memoria locale" - }, - "link": { - "processing": "Elaborazione", - "uploading": "Caricamento", - "picard": "Ti consigliamo di utilizzare Picard per quello scopo." - }, - "description": { - "import": "Risultati della tua importazione:", - "previousImport": "Risultati della tua precedente importazione:" - }, - "message": { - "local": { - "format": "I file musicali che stai caricando sono in formato OGG, Flac, MP3 o AIFF", - "tag": "I file musicali che stai caricando sono correttamente etichettati.", - "message": "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:", - "copyright": "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Un breve riassunto che descrive le tue modifiche." - }, - "button": { - "cancel": "Annulla", - "clear": "Svuota", - "reset": "Ripristina al valore iniziale", - "showUnreviewed": "Restringi alle modifiche non revisionate", - "showAll": "Mostra tutte le modifiche", - "submit": "Invia e applica modifica", - "new": "Invia un'altra modifica", - "suggest": "Invia suggerimento" - }, - "header": { - "failure": "Errore durante l'invio della modifica", - "recentEdits": "Modifiche recenti", - "unreviewed": "Modifiche recenti in attesa di revisione", - "success": "La tua modifica ĆØ stata inviata correttamente." - }, - "notApplicable": "N/D", - "empty": { - "suggestEdit": "Suggerisci una modifica utilizzando il modulo qui sotto." - }, - "label": { - "summary": "Riassunto (opzionale)" - }, - "message": { - "noPermission": "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." - } - }, - "Albums": { - "link": { - "addMusic": "Aggiungi musica" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando gli album" - }, - "placeholder": { - "search": "Inserisci il titolo dell'albumā€¦" - }, - "empty": { - "noResults": "Nessun risultato corrispondente alla tua ricerca" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "label": { - "search": "Cerca", - "tags": "Etichette" - }, - "button": { - "search": "Cerca" - } - }, - "Artists": { - "button": { - "upload": "Aggiungi musica", - "search": "Cerca" - }, - "label": { - "search": "Nome dell'artista", - "excludeCompilation": "Escludi gli artisti della compilation", - "tags": "Etichette" - }, - "title": "Artisti", - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando artisti" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "placeholder": { - "search": "Cercaā€¦" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artista", - "copyright": "Diritti d'autore", - "license": "Licenza", - "series": "Serie", - "url": "URL", - "year": "Anno" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Download", - "duration": "Durata", - "size": "Dimensione" - } - }, - "header": { - "episode": "Dettagli Episodio", - "library": "Librerie Correlate", - "playlists": "Playlist correlate", - "release": "Dettagli Rilascio", - "track": "Dettagli Traccia" - }, - "notApplicable": "N/D", - "description": { - "library": "Questa traccia ĆØ presente nelle seguenti librerie:" - }, - "link": { - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artisti", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "header": { - "channels": "Canali", - "tracks": "Tracce" - } - }, - "ArtistDetail": { - "header": { - "album": "Album di questo artista", - "track": "Nuove tracce di questo artista", - "library": "Librerie dell'utente" - }, - "button": { - "more": "Carica di piĆ¹ā€¦", - "filter": "Rimuovi filtro" - }, - "link": { - "filter": "Revisiona i miei filtri" - }, - "description": { - "library": "Questo artista ĆØ presente nelle seguenti librerie:" - }, - "message": { - "filter": "Stai attualmente nascondendo i contenuti di questo artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Si ĆØ verificato un errore durante l'elaborazione del file. Sono disponibili dettagli qui sotto.", - "unknownError": { - "message": "Si ĆØ verificato un errore sconosciuto", - "label": "Errore sconosciuto" - }, - "invalidMetadata": { - "label": "Metadati non validi", - "message": "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." - } - }, - "button": { - "close": "Chiudi" - }, - "table": { - "error": { - "debug": "Informazioni di debug", - "errorDetail": "Dettaglio dell'errore", - "errorType": "Tipo di errore", - "help": "Chiedi aiuto" - } - }, - "header": { - "importDetail": "Dettaglio dell'importazione" - }, - "link": { - "support": "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)", - "documentation": "Leggi la nostra documentazione per questo errore" - }, - "message": { - "importDetail": "Il caricamento ĆØ ancora in corso e presto sarĆ  processato dal server.", - "importSuccess": "Il caricamento ĆØ stato processato con successo dal server." - }, - "warning": { - "importSkipped": "Il caricamento ĆØ stato saltato perchĆØ uno simile ĆØ giĆ  disponibile in una delle tue librerie." - } - }, - "EditCard": { - "button": { - "approve": "Approva", - "delete": "Elimina", - "reject": "Rifiuta" - }, - "status": { - "approved": "Approvato", - "applied": "Approvata ed applicata", - "pending": "Revisione in sospeso", - "rejected": "Rifiutato" - }, - "modal": { - "delete": { - "header": "Eliminare questo suggerimento?" - }, - "content": { - "warning": "Il suggerimento sarĆ  completamente rimosso, questa azione ĆØ irreversibile." - } - }, - "table": { - "update": { - "header": { - "field": "Campo", - "newValue": "Nuovo valore", - "oldValue": "Vecchio valore" - }, - "notApplicable": "N/D" - } - }, - "header": { - "modification": "Modifica { id }" - }, - "link": { - "track": "Traccia #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Navigare i podcast" - }, - "button": { - "cancel": "Annulla", - "channel": "Crea un Canale", - "search": "Cerca", - "subscribe": "Iscriviti", - "feed": "Iscriviti a un feed" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "label": { - "search": "Titolo del Podcast", - "tags": "Etichette" - }, - "title": "Podcast", - "pagination": { - "results": "Risultati per pagina" - }, - "placeholder": { - "search": "Cercaā€¦" - }, - "modal": { - "subscription": { - "header": "Iscrizione" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando radio", - "instance": "Radio dell'istanza", - "user": "Radio dell'utente" - }, - "button": { - "add": "Crea radio", - "create": "Crea la tua radio" - }, - "placeholder": { - "search": "Inserisci un nome di una radioā€¦" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "title": "Radio", - "pagination": { - "results": "Risultati per pagina" - }, - "label": { - "search": "Cerca" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Annulla", - "delete": "Eliminaā€¦", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di piĆ¹ā€¦" - }, - "modal": { - "delete": { - "header": "Eliminare questo album?", - "content": { - "warning": "L'album sarĆ  rimosso, cosƬ come i file ad esso associati e i dati. Questa azione ĆØ irreversibile." - } - }, - "embed": { - "header": "Incorpora questo album nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }", - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Annulla", - "delete": "Eliminaā€¦", - "download": "Scarica", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di piĆ¹ā€¦", - "play": "Riproduci" - }, - "modal": { - "delete": { - "header": "Eliminare questa traccia?", - "content": { - "warning": "La traccia sarĆ  rimossa, cosƬ come i relativi file e dati. Questa azione ĆØ irreversibile." - } - }, - "embed": { - "header": "Incorpora questa traccia nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "wikipedia": "Cerca su Wikipedia", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }" - }, - "title": "Traccia" - }, - "AlbumEdit": { - "header": { - "edit": "Modifica questo album", - "suggest": "Suggerisci una modifica su questo album" - }, - "message": { - "remote": "Questo oggetto ĆØ gestito da un altro server, non puoi modificarlo." - } - }, - "ArtistEdit": { - "header": { - "edit": "Modifica questo artista", - "suggest": "Suggerisci una modifica su questo artista" - }, - "message": { - "remote": "Questo oggetto ĆØ gestito da un altro server, non puoi modificarlo." - } - }, - "TrackEdit": { - "header": { - "edit": "Modifica questa traccia", - "suggest": "Suggerisci una modifica su questa traccia" - }, - "message": { - "remote": "Questo oggetto ĆØ gestito da un altro server, non puoi modificarlo." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodi", - "tracks": "Tracce", - "libraries": "Librerie dell'utente" - }, - "description": { - "libraries": "Questo album ĆØ presente nelle seguenti librerie:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importa" - } - }, - "FsLogs": { - "empty": { - "notStarted": "L'importazione non ĆØ ancora cominciata" - } - }, - "Home": { - "title": "Libreria", - "header": { - "newChannels": "Nuovi canali", - "playlists": "Playlist", - "recentlyAdded": "Aggiunte recentemente", - "recentlyFavorited": "Preferiti recenti", - "recentlyListened": "Ascoltate recentemente" - } - }, - "TagSelector": { - "placeholder": { - "search": "Cercaā€¦" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } preferito | { n } preferiti" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "link": { - "library": "Sfoglia libreria" - }, - "loader": { - "loading": "Caricando i tuoi preferitiā€¦" - }, - "empty": { - "noFavorites": "Non sono ancora state aggiunte tracce ai tuoi preferiti" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "title": "I Tuoi Preferiti" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Aggiungi ai preferiti", - "remove": "Rimuovi dai preferiti" - }, - "label": { - "inFavorites": "Nei preferiti" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } file | { n } file", - "quota": "Spazio di archiviazione rimanente:" - }, - "button": { - "cancel": "Annulla", - "close": "Chiudi", - "finishLater": "Finisci piĆ¹ tardi", - "next": "Prossimo passo", - "previous": "Passo precedente", - "publish": "Pubblica", - "update": "Aggiorna" - }, - "header": { - "uploadFiles": "File da caricare", - "processing": "Elaborazione file", - "publish": "Pubblica audio", - "uploadDetails": "Dettagli di caricamento" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "label": { - "album": "Album", - "series": "Serie" - }, - "option": { - "none": "Nessuno" - } - }, - "LicenseSelect": { - "link": { - "license": "A proposito di questa licenza" - }, - "label": { - "license": "Licenza" - }, - "option": { - "none": "Nessuno" - } - }, - "UploadForm": { - "help": { - "license": "Aggiungi una licenza al file per garantire alcune libertĆ  al tuo pubblico." - }, - "label": { - "openBrowser": "Sfogliaā€¦", - "channel": "Canale" - }, - "message": { - "dragAndDrop": "Trascina qui i file da caricare oppure apri Esplora file", - "pending": "Hai alcune bozze di upload in attesa di pubblicazione." - }, - "button": { - "edit": "Modifica", - "ignore": "Ignora", - "remove": "Rimuovi", - "resume": "Riprendi", - "retry": "Riprova" - }, - "header": { - "error": "Errore durante la pubblicazione" - }, - "status": { - "errored": "Errore", - "pending": "In sospeso", - "uploading": "Caricamento" - }, - "description": { - "extensions": "Estensioni supportate: { extensions }" - }, - "warning": { - "quota": "Non hai piĆ¹ spazio disponibile per caricare i tuoi file. Per piacere contatta i moderatori." - } - }, - "AlbumModal": { - "button": { - "cancel": "Annulla", - "create": "Crea" - }, - "header": { - "newAlbum": "Nuovo album", - "newSeries": "Nuova serie" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descrizione", - "position": "Posizione", - "tags": "Etichette", - "title": "Titolo", - "image": "Immagine Traccia" - } - }, - "AlbumForm": { - "header": { - "error": "Errore durante la creazione" - }, - "label": { - "albumTitle": "Titolo" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Iscriviti", - "unsubscribe": "Disiscriviti" - }, - "help": { - "auth": "Per iscriverti a questo canale devi prima fare l'accesso" - } - } + "title": "Informazioni su" }, "AboutPod": { - "stat": { - "hoursOfMusic": "{ n } ora di musica | { n } ore di musica", - "activeUsers": "{ n } utente attivo | { n } utenti attivi", - "albumsCount": "Album | Album", - "artistsCount": "Artista | Artisti", - "listeningsCount": "ascolti | ascolti", - "tracksCount": "traccia | tracce" + "feature": { + "allowList": "Lista dei consentiti", + "anonymousAccess": "Accesso anonimo", + "federation": "Federazione", + "quota": "Quota di upload", + "registrations": "Iscrizioni", + "status": { + "closed": "Chiuso", + "disabled": "Disabilitato", + "enabled": "Abilitato", + "open": "Aperto" + }, + "version": "Versione Funkwhale" + }, + "header": { + "about": "A proposito di questa istanza", + "contact": "Contatta", + "features": "FunzionalitĆ ", + "rules": "Regole", + "statistics": "Statistiche", + "terms": "Termini e regole sulla privacy" }, - "title": "Informazioni su", "link": { "about": "A proposito di questa istanza", "features": "FunzionalitĆ ", @@ -1438,27 +63,8 @@ "statistics": "Statistiche", "terms": "Termini e regole sulla privacy" }, - "header": { - "about": "A proposito di questa istanza", - "contact": "Contatta", - "features": "FunzionalitĆ ", - "rules": "Regole", - "statistics": "Statistiche", - "terms": "Termini e regole sulla privacy" - }, - "feature": { - "allowList": "Lista dei consentiti", - "anonymousAccess": "Accesso anonimo", - "status": { - "closed": "Chiuso", - "disabled": "Disabilitato", - "enabled": "Abilitato", - "open": "Aperto" - }, - "federation": "Federazione", - "version": "Versione Funkwhale", - "registrations": "Iscrizioni", - "quota": "Quota di upload" + "message": { + "contact": "Scrivici un'email: {'{{'} contactEmail {'}}'}" }, "notApplicable": "N/D", "placeholder": { @@ -1466,332 +72,231 @@ "noRules": "Nessuna regola disponibile.", "noTerms": "Nessun termine disponibile." }, + "stat": { + "activeUsers": "{ n } utente attivo | { n } utenti attivi", + "albumsCount": "Album | Album", + "artistsCount": "Artista | Artisti", + "hoursOfMusic": "{ n } ora di musica | { n } ore di musica", + "listeningsCount": "ascolti | ascolti", + "tracksCount": "traccia | tracce" + }, + "title": "Informazioni su" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Su questo pod gira Funkwhale, un progetto guidato dalla comunitĆ  che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", + "paragraph2": "Funkwhale ĆØ gratuito e sviluppato da un'amichevole comunitĆ  di volontari." + }, + "quota": "Gli utenti su questa istanza ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!", + "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!" + }, + "header": { + "about": "A proposito di questa istanza Funkwhale", + "aboutFunkwhale": "A proposito di Funkwhale", + "contact": "Contatta", + "links": "Link utili", + "login": "Accedi", + "newAlbums": "Album aggiunti di recente", + "newChannels": "Nuovi canali", + "signup": "Registrati", + "statistics": "Statistiche", + "welcome": "Benvenuto a { podName }!" + }, + "help": { + "registrationsClosed": "Le iscrizioni sono chiuse su questa istanza. Puoi registrarti su un'altra istanza usando il link sottostante." + }, + "link": { + "findOtherPod": "Trova un'altra istanza", + "funkwhale": "Visita funkwhale.audio", + "learnMore": "Scopri di piĆ¹", + "mobileApps": { + "description": "Usa Funkwhale su altri dispositivi con le nostre app", + "label": "App mobile" + }, + "publicContent": { + "description": "Ascolta album e playlist pubbliche condivise su questa istanza", + "label": "Naviga tra i contenuti pubblici" + }, + "rules": "Regole del server", + "userGuides": { + "description": "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalitĆ ", + "label": "Manuali utente" + }, + "viewMore": "Visualizza altriā€¦" + }, + "placeholder": { + "noDescription": "Nessuna descrizione disponibile." + }, + "stat": { + "activeUsers": "{ n } utente attivo | { n } utenti attivi", + "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" + }, + "title": "Pagina Iniziale" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Pagina non trovata!" + }, + "link": { + "home": "Vai alla pagina iniziale" + }, "message": { - "contact": "Scrivici un'email: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Ci dispiace, la pagina che hai richiesto non esiste:" + }, + "title": "Pagina Non Trovata" + }, + "Queue": { + "button": { + "clear": "Svuota", + "close": "Chiudi", + "stopRadio": "Ferma radio" + }, + "header": { + "failure": "La traccia non puĆ² essere caricata", + "noSources": "La traccia non ha sorgenti disponibili.", + "radio": "Hai una radio in riproduzione" + }, + "label": { + "addArtistContentFilter": "Nascondi contenuti di questo artistaā€¦", + "duration": "Durata", + "enterFullscreen": "Entra la modalitĆ  a schermo intero", + "exitFullscreen": "Esci dalla modalitĆ  a schermo intero", + "favorite": "Traccia preferita", + "next": "Prossima traccia", + "pause": "Pausa", + "play": "Riproduci", + "populatingRadio": "Recupero traccia radioā€¦", + "previous": "Traccia precedente", + "queue": "Coda", + "remove": "Rimuovi", + "restart": "Riavvia traccia", + "selectTrack": "Seleziona traccia", + "showCoverArt": "Mostra Copertina" + }, + "message": { + "automaticPlay": "La traccia seguente verrĆ  riprodotta automaticamente tra pochi secondiā€¦", + "radio": "Le nuove tracce saranno allegate qui automaticamente.", + "webglUnsupported": "Il tuo browser non sembra supportare WebGL2." + }, + "meta": { + "end": "Fine", + "queuePosition": "Traccia { index } su { length }", + "startTime": "00:00", + "unknownAlbum": "Album Sconosciuto", + "unknownArtist": "Artista Sconosciuto" + }, + "warning": { + "connectivity": "Potresti avere un problema di connettivitĆ ." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } su { total } selezionato | { n } su { total } selezionati", - "allSelected": "Tutto, { n } elemento, selezionato | Tutti gli { n } elementi selezionati", - "go": "Vai", - "launch": "Inizia", - "refresh": "Aggiorna tabella dei contenuti", - "select": "Seleziona", - "selectAll": "Seleziona tutti gli elementi", - "selectElement": "Seleziona un elemento | Seleziona tutti e { n } gli elementi", - "selectCurrentPage": "Seleziona solo la pagina attuale" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverso", + "rss": "RSS", + "search": "Cerca" + }, + "description": { + "fediverse": "Usa questo modulo per recuperare un oggetto ospitato da qualche altra parte nel Fediverso.", + "rss": "Usa questo modulo per iscriverti a un feed RSS dall'URL relativo." + }, + "error": { + "fetchFailed": "Questo oggetto non puĆ² essere recuperato" + }, + "header": { + "fetchFailed": "Errore durante il recupero dell'oggetto" + }, + "label": { + "fediverse": { + "fieldLabel": "Fediverso", + "fieldPlaceholder": "{'@'}username{'@'}esempio.com", + "title": "Iscriviti ad un podcast condiviso sul Fediverso" }, - "message": { - "success": "L'azione { action } ĆØ stata lanciata con successo su { n } elemento | L'azione { action } ĆØ stata lanciata con successo su { n } elementi", - "needsRefresh": "Il contenuto ĆØ stato aggiornato, clicca aggiorna per visualizzare il contenuto aggiornato" - }, - "label": { - "actions": "Azioni", - "performAction": "Esegui azioni" - }, - "modal": { - "performAction": { - "header": "Vuoi eseguire { action } su { n } elemento? | Vuoi eseguire { action } su { n } elementi?", - "content": { - "warning": "Questo puĆ² coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se ĆØ proprio quello che vuoi." - } - } - }, - "header": { - "error": "Errore durante l'esecuzione dell'azione" + "rss": { + "fieldLabel": "Indirizzo del feed RSS", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Iscriviti al feed RSS di un podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "Informazioni", - "chat": "Chat", - "docs": "Documentazione", - "forum": "Forum", - "support": "Aiuto", - "git": "Elenco problemi", - "login": "Accedi", - "logout": "Disconnetti", - "notifications": "Notifiche", - "profile": "Profilo", - "settings": "Impostazioni", - "signup": "Registrati" - }, - "label": { - "shortcuts": "Scorciatoie da tastiera", - "language": "Lingua", - "theme": "Tema" - } - }, - "UserModal": { - "link": { - "about": "Informazioni", - "chat": "Chat", - "forum": "Forum", - "support": "Aiuto", - "git": "Elenco problemi", - "login": "Accedi", - "logout": "Disconnetti", - "notifications": "Notifiche", - "profile": "Profilo", - "settings": "Impostazioni", - "signup": "Registrati" - }, - "label": { - "shortcuts": "Scorciatoie da tastiera", - "language": "Lingua", - "theme": "Tema" - }, - "header": { - "options": "Opzioni" - }, - "button": { - "switchInstance": "Usa un'altra istanza" - } - }, - "DangerousButton": { - "button": { - "cancel": "Annulla", - "confirm": "Conferma" - }, - "header": { - "confirm": "Vuoi confermare questa azione?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Annulla", - "edit": "Modifica", - "less": "Mostra meno", - "more": "Mostra altri", - "update": "Aggiorna descrizione" - }, - "header": { - "failure": "Errore durante l'aggiornamento della descrizione" - }, - "empty": { - "noDescription": "Nessuna descrizione disponibile" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Pulisci" - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cercaā€¦" - } - }, - "CollapseLink": { - "button": { - "collapse": "Riduci", - "expand": "Espandi" - } - }, - "CopyInput": { - "button": { - "copy": "Copia" - }, - "message": { - "success": "Testo copiato negli appunti!" - } - }, - "LoginModal": { - "link": { - "login": "Accedi", - "signup": "Registrati" - }, - "header": { - "unauthenticated": "Non autenticato" - }, - "description": { - "noAccess": "Non hai i permessi di accesso!" - } - }, - "ContentForm": { - "help": { - "markdown": "La sintassi Markdown ĆØ supportata." - }, - "empty": { - "noContent": "Nulla da visualizzare." - }, - "button": { - "preview": "Anteprima", - "write": "Scrivi" - }, - "placeholder": { - "input": "Scrivi alcune parole quiā€¦" - } - }, - "EmptyState": { - "header": { - "noResults": "Nessun risultato trovato." - }, - "button": { - "refresh": "Aggiorna" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG o JPG. Le dimensioni devono essere tra 1400x1400px e 3000x3000px. La dimensione massima consentita per il file ĆØ 5MB." - }, - "button": { - "remove": "Rimuovi" - }, - "label": { - "upload": "Carica Nuova Immagineā€¦" - }, - "loader": { - "uploading": "Caricamento fileā€¦" - }, - "header": { - "failure": "Il tuo allegato non puĆ² essere salvato" - } - }, - "ExpandableDiv": { - "button": { - "less": "Mostra meno", - "more": "Mostra altri" - } + "warning": { + "unsupported": "Questo tipo di oggetto non ĆØ ancora supportato" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - } + "SetInstanceModal": { + "button": { + "cancel": "Annulla", + "submit": "Invia" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } ĆØ giĆ  nella { 1 }." - }, - "button": { - "addDuplicate": "Aggiungi comunque", - "addToPlaylist": "Aggiungi a questa playlist", - "addTrack": "Aggiungi traccia", - "cancel": "Annulla", - "edit": "Modifica" - }, - "header": { - "addToPlaylist": "Aggiungi alla playlist", - "available": "Playlist disponibili", - "manage": "Gestisci playlist", - "noResults": "Nessun risultato che corrisponde al tuo filtro", - "addFailure": "La traccia non puĆ² essere aggiunta alla lista di riproduzione" - }, - "table": { - "edit": { - "header": { - "edit": "Modifica", - "lastModification": "Ultima modifica", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "placeholder": { - "filterPlaylist": "Inserisci il nome della playlist" - }, - "label": { - "filter": "Filtra" - }, - "empty": { - "noPlaylists": "Non sono ancora state create playlist" - } + "header": { + "chooseInstance": "Scegli la tua istanza", + "failure": "Non ĆØ possibile connettersi all'URL dato", + "suggestions": "Scelte suggerite" }, - "Editor": { - "button": { - "addDuplicate": "Aggiungi comunque", - "clear": "Pulisci playlist", - "copy": "Copia la coda corrente in questa playlist", - "insertFromQueue": "Inserisci dalla coda ({ n } traccia) | Inserisci dalla coda ({ n } tracce)" - }, - "error": { - "sync": "Si ĆØ verificato un errore durante il salvataggio delle modifiche" - }, - "message": { - "sync": "Modifiche sincronizzate con il server" - }, - "modal": { - "clearPlaylist": { - "header": "Vuoi pulire la playlist \"{ playlist }\"?", - "content": { - "warning": "Questo cancellerĆ  tutte le tracce da questa lista di riproduzione e non puĆ² essere annullato." - } - } - }, - "help": { - "reorder": "Trascina e rilascia righe per riordinare le tracce nella playlist" - }, - "header": { - "editor": "Modifica lista di riproduzione" - }, - "warning": { - "duplicate": "Alcune tracce nella tua coda sono giĆ  presenti in questo elenco di riproduzione:" - }, - "loading": { - "sync": "Sincronizzando le modifiche con il serverā€¦" - } + "help": { + "notFunkwhaleServer": "L'indirizzo fornito non ĆØ quello di un server Funkwhale", + "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti.", + "serverDown": "Il server potrebbe essere caduto" }, - "TrackPlaylistIcon": { - "button": { - "add": "Aggiungi alla playlistā€¦" - } + "label": { + "url": "URL dell'istanza" }, - "Form": { - "header": { - "createPlaylist": "Crea una nuova lista di riproduzione", - "createSuccess": "Lista di riproduzione creata", - "updateSuccess": "Lista di riproduzione aggiornata", - "createFailure": "La lista di riproduzione non puĆ² essere creata" - }, - "button": { - "create": "Crea playlist", - "update": "Aggiorna lista di riproduzione" - }, - "placeholder": { - "name": "La mia eccezionale playlist" - }, - "label": { - "name": "Nome lista di riproduzione", - "visibility": "VisibilitĆ  lista di riproduzione" - } - }, - "Widget": { - "button": { - "create": "Crea Playlist", - "more": "Mostra altri" - }, - "placeholder": { - "noPlaylists": "Non sono ancora state create playlist" - } + "message": { + "currentConnection": "Attualmente sei connesso a { 0 }. Se continui, sarai disconnesso dalla tua istanza corrente e tutti i tuoi dati locali saranno eliminati.", + "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } ha accettato la tua richiesta di seguire la libreria \"{ library }\"", - "libraryFollow": "{ username } segue la tua libreria \"{ library }\"", - "libraryPendingFollow": "{ username } vuole seguire la tua libreria \"{ library }\"" + "ShortcutsModal": { + "button": { + "close": "Chiudi" + }, + "header": { + "modal": "Scorciatoie da tastiera" + }, + "shortcut": { + "audio": { + "clearQueue": "Svuota la coda", + "decreaseVolume": "Diminuisci volume", + "expandQueue": "Espandi coda/visualizzazione player", + "increaseVolume": "Aumenta volume", + "label": "Scorciatoie del lettore audio", + "playNext": "Riproduci traccia successiva", + "playPause": "Pausa/riproduci la traccia corrente", + "playPrevious": "Riproduci traccia precedente", + "seekBack30": "Salta indietro 30s", + "seekBack5": "Salta indietro 5s", + "seekForward30": "Salta avanti 30s", + "seekForward5": "Salta avanti 5s", + "shuffleQueue": "Mischia la tua coda", + "toggleFavorite": "Inverti preferito", + "toggleLoop": "Cambia tipo di riproduzione della coda", + "toggleMute": "Cambia muto" }, - "button": { - "approve": "Approva", - "markRead": "Segna come letta", - "markUnread": "Segna come non letta", - "reject": "Rifiuta" + "general": { + "focus": "Metti in primo piano la barra di ricerca", + "label": "Scorciatoie generali", + "show": "Mostra scorciatoie da tastiera disponibili", + "unfocus": "Togli il primo piano dalla barra di ricerca" } } }, "Sidebar": { + "header": { + "administration": "Amministrazione", + "explore": "Esplora", + "library": "La Mia Libreria", + "main": "Navigazione principale", + "more": "Altri" + }, + "label": { + "add": "Aggiungi contenuto", + "administration": "Amministrazione", + "edits": "Revisioni delle modifiche in sospeso", + "follows": "Richiesta di seguire in sospeso", + "language": "Lingua", + "main": "Menu principale", + "play": "Riproduci questa traccia", + "theme": "Tema" + }, "link": { "about": "A proposito di questa istanza", "albums": "Albums", @@ -1809,44 +314,1976 @@ "radios": "Radio", "search": "Cerca", "settings": "Impostazioni", + "switchInstance": "Cambia istanza", "users": "Utenti" - }, - "label": { - "add": "Aggiungi contenuto", - "administration": "Amministrazione", - "language": "Lingua", - "main": "Menu principale", - "follows": "Richiesta di seguire in sospeso", - "edits": "Revisioni delle modifiche in sospeso", - "play": "Riproduci questa traccia", - "theme": "Tema" - }, - "header": { - "administration": "Amministrazione", - "explore": "Esplora", - "main": "Navigazione principale", - "more": "Altri", - "library": "La Mia Libreria" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Salva" + }, + "header": { + "error": "Errore durante il salvataggio delle impostazioni", + "image": "Immagine attuale" + }, + "message": { + "success": "Impostazioni aggiornate con successo." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Aggiungi campo", + "edit": "Modifica modulo", + "preview": "Anteprima modulo" + }, + "help": { + "additionalFields": "Campi aggiuntivi da visualizzare nel modulo. Visualizzati solo se la convalida manuale delle iscrizioni ĆØ attiva.", + "helpText": "Testo opzionale da visualizzare all'inizio del modulo di iscrizione." + }, + "label": { + "additionalField": "Campo aggiuntivo", + "additionalFields": "Campi aggiuntivi", + "delete": "Elimina", + "helpText": "Suggerimento", + "moveDown": "Sposta giĆ¹", + "moveUp": "Sposta su" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Azioni", + "label": "Etichetta campo", + "required": "Richiesto", + "type": "Tipo campo" + }, + "required": { + "false": "No", + "true": "Si" + }, + "type": { + "long": "Testo lungo", + "short": "Testo breve" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Aggiornato il { date }" + }, + "ChannelEntries": { + "help": { + "subscribe": "Potresti aver bisogno di seguire questo canale per vedere il suo contenuto." + } + }, + "ChannelForm": { + "header": { + "error": "Errore durante il salvataggio del canale" + }, + "help": { + "discography": "Pubblica la musica che fai come una bella discografia di album e singoli.", + "podcast": "Carica i tuoi episodi e tieni aggiornata la tua community.", + "podcastFields": "Utilizzato per itunes:email e itunes:name field richiesto da alcune piattaforme come Spotify o iTunes.", + "username": "Utilizzato negli URL e per seguire questo canale nel Fediverso. Non puĆ² essere cambiato una volta impostato." + }, + "label": { + "category": "Categoria", + "description": "Descrizione", + "discography": "Discografia dell'artista", + "email": "Indirizzo email del proprietario", + "image": "Immagine del canale", + "language": "Lingua", + "name": "Nome", + "owner": "Nome proprietario", + "podcast": "Podcast", + "subcategory": "Sottocategoria", + "tags": "Tag", + "username": "Fediverso" + }, + "legend": { + "purpose": "Per cosa sarĆ  utilizzato questo canale?" + }, + "loader": { + "loading": "Caricamento" + }, + "placeholder": { + "name": "Nome del canale fantastico", + "username": "nomecanalefantastico" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodi" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Mostra altri" + }, + "help": { + "subscribe": "Potresti aver bisogno di seguire questo canale per vedere i suoi contenuti." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Mostra altri" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copia" + }, + "header": { + "preview": "Anteprima" + }, + "help": { + "anonymous": "Contatta i tuoi amministratori e chiedigli di cambiare l'impostazione corrispondente.", + "embed": "Copia/incolla questo codice nel tuo sito HTML", + "width": "Lascia vuoto per un widget adattivo" + }, + "label": { + "embed": "Incorpora codice", + "height": "Altezza del widget", + "width": "Larghezza del widget" + }, + "message": { + "copy": "Testo copiato negli appunti!" + }, + "warning": { + "anonymous": "La condivisione non funzionerĆ  perchĆØ questa istanza non permette agli utenti anonimi di accedere al contenuto." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Annulla richiesta di follow", + "follow": "Segui", + "unfollow": "Smetti di seguire" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Aggiungi alla playlistā€¦", + "addToQueue": "Aggiungi alla coda attuale", + "discretePlay": "Riproduci", + "episodeDetails": "Dettagli dell'episodio", + "hideArtist": "Nascondi contenuti di questo artista", + "playAlbum": "Riproduci album", + "playArtist": "Riproduci artista", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "playPlaylist": "Riproduci playlist", + "playTrack": "Riproduci traccia", + "playTracks": "Riproduci tracce", + "report": "Segnalaā€¦", + "startRadio": "Riproduci canzoni simili", + "trackDetails": "Dettagli sulla traccia" + }, + "title": { + "more": "Di piĆ¹ā€¦", + "unavailable": "Questa traccia non ĆØ disponibile in nessuna libreria alla quale hai accesso" + } + }, + "Player": { + "header": { + "player": "Player audio e controlli" + }, + "label": { + "addArtistContentFilter": "Nascondi contenuti di questo artistaā€¦", + "audioPlayer": "Riproduttore musicale", + "clearQueue": "Pulisci la tua coda", + "expandQueue": "Espandi coda", + "loopingDisabled": "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia.", + "loopingSingle": "Ripeti una singola traccia. Clicca per ripetere l'intera coda.", + "loopingWholeQueue": "Ripete l'intera coda. Clicca per disattivare la ripetizione.", + "mute": "Muto", + "nextTrack": "Prossima traccia", + "pause": "Pausa", + "play": "Riproduci", + "previousTrack": "Traccia precedente", + "shuffleQueue": "Mischia la tua coda", + "unmute": "Non silenziare" + }, + "meta": { + "position": "{ index } su { length }", + "unknownAlbum": "Album Sconosciuto", + "unknownArtist": "Artista Sconosciuto" + } + }, + "PlayerControls": { + "labels": { + "next": "Prossima traccia", + "pause": "Pausa", + "previous": "Traccia precedente" + } + }, + "Search": { + "empty": { + "noAlbums": "Nessun album corrisponde alla tua ricerca", + "noArtists": "Nessun artista corrisponde alla tua ricerca" + }, + "header": { + "albums": "Albums", + "artists": "Artisti", + "search": "Cerca un po' di musica" + }, + "placeholder": { + "search": "Artista, album, tracciaā€¦" + } + }, + "SearchBar": { + "empty": { + "noResults": "Spiacente, questa ricerca non ha restituito risultati" + }, + "header": { + "noResults": "Nessun risultato trovato" + }, + "label": { + "album": "Album", + "artist": "Artista", + "category": { + "federation": "Federazione", + "podcasts": "Podcast" + }, + "search": "Ricerca contenuti", + "tag": "Etichetta", + "track": "Traccia" + }, + "link": { + "fediverse": "Cerca sul fediverso", + "more": "Altri risultati šŸ”’", + "rss": "Iscriviti al podcast tramite RSS" + }, + "placeholder": { + "search": "Cerca per artisti, album, tracceā€¦" + } + }, + "VolumeControl": { + "button": { + "mute": "Muto", + "unmute": "Non silenziare" + }, + "label": { + "slider": "Regola volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostra le azioni per la traccia" + } + }, + "Modal": { + "button": { + "addToFavorites": "Aggiungi ai preferiti", + "addToPlaylist": "Aggiungi alla playlistā€¦", + "addToQueue": "Aggiungi alla coda", + "albumDetails": "Vedi album", + "artistDetails": "Vedi artisti", + "channelDetails": "Vedi canali", + "episodeDetails": "Dettagli dell'episodio", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "removeFromFavorites": "Rimuovi dai preferiti", + "seriesDetails": "Vedi serie", + "startRadio": "Riproduci radio", + "trackDetails": "Dettagli sulla traccia" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostra le azioni per la traccia" + } + }, + "Modal": { + "button": { + "addToFavorites": "Aggiungi ai preferiti", + "addToPlaylist": "Aggiungi alla playlistā€¦", + "addToQueue": "Aggiungi alla coda", + "albumDetails": "Vedi album", + "artistDetails": "Vedi artisti", + "channelDetails": "Vedi canali", + "episodeDetails": "Dettagli dell'episodio", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "removeFromFavorites": "Rimuovi dai preferiti", + "seriesDetails": "Vedi serie", + "startRadio": "Riproduci radio", + "trackDetails": "Dettagli sulla traccia" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artista", + "title": "Titolo" + } + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + }, + "empty": { + "noResults": "Nessun risultato" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Rigenera token" + }, + "header": { + "appDetails": "Dettagli dell'applicazione", + "appSecretWarning": "Conserva una copia di questo token in un luogo sicuro.", + "editApp": "Modifica applicazione" + }, + "help": { + "appDetails": "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." + }, + "label": { + "accessToken": "Token di accesso", + "appId": "ID Applicazione", + "appSecret": "Secret dell'applicazione" + }, + "link": { + "settings": "Torna alle impostazioni" + }, + "message": { + "appSecretWarning": "Non ti sarĆ  possibile vederlo di nuovo una volta lasciata questa schermata." + }, + "title": "Modifica applicazione" + }, + "ApplicationForm": { + "button": { + "create": "Crea applicazione", + "update": "Aggiorna applicazione" + }, + "header": { + "failure": "Non ĆØ stato possibile salvare le tue modifiche" + }, + "help": { + "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non ĆØ servita sul web." + }, + "label": { + "name": "Nome", + "redirectUri": "URI di redirezione", + "scopes": { + "description": "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori.", + "read": { + "description": "Accesso in sola lettura ai dati utente", + "label": "Lettura" + }, + "write": { + "description": "Accesso in sola-scrittura ai dati utente", + "label": "Scrivi" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Torna alle impostazioni" + }, + "title": "Crea una nuova applicazione" + }, + "Authorize": { + "button": { + "authorize": "Autorizza { app }" + }, + "header": { + "access": "{ app } vuole accedere al tuo account Funkwhale", + "allScopes": "Accesso completo", + "authorize": "Autorizza app di terze parti", + "authorizeFailure": "Errore durante l'autorizzazione dell'applicazione", + "fetchFailure": "Errore durante il recupero dei dati dell'applicazione", + "readOnly": "Sola lettura", + "writeOnly": "Sola-scrittura" + }, + "help": { + "copyCode": "Ti sarĆ  mostrato un codice da copiare-incollare nell'applicazione.", + "pasteCode": "Copia-incolla il codice seguente in questa applicazione:", + "redirect": "Sarai reindirizzato su { 0 }" + }, + "message": { + "unknownPermissions": "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" + }, + "title": "Permetti applicazione" + }, + "LoginForm": { + "button": { + "login": "Accedi" + }, + "header": { + "loginFailure": "Non riusciamo a farti accedere" + }, + "help": { + "approvalRequired": "Se ti sei registrato di recente potresti dover aspettare che il nostro team di moderazione controlli il tuo account o verificare la tua email.", + "invalidCredentials": "Per favore, controlla che la combinazione username/password sia corretta e assicurati di aver verificato il tuo indirizzo email." + }, + "label": { + "password": "Password", + "username": "Nome utente o indirizzo email" + }, + "link": { + "createAccount": "Crea un account", + "resetPassword": "Resetta la tua password" + }, + "message": { + "redirect": "Verrai rediretto su {domain} per autenticarti" + }, + "placeholder": { + "username": "Inserisci il tuo nome utente o indirizzo email" + } + }, + "Logout": { + "button": { + "logout": "Si, disconnettimi!" + }, + "header": { + "confirm": "Sei sicuro di volerti disconnettere?", + "unauthenticated": "Non hai ancora effettuato l'accesso" + }, + "link": { + "login": "Accedi!" + }, + "message": { + "loggedIn": "Sei attualmente connesso come { username }" + }, + "title": "Disconnetti" + }, + "Plugin": { + "button": { + "save": "Salva", + "scan": "Scansiona" + }, + "description": { + "library": "Libreria dove i file dovrebbero essere importati." + }, + "header": { + "failure": "Errore durante il salvataggio del plugin" + }, + "label": { + "library": "Libreria", + "pluginEnabled": "Abilitato" + }, + "link": { + "documentation": "Documentazione" + } + }, + "Settings": { + "button": { + "delete": "Elimina", + "deleteAccount": "Elimina il mio accountā€¦", + "deleteAccountConfirm": "Elimina il mio account", + "disableSubsonic": "Disabilita accesso", + "edit": "Modifica", + "password": "Cambia password", + "refresh": "Aggiorna", + "remove": "Rimuovi", + "removeApp": "Rimuovi applicazione", + "revoke": "Revoca", + "revokeAccess": "Revoca accesso", + "update": "Aggiorna", + "updateSettings": "Aggiorna impostazioni" + }, + "description": { + "authorizedApps": "Questa ĆØ la lista di applicazioni che hanno accesso ai dati del tuo account.", + "changeEmail": "Cambia l'indirizzo email associato al tuo account. Ti invieremo una conferma al nuovo indirizzo.", + "changePassword": { + "paragraph1": "Cambiando la tua password cambierĆ  anche la password della API Subsonic se ne hai richiesta una.", + "paragraph2": "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." + }, + "contentFilters": "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio.", + "deleteAccount": "Puoi eliminare permanentemente e irreversibilmente il tuo account e tutti i dati ad esso associati tramite il modulo qui sotto. Ti verrĆ  richiesta una conferma.", + "plugins": "Usa i plugin per estendere Funkwhale ed ottenere funzionalitĆ  aggiuntive.", + "yourApps": "Questa ĆØ la lista di applicazioni che hai registrato." + }, + "header": { + "accountFailure": "Non possiamo eliminare il tuo account", + "accountSettings": "Impostazioni dell'account", + "authorizedApps": "App autorizzate", + "avatar": "Avatar", + "avatarFailure": "La tua immagine di profilo non puĆ² essere salvata", + "changeEmail": "Cambia il mio indirizzo email", + "changePassword": "Cambia la mia password", + "contentFilters": "Filtri di contenuto", + "deleteAccount": "Elimina il mio account", + "emailFailure": "Non possiamo cambiare il tuo indirizzo email", + "hiddenArtists": "Artisti nascosti", + "noApps": "Non hai nessuna applicazione connessa al tuo account.", + "noPersonalApps": "Non hai ancora registrato nessuna applicazione.", + "passwordFailure": "La tua password non puĆ² essere cambiata", + "plugins": "Plugin", + "settingsUpdated": "Impostazioni aggiornate", + "updateFailure": "Le tue impostazioni non possono essere aggiornate", + "yourApps": "Le tue applicazioni" + }, + "help": { + "changePassword": "Per favore controlla se la tua password ĆØ corretta", + "noApps": "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui.", + "noPersonalApps": "Creane una per integrare Funkwhale con applicazioni di terze parti." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Password corrente", + "newEmail": "Nuovo indirizzo email", + "newPassword": "Nuova password", + "password": "Password" + }, + "link": { + "managePlugins": "Gestisci i plugin", + "newApp": "Registra una nuova applicazione" + }, + "message": { + "confirmDelete": "La tua richiesta di eliminazione ĆØ stata inviata, il tuo account e il suo contenuto saranno eliminati a breve", + "currentEmail": "Il tuo indirizzo email corrente ĆØ { email }." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Sarai disconnesso da questa sessione e dovrai accedere con una nuova", + "subsonic": "La tua password Subsonic sarĆ  cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic", + "warning": "Cambiare la tua password avrĆ  queste conseguenze:" + }, + "header": "Cambiare la tua password?" + }, + "deleteAccount": { + "content": { + "warning": "Questo ĆØ irreversibile e rimuoverĆ  permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." + }, + "header": "Vuoi eliminare il tuo account?" + }, + "deleteApp": { + "content": { + "warning": "Questo cancellerĆ  permanentemente l'applicazione e tutti i token associati." + }, + "header": "Rimuovere l'applicazione \"{ application }\"?" + }, + "revokeApp": { + "content": { + "warning": "Questo eviterĆ  a questa applicazione di accedere al servizio a tuo nome." + }, + "header": "Revoca accesso per l'applicazione \"{ application }\"?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data di creazione", + "name": "Nome" + } + }, + "authorizedApps": { + "header": { + "application": "Applicazione", + "permissions": "Permessi" + } + }, + "yourApps": { + "header": { + "application": "Applicazione", + "creationDate": "Data di creazione", + "scopes": "VisibilitĆ " + } + } + }, + "title": "Impostazioni dell'account", + "warning": { + "deleteAccount": "Il tuo account sarĆ  eliminato dai nostri servers in pochi minuti. Notificheremo anche gli altri server che potrebbero avere una copia di alcuni dei tuoi dati in modo che possano procedere all'eliminazione. Nota perĆ² che alcuni di questi server potrebbero essere offline o potrebbero rifiutarsi di procedere." + } + }, + "SignupForm": { + "button": { + "create": "Crea il mio account" + }, + "header": { + "login": "Accedi al tuo account Funkwhale", + "signupFailure": "Il tuo account non puĆ² essere creato." + }, + "label": { + "email": "Indirizzo email", + "invitation": "Codice d'invito", + "password": "Password", + "username": "Nome utente" + }, + "message": { + "accountCreated": "Il tuo account ĆØ stato creato con successo. Verifica la tua email prima di fare il login.", + "awaitingReview": "La richiesta di registrazione ĆØ stata inviata con successo. Sarai notificato tramite email quando il nostro team di moderazione avrĆ  verificato la tua richiesta.", + "registrationClosed": "Le registrazioni sono chiuse su questa istanza, ĆØ necessario un codice d'invito per registrarsi.", + "requiresReview": "Le iscrizioni su questa istanza sono aperte, ma sono revisionate dai moderatori prima di essere approvate." + }, + "placeholder": { + "email": "Inserisci il tuo indirizzo email", + "invitation": "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)", + "username": "Inserisci il tuo nome utente" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Disabilita accesso", + "confirmNewPassword": "Richiedi una password", + "disable": "Disabilita accesso Subsonic", + "newPassword": "Richiedi una nuova password" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale ĆØ compatibile con altri lettori musicali che supportano le Subsonic API.", + "paragraph2": "Puoi usarli per ascoltare le tue playlist e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio.", + "paragraph3": "Tuttavia, accedere a Funkwhale da quelle applicazioni richiede un'altra password che puoi impostare qui sotto." + } + }, + "header": { + "error": "Errore", + "subsonic": "Password API Subsonic" + }, + "label": { + "subsonicField": "La tua password per le API subsonic" + }, + "link": { + "apps": "Scopri come utilizzare Funkwhale attraverso altre app" + }, + "message": { + "accessDisabled": "Accesso disabilitato", + "passwordUpdated": "Password aggiornata", + "unavailable": "L'API Subsonic non ĆØ disponibile su questa istanza Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Questo disabiliterĆ  completamente l'accesso alla API Subsonic dagli account." + }, + "header": "Disabilitare l'accesso alle API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "Questo ti disconnetterĆ  dai dispositivi esistenti che utilizzano la password attuale." + }, + "header": "Richiedere una nuova password API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Errore durante la creazione" + }, + "label": { + "albumTitle": "Titolo" + } + }, + "AlbumModal": { + "button": { + "cancel": "Annulla", + "create": "Crea" + }, + "header": { + "newAlbum": "Nuovo album", + "newSeries": "Nuova serie" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Serie" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + }, + "option": { + "none": "Nessuno" + } + }, + "LicenseSelect": { + "label": { + "license": "Licenza" + }, + "link": { + "license": "A proposito di questa licenza" + }, + "option": { + "none": "Nessuno" + } + }, + "SubscribeButton": { + "help": { + "auth": "Per iscriverti a questo canale devi prima fare l'accesso" + }, + "title": { + "subscribe": "Iscriviti", + "unsubscribe": "Disiscriviti" + } + }, + "UploadForm": { + "button": { + "edit": "Modifica", + "ignore": "Ignora", + "remove": "Rimuovi", + "resume": "Riprendi", + "retry": "Riprova" + }, + "description": { + "extensions": "Estensioni supportate: { extensions }" + }, + "header": { + "error": "Errore durante la pubblicazione" + }, + "help": { + "license": "Aggiungi una licenza al file per garantire alcune libertĆ  al tuo pubblico." + }, + "label": { + "channel": "Canale", + "openBrowser": "Sfogliaā€¦" + }, + "message": { + "dragAndDrop": "Trascina qui i file da caricare oppure apri Esplora file", + "pending": "Hai alcune bozze di upload in attesa di pubblicazione." + }, + "status": { + "errored": "Errore", + "pending": "In sospeso", + "uploading": "Caricamento" + }, + "warning": { + "quota": "Non hai piĆ¹ spazio disponibile per caricare i tuoi file. Per piacere contatta i moderatori." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descrizione", + "image": "Immagine Traccia", + "position": "Posizione", + "tags": "Etichette", + "title": "Titolo" + } + }, + "UploadModal": { + "button": { + "cancel": "Annulla", + "close": "Chiudi", + "finishLater": "Finisci piĆ¹ tardi", + "next": "Prossimo passo", + "previous": "Passo precedente", + "publish": "Pubblica", + "update": "Aggiorna" + }, + "header": { + "processing": "Elaborazione file", + "publish": "Pubblica audio", + "uploadDetails": "Dettagli di caricamento", + "uploadFiles": "File da caricare" + }, + "meta": { + "files": "{ n } file | { n } file", + "quota": "Spazio di archiviazione rimanente:" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Tutto, { n } elemento, selezionato | Tutti gli { n } elementi selezionati", + "go": "Vai", + "launch": "Inizia", + "refresh": "Aggiorna tabella dei contenuti", + "select": "Seleziona", + "selectAll": "Seleziona tutti gli elementi", + "selectCurrentPage": "Seleziona solo la pagina attuale", + "selectElement": "Seleziona un elemento | Seleziona tutti e { n } gli elementi", + "selected": "{ n } su { total } selezionato | { n } su { total } selezionati" + }, + "header": { + "error": "Errore durante l'esecuzione dell'azione" + }, + "label": { + "actions": "Azioni", + "performAction": "Esegui azioni" + }, + "message": { + "needsRefresh": "Il contenuto ĆØ stato aggiornato, clicca aggiorna per visualizzare il contenuto aggiornato", + "success": "L'azione { action } ĆØ stata lanciata con successo su { n } elemento | L'azione { action } ĆØ stata lanciata con successo su { n } elementi" + }, + "modal": { + "performAction": { + "content": { + "warning": "Questo puĆ² coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se ĆØ proprio quello che vuoi." + }, + "header": "Vuoi eseguire { action } su { n } elemento? | Vuoi eseguire { action } su { n } elementi?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Rimuovi" + }, + "header": { + "failure": "Il tuo allegato non puĆ² essere salvato" + }, + "help": { + "upload": "PNG o JPG. Le dimensioni devono essere tra 1400x1400px e 3000x3000px. La dimensione massima consentita per il file ĆØ 5MB." + }, + "label": { + "upload": "Carica Nuova Immagineā€¦" + }, + "loader": { + "uploading": "Caricamento fileā€¦" + } + }, + "CollapseLink": { + "button": { + "collapse": "Riduci", + "expand": "Espandi" + } + }, + "ContentForm": { + "button": { + "preview": "Anteprima", + "write": "Scrivi" + }, + "empty": { + "noContent": "Nulla da visualizzare." + }, + "help": { + "markdown": "La sintassi Markdown ĆØ supportata." + }, + "placeholder": { + "input": "Scrivi alcune parole quiā€¦" + } + }, + "CopyInput": { + "button": { + "copy": "Copia" + }, + "message": { + "success": "Testo copiato negli appunti!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Annulla", + "confirm": "Conferma" + }, + "header": { + "confirm": "Vuoi confermare questa azione?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } h { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Aggiorna" + }, + "header": { + "noResults": "Nessun risultato trovato." + } + }, + "ExpandableDiv": { + "button": { + "less": "Mostra meno", + "more": "Mostra altri" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Pulisci" + }, + "label": { + "search": "Cerca" + }, + "placeholder": { + "search": "Cercaā€¦" + } + }, + "LoginModal": { + "description": { + "noAccess": "Non hai i permessi di accesso!" + }, + "header": { + "unauthenticated": "Non autenticato" + }, + "link": { + "login": "Accedi", + "signup": "Registrati" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Annulla", + "edit": "Modifica", + "less": "Mostra meno", + "more": "Mostra altri", + "update": "Aggiorna descrizione" + }, + "empty": { + "noDescription": "Nessuna descrizione disponibile" + }, + "header": { + "failure": "Errore durante l'aggiornamento della descrizione" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Lingua", + "shortcuts": "Scorciatoie da tastiera", + "theme": "Tema" + }, + "link": { + "about": "Informazioni", + "chat": "Chat", + "docs": "Documentazione", + "forum": "Forum", + "git": "Elenco problemi", + "login": "Accedi", + "logout": "Disconnetti", + "notifications": "Notifiche", + "profile": "Profilo", + "settings": "Impostazioni", + "signup": "Registrati", + "support": "Aiuto" + } + }, + "UserModal": { + "button": { + "switchInstance": "Usa un'altra istanza" + }, + "header": { + "options": "Opzioni" + }, + "label": { + "language": "Lingua", + "shortcuts": "Scorciatoie da tastiera", + "theme": "Tema" + }, + "link": { + "about": "Informazioni", + "chat": "Chat", + "docs": "Documentazione", + "forum": "Forum", + "git": "Elenco problemi", + "login": "Accedi", + "logout": "Disconnetti", + "notifications": "Notifiche", + "profile": "Profilo", + "settings": "Impostazioni", + "signup": "Registrati", + "support": "Aiuto" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Non sono ancora state aggiunte tracce ai tuoi preferiti" + }, + "header": { + "favorites": "{ n } preferito | { n } preferiti" + }, + "link": { + "library": "Sfoglia libreria" + }, + "loader": { + "loading": "Caricando i tuoi preferitiā€¦" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "title": "I Tuoi Preferiti" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Aggiungi ai preferiti", + "remove": "Rimuovi dai preferiti" + }, + "label": { + "inFavorites": "Nei preferiti" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Chiudi", + "reload": "Chiudi e ricarica pagina" + }, + "description": { + "failure": "Si ĆØ verificato un errore durante il tentativo di aggiornamento dei dati:", + "pending": "La richiesta di aggiornamento non ĆØ stata processata in tempo dal nostro server. SarĆ  processata piĆ¹ tardi.", + "skipped": "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale.", + "success": "I dati sono stati aggiornati con successo dal server remoto." + }, + "header": { + "failure": "Errore di aggiornamento", + "pending": "Aggiornamento in sospeso", + "refresh": "Sto aggiornando l'oggetto dal server remotoā€¦", + "saveFailure": "Errore durante il salvataggio delle impostazioni", + "skipped": "L'aggiornamento ĆØ stato rimandato", + "success": "Aggiornamento riuscito" + }, + "loader": { + "awaitingResult": "Aspettando i risultatiā€¦", + "fetchRequest": "Richiedendo un recuperoā€¦" + }, + "table": { + "error": { + "label": { + "detail": "Dettaglio dell'errore", + "type": "Tipo di errore" + }, + "value": { + "connectionError": "Impossibile connettersi al server remoto", + "httpError": "Si ĆØ verificato un errore HTTP durante il tentativo di contatto del server remoto", + "httpStatus": "Il server remoto ha risposto con il codice HTTP { status }", + "invalidAttributesError": "I dati riportati dal server remoto hanno attributi invalidi o mancanti", + "invalidJsonError": "Il server remoto ha risposto con dati JSON o JSON-LD non validi", + "timeoutError": "Il server remoto non ha risposto abbastanza velocemente", + "unknownError": "Errore sconosciuto" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Mostra altri" + }, + "empty": { + "noMatch": "Nessuna libreria corrispondente." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copia" + }, + "message": { + "copy": "Testo copiato negli appunti!" + }, + "title": "Mostra/nascondi password" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Aggiungi una descrizioneā€¦" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "Questo album ĆØ presente nelle seguenti librerie:" + }, + "header": { + "episodes": "Episodi", + "libraries": "Librerie dell'utente", + "tracks": "Tracce" + }, + "meta": { + "volume": "Volume { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Annulla", + "delete": "Eliminaā€¦", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di piĆ¹ā€¦" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "musicbrainz": "Vedi su MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "L'album sarĆ  rimosso, cosƬ come i file ad esso associati e i dati. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo album?" + }, + "embed": { + "header": "Incorpora questo album nel tuo sito web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Modifica questo album", + "suggest": "Suggerisci una modifica su questo album" + }, + "message": { + "remote": "Questo oggetto ĆØ gestito da un altro server, non puoi modificarlo." + } + }, + "Albums": { + "button": { + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato corrispondente alla tua ricerca" + }, + "header": { + "browse": "Sfogliando gli album" + }, + "label": { + "search": "Cerca", + "tags": "Etichette" + }, + "link": { + "addMusic": "Aggiungi musica" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Inserisci il titolo dell'albumā€¦" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Annulla", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di piĆ¹ā€¦", + "play": "Riproduci tutti gli album" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "musicbrainz": "Vedi su MusicBrainz", + "wikipedia": "Cerca su Wikipedia" + }, + "meta": { + "albums": "{ n } album | { n } album", + "tracks": "{ n } traccia in | { n } tracce in" + }, + "modal": { + "embed": { + "header": "Incorpora il lavoro di questo artista nel tuo sito web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Rimuovi filtro", + "more": "Carica di piĆ¹ā€¦" + }, + "description": { + "library": "Questo artista ĆØ presente nelle seguenti librerie:" + }, + "header": { + "album": "Album di questo artista", + "library": "Librerie dell'utente", + "track": "Nuove tracce di questo artista" + }, + "link": { + "filter": "Revisiona i miei filtri" + }, + "message": { + "filter": "Stai attualmente nascondendo i contenuti di questo artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Modifica questo artista", + "suggest": "Suggerisci una modifica su questo artista" + }, + "message": { + "remote": "Questo oggetto ĆØ gestito da un altro server, non puoi modificarlo." + } + }, + "Artists": { + "button": { + "search": "Cerca", + "upload": "Aggiungi musica" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando artisti" + }, + "label": { + "excludeCompilation": "Escludi gli artisti della compilation", + "search": "Nome dell'artista", + "tags": "Etichette" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Cercaā€¦" + }, + "title": "Artisti" + }, + "EditCard": { + "button": { + "approve": "Approva", + "delete": "Elimina", + "reject": "Rifiuta" + }, + "header": { + "modification": "Modifica { id }" + }, + "link": { + "track": "Traccia #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Il suggerimento sarĆ  completamente rimosso, questa azione ĆØ irreversibile." + }, + "delete": { + "header": "Eliminare questo suggerimento?" + } + }, + "status": { + "applied": "Approvata ed applicata", + "approved": "Approvato", + "pending": "Revisione in sospeso", + "rejected": "Rifiutato" + }, + "table": { + "update": { + "header": { + "field": "Campo", + "newValue": "Nuovo valore", + "oldValue": "Vecchio valore" + }, + "notApplicable": "N/D" + } + } + }, + "EditForm": { + "button": { + "cancel": "Annulla", + "clear": "Svuota", + "new": "Invia un'altra modifica", + "reset": "Ripristina al valore iniziale", + "showAll": "Mostra tutte le modifiche", + "showUnreviewed": "Restringi alle modifiche non revisionate", + "submit": "Invia e applica modifica", + "suggest": "Invia suggerimento" + }, + "empty": { + "suggestEdit": "Suggerisci una modifica utilizzando il modulo qui sotto." + }, + "header": { + "failure": "Errore durante l'invio della modifica", + "recentEdits": "Modifiche recenti", + "success": "La tua modifica ĆØ stata inviata correttamente.", + "unreviewed": "Modifiche recenti in attesa di revisione" + }, + "label": { + "summary": "Riassunto (opzionale)" + }, + "message": { + "noPermission": "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." + }, + "notApplicable": "N/D", + "placeholder": { + "summary": "Un breve riassunto che descrive le tue modifiche." + } + }, + "FileUpload": { + "button": { + "cancel": "Annulla", + "retry": "Riprova upload falliti" + }, + "description": { + "import": "Risultati della tua importazione:", + "previousImport": "Risultati della tua precedente importazione:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Errore durante l'avvio dell'importazione", + "local": "Importa musica dalla tua memoria locale", + "server": "Stato dell'importazione", + "status": "Stato dell'importazione" + }, + "label": { + "extensions": "Estensioni supportate: { extensions }", + "remainingSpace": "Spazio di archiviazione rimanente", + "uploadWidget": "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle" + }, + "link": { + "picard": "Ti consigliamo di utilizzare Picard per quello scopo.", + "processing": "Elaborazione", + "uploading": "Caricamento" + }, + "message": { + "local": { + "copyright": "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge", + "format": "I file musicali che stai caricando sono in formato OGG, Flac, MP3 o AIFF", + "message": "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:", + "tag": "I file musicali che stai caricando sono correttamente etichettati." + } + }, + "table": { + "upload": { + "header": { + "actions": "Azioni", + "filename": "Nome file", + "size": "Dimensione", + "status": "Stato" + }, + "status": { + "pending": "In sospeso", + "uploaded": "Caricato", + "uploading": "Caricamentoā€¦" + } + } + }, + "tooltip": { + "denied": "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota", + "extension": "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono { extensions }", + "network": "Si ĆØ verificato un errore di rete durante il caricamento del file", + "retry": "Riprova", + "size": "Impossibile caricare questo file, controlla che non sia troppo grande", + "timeout": "Caricamento scaduto, per favore riprova" + } + }, + "FsBrowser": { + "button": { + "import": "Importa" + } + }, + "FsLogs": { + "empty": { + "notStarted": "L'importazione non ĆØ ancora cominciata" + } + }, + "Home": { + "header": { + "newChannels": "Nuovi canali", + "playlists": "Playlist", + "recentlyAdded": "Aggiunte recentemente", + "recentlyFavorited": "Preferiti recenti", + "recentlyListened": "Ascoltate recentemente" + }, + "title": "Libreria" + }, + "ImportStatusModal": { + "button": { + "close": "Chiudi" + }, + "error": { + "importFailure": "Si ĆØ verificato un errore durante l'elaborazione del file. Sono disponibili dettagli qui sotto.", + "invalidMetadata": { + "label": "Metadati non validi", + "message": "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." + }, + "unknownError": { + "label": "Errore sconosciuto", + "message": "Si ĆØ verificato un errore sconosciuto" + } + }, + "header": { + "importDetail": "Dettaglio dell'importazione" + }, + "link": { + "documentation": "Leggi la nostra documentazione per questo errore", + "support": "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)" + }, + "message": { + "importDetail": "Il caricamento ĆØ ancora in corso e presto sarĆ  processato dal server.", + "importSuccess": "Il caricamento ĆØ stato processato con successo dal server." + }, + "table": { + "error": { + "debug": "Informazioni di debug", + "errorDetail": "Dettaglio dell'errore", + "errorType": "Tipo di errore", + "help": "Chiedi aiuto" + } + }, + "warning": { + "importSkipped": "Il caricamento ĆØ stato saltato perchĆØ uno simile ĆØ giĆ  disponibile in una delle tue librerie." + } + }, + "Podcasts": { + "button": { + "cancel": "Annulla", + "channel": "Crea un Canale", + "feed": "Iscriviti a un feed", + "search": "Cerca", + "subscribe": "Iscriviti" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Navigare i podcast" + }, + "label": { + "search": "Titolo del Podcast", + "tags": "Etichette" + }, + "modal": { + "subscription": { + "header": "Iscrizione" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Cercaā€¦" + }, + "title": "Podcast" + }, + "Radios": { + "button": { + "add": "Crea radio", + "create": "Crea la tua radio", + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando radio", + "instance": "Radio dell'istanza", + "user": "Radio dell'utente" + }, + "label": { + "search": "Cerca" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Inserisci un nome di una radioā€¦" + }, + "title": "Radio" + }, + "TagDetail": { + "header": { + "channels": "Canali", + "tracks": "Tracce" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "moderation": "Apri nell'interfaccia di moderazione" + } + }, + "TagSelector": { + "placeholder": { + "search": "Cercaā€¦" + } + }, + "TrackBase": { + "button": { + "cancel": "Annulla", + "delete": "Eliminaā€¦", + "download": "Scarica", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di piĆ¹ā€¦", + "play": "Riproduci" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "wikipedia": "Cerca su Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "La traccia sarĆ  rimossa, cosƬ come i relativi file e dati. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questa traccia?" + }, + "embed": { + "header": "Incorpora questa traccia nel tuo sito web" + } + }, + "title": "Traccia" + }, + "TrackDetail": { + "description": { + "library": "Questa traccia ĆØ presente nelle seguenti librerie:" + }, + "header": { + "episode": "Dettagli Episodio", + "library": "Librerie Correlate", + "playlists": "Playlist correlate", + "release": "Dettagli Rilascio", + "track": "Dettagli Traccia" + }, + "link": { + "musicbrainz": "Vedi su MusicBrainz" + }, + "notApplicable": "N/D", + "table": { + "release": { + "album": "Album", + "artist": "Artista", + "copyright": "Diritti d'autore", + "license": "Licenza", + "series": "Serie", + "url": "URL", + "year": "Anno" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Download", + "duration": "Durata", + "size": "Dimensione" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Modifica questa traccia", + "suggest": "Suggerisci una modifica su questa traccia" + }, + "message": { + "remote": "Questo oggetto ĆØ gestito da un altro server, non puoi modificarlo." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Aggiungi filtro", + "save": "Salva" + }, + "description": { + "builder": "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrĆ  tracce in accordo con i tuoi criteri." + }, + "header": { + "builder": "Crea", + "created": "Radio creata", + "matches": "{ n } traccia corrisponde ai filtri selezionati | { n } tracce corrispondono ai filtri selezionati", + "updated": "Radio aggiornata" + }, + "label": { + "description": "Descrizione", + "filter": "Aggiungi filtri per personalizzare la tua radio", + "name": "Nome radio", + "public": "Mostra pubblicamente" + }, + "option": { + "filter": "Seleziona un filtro" + }, + "placeholder": { + "description": "La mia stupenda descrizione", + "name": "La mia eccezionale radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data di accesso", - "account": "Account", - "creationDate": "Data di creazione", - "domain": "Dominio", - "importStatus": "Stato dell'importazione", - "library": "Libreria", - "name": "Nome", - "size": "Dimensione", - "visibility": "VisibilitĆ " + "actions": "Azioni", + "candidates": "Candidati", + "config": "Configurazione", + "exclude": "Escludi", + "name": "Filtra nome" } } }, + "title": "Creatore Radio" + }, + "Filter": { + "cancelButton": "Annulla", + "excludeLabel": "Escludi", + "matchingTracksModalHeader": "Tracce che corrispondono al filtro", + "removeButton": "Rimuovi" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoria", + "search": "Cerca" + }, + "link": { + "local": "Locale", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, nome, accountā€¦" + }, + "table": { + "channel": { + "header": { + "account": "Account", + "albums": "Albums", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "link": { + "local": "Locale", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "notApplicable": "N/D", + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, titolo, artista, ID MusicBrainzā€¦" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Titolo", + "releaseDate": "Data di rilascio", + "tracks": "Tracce" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." + } + }, + "label": { + "category": "Categoria", + "search": "Cerca" + }, + "link": { + "local": "Locale" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, nome, ID MusicBrainzā€¦" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "all": "Tutto", + "approved": "Approvato", + "pending": "Revisione in sospeso", + "rejected": "Rifiutato" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per account, informazioni, dominioā€¦" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione ĆØ irreversibile." + } + }, + "label": { + "search": "Cerca", + "visibility": "VisibilitĆ " + }, + "link": { + "local": "Locale" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, attore, nome, descrizioneā€¦" + }, + "table": { + "library": { + "header": { + "account": "Account", + "creationDate": "Data di creazione", + "domain": "Dominio", + "followers": "Seguito da", + "name": "Nome", + "uploads": "Caricamenti", + "visibility": "VisibilitĆ " + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Il tag selezionato sarĆ  rimosso e scollegato dai contenuti ad esso associati, se essi esistono. Questa azione ĆØ irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per nome" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artisti", + "creationDate": "Data di creazione", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "link": { + "local": "Locale" + }, + "notApplicable": "N/D", + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, titolo, artista, album, ID MusicBrainzā€¦" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artista", + "creationDate": "Data di creazione", + "domain": "Dominio", + "license": "Licenza", + "title": "Titolo" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Il caricamento selezionato sarĆ  rimosso. Questa azione ĆØ irreversibile." + } + }, + "label": { + "search": "Cerca", + "status": "Stato", + "visibility": "VisibilitĆ " + }, + "link": { + "local": "Locale" + }, + "notApplicable": "N/D", "option": { "all": "Tutto", "failed": "Fallito", @@ -1862,396 +2299,68 @@ }, "label": "Ordinamento" }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Il caricamento selezionato sarĆ  rimosso. Questa azione ĆØ irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca", - "status": "Stato", - "visibility": "VisibilitĆ " + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { "search": "Cerca per dominio, attore, nome, riferimento, sorgenteā€¦" }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data di accesso", "account": "Account", "creationDate": "Data di creazione", "domain": "Dominio", - "followers": "Seguito da", + "importStatus": "Stato dell'importazione", + "library": "Libreria", "name": "Nome", - "uploads": "Caricamenti", + "size": "Dimensione", "visibility": "VisibilitĆ " } } - }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione ĆØ irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "label": { - "search": "Cerca", - "visibility": "VisibilitĆ " - }, - "placeholder": { - "search": "Cerca per dominio, attore, nome, descrizioneā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artista", - "creationDate": "Data di creazione", - "domain": "Dominio", - "license": "Licenza", - "title": "Titolo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, titolo, artista, album, ID MusicBrainzā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "label": { - "category": "Categoria", - "search": "Cerca" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "placeholder": { - "search": "Cerca per dominio, nome, ID MusicBrainzā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artisti", - "creationDate": "Data di creazione", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Il tag selezionato sarĆ  rimosso e scollegato dai contenuti ad esso associati, se essi esistono. Questa azione ĆØ irreversibile." - } - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per nome" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Tutto", - "approved": "Approvato", - "pending": "Revisione in sospeso", - "rejected": "Rifiutato" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "placeholder": { - "search": "Cerca per account, informazioni, dominioā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - }, - "label": { - "status": "Stato" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Titolo", - "releaseDate": "Data di rilascio", - "tracks": "Tracce" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." - } - }, - "link": { - "local": "Locale", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, titolo, artista, ID MusicBrainzā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Account", - "domain": "Dominio", - "local": "Locale", - "owner": "Proprietario", - "type": "Tipo" - }, - "status": { - "assignedTo": "Assegnato a", - "internalNotes": "Note interne", - "resolutionDate": "Data di risoluzione", - "resolved": "Risolti", - "status": "Stato", - "unresolved": "Non risolto" - }, - "report": { - "category": "Categoria", - "creationDate": "Data di creazione", - "submittedBy": "Inviata da" + "AccountsTable": { + "action": { + "purge": { + "label": "Rimuovi" } }, - "header": { - "actions": "Azioni", - "notes": "Note interne", - "message": "Messaggio", - "reportedObject": "Oggetto segnalato" - }, - "button": { - "confirmDelete": "Elimina", - "delete": "Elimina oggetto segnalato", - "resolve": "Risolvi", - "unresolve": "Non risolto" - }, - "modal": { - "delete": { - "header": "Eliminare oggetto segnalato?", - "content": { - "warning": "Questo eliminerĆ  l'oggetto associato con questa segnalazione e la segnerĆ  come risolta. La cancellazione ĆØ irreversibile." - } - } - }, - "notApplicable": "N/D", - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "report": "Segnala { id }", - "publicPage": "Visualizza pagina pubblica" - }, - "warning": { - "objectDeleted": "L'oggetto associato a questa segnalazione ĆØ stato eliminato." - } - }, - "UserRequestCard": { - "header": { - "actions": "Azioni", - "notes": "Note interne", - "signup": "Messaggio" - }, - "button": { - "approve": "Approva", - "reject": "Rifiuta" - }, - "table": { - "status": { - "approved": "Approvato", - "assignedTo": "Assegnato a", - "internalNotes": "Note interne", - "pending": "In sospeso", - "refused": "Rifiutata", - "status": "Stato" - }, - "request": { - "creationDate": "Data di creazione", - "submittedBy": "Inviata da" - } - }, - "notApplicable": "N/D", - "link": { - "request": "Richiesta { id }" - }, - "message": { - "signup": "Questo utente vuole registrarsi alla tua istanza." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Aggiungi una nuova regola di moderazione", - "editRule": "Modifica regola di moderazione", - "failure": "Errore durante la creazione della regola" - }, "label": { - "blockAll": "Blocca tutto", - "policyDisabled": "Disabilitato", - "policyEnabled": "Abilitato", - "silenceActivity": "Silenzia attivitĆ ", - "silenceNotifications": "Silenzia notifiche", - "customizeRule": "O personalizza la tua regola", - "policyReason": "Motivo", - "rejectMedia": "Rifiuta media" + "search": "Cerca" }, - "tooltip": { - "blockAll": "Blocca tutto da questo account o dominio. Questo prevenirĆ  qualsiasi interazione con l'entitĆ , ed eliminerĆ  i relativi contenuti (caricamenti, librerie, richieste di seguire, ecc.)", - "rejectMedia": "Non scaricare nessun media (audio, copertina dell'album, avatar dell'accountā€¦) da questo account o dominio. Questo eliminerĆ  anche i contenuti giĆ  esistenti.", - "summary": "Spiega perchĆ© stai applicando questa regola: ti aiuterĆ  a ricordare il motivo per cui la hai aggiunta. In base alla configurazione della tua istanza, questa potrĆ  essere mostrata pubblicamente per aiutare gli utenti a capire le regole di moderazione in vigore.", - "silenceActivity": "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci.", - "silenceNotifications": "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci.", - "isActive": "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente." + "link": { + "local": "Account locale" }, - "button": { - "cancel": "Annulla", - "create": "Crea", - "delete": "Elimina", - "confirm": "Elimina regola di moderazione", - "update": "Aggiorna" + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" }, - "modal": { - "delete": { - "header": "Eliminare questa regola di moderazione?", - "content": { - "warning": "Questa azione ĆØ irreversibile." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Aggiungi nota" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { - "summary": "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questoā€¦" + "search": "Cerca per dominio, nome utente, descrizioneā€¦" }, - "header": { - "failure": "Errore durante l'invio della nota" + "table": { + "account": { + "header": { + "domain": "Dominio", + "firstSeen": "Visto per la prima volta", + "lastSeen": "Visto l'ultima volta", + "moderationRule": "Sotto regole di moderazione", + "name": "Nome", + "uploads": "Caricamenti" + }, + "moderationRule": "Si" + } } }, "DomainsTable": { @@ -2266,6 +2375,16 @@ "label": "Rimuovi dalla lista dei consentiti" } }, + "empty": { + "noPods": "Nessun altro pod trovato" + }, + "label": { + "inList": "ĆØ presente sulla lista dei consentiti", + "search": "Cerca" + }, + "link": { + "list": "Questo dominio ĆØ presente nella tua lista dei consentiti" + }, "option": { "all": "Tutto", "no": "No", @@ -2279,76 +2398,32 @@ }, "label": "Ordinamento" }, - "table": { - "domain": { - "header": { - "firstSeen": "Visto per la prima volta", - "name": "Nome", - "receivedMessages": "Messaggi ricevuti", - "moderationRule": "Sotto regole di moderazione", - "users": "Utenti" - }, - "moderationRule": "Si" - } - }, - "label": { - "inList": "ĆØ presente sulla lista dei consentiti", - "search": "Cerca" - }, - "empty": { - "noPods": "Nessun altro pod trovato" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { "search": "Cerca per nomeā€¦" }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - }, - "link": { - "list": "Questo dominio ĆØ presente nella tua lista dei consentiti" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Dominio", "firstSeen": "Visto per la prima volta", - "lastSeen": "Visto l'ultima volta", - "name": "Nome", "moderationRule": "Sotto regole di moderazione", - "uploads": "Caricamenti" + "name": "Nome", + "receivedMessages": "Messaggi ricevuti", + "users": "Utenti" }, "moderationRule": "Si" } - }, - "link": { - "local": "Account locale" - }, - "action": { - "purge": { - "label": "Rimuovi" - } - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, nome utente, descrizioneā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Modifica" + }, + "header": { + "rule": "Regola" + }, "label": { "blockAll": "Blocca tutto", "muteActivity": "Silenzia attivitĆ ", @@ -2356,15 +2431,49 @@ "reason": "Motivo", "rejectMedia": "Rifiuta media" }, - "button": { - "edit": "Modifica" - }, "status": { "enabled": "Abilitato", "paused": "In pausa" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina regola di moderazione", + "create": "Crea", + "delete": "Elimina", + "update": "Aggiorna" }, "header": { - "rule": "Regola" + "addRule": "Aggiungi una nuova regola di moderazione", + "editRule": "Modifica regola di moderazione", + "failure": "Errore durante la creazione della regola" + }, + "label": { + "blockAll": "Blocca tutto", + "customizeRule": "O personalizza la tua regola", + "policyDisabled": "Disabilitato", + "policyEnabled": "Abilitato", + "policyReason": "Motivo", + "rejectMedia": "Rifiuta media", + "silenceActivity": "Silenzia attivitĆ ", + "silenceNotifications": "Silenzia notifiche" + }, + "modal": { + "delete": { + "content": { + "warning": "Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questa regola di moderazione?" + } + }, + "tooltip": { + "blockAll": "Blocca tutto da questo account o dominio. Questo prevenirĆ  qualsiasi interazione con l'entitĆ , ed eliminerĆ  i relativi contenuti (caricamenti, librerie, richieste di seguire, ecc.)", + "isActive": "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente.", + "rejectMedia": "Non scaricare nessun media (audio, copertina dell'album, avatar dell'accountā€¦) da questo account o dominio. Questo eliminerĆ  anche i contenuti giĆ  esistenti.", + "silenceActivity": "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci.", + "silenceNotifications": "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci.", + "summary": "Spiega perchĆ© stai applicando questa regola: ti aiuterĆ  a ricordare il motivo per cui la hai aggiunta. In base alla configurazione della tua istanza, questa potrĆ  essere mostrata pubblicamente per aiutare gli utenti a capire le regole di moderazione in vigore." } }, "InstancePolicyModal": { @@ -2374,161 +2483,129 @@ }, "modal": { "manage": { - "header": "Gestisci regole di moderazione per { obj }", "content": { "warning": "Questa entitĆ  ĆØ soggetta a regole specifiche di moderazione" - } + }, + "header": "Gestisci regole di moderazione per { obj }" } } }, + "NoteForm": { + "button": { + "add": "Aggiungi nota" + }, + "header": { + "failure": "Errore durante l'invio della nota" + }, + "placeholder": { + "summary": "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questoā€¦" + } + }, "NotesThread": { "button": { "delete": "Elimina" }, "modal": { "delete": { - "header": "Eliminare questa nota?", "content": { "warning": "La nota sarĆ  rimossa. Questa azione ĆØ irreversibile." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Account", - "albums": "Albums", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Nome", - "tracks": "Tracce" + }, + "header": "Eliminare questa nota?" } } }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" + "ReportCard": { + "button": { + "confirmDelete": "Elimina", + "delete": "Elimina oggetto segnalato", + "resolve": "Risolvi", + "unresolve": "Non risolto" }, - "label": "Ordinamento" + "header": { + "actions": "Azioni", + "message": "Messaggio", + "notes": "Note interne", + "reportedObject": "Oggetto segnalato" + }, + "link": { + "moderation": "Apri nell'interfaccia di moderazione", + "publicPage": "Visualizza pagina pubblica", + "report": "Segnala { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Questo eliminerĆ  l'oggetto associato con questa segnalazione e la segnerĆ  come risolta. La cancellazione ĆØ irreversibile." + }, + "header": "Eliminare oggetto segnalato?" + } + }, + "notApplicable": "N/D", + "table": { + "object": { + "account": "Account", + "domain": "Dominio", + "local": "Locale", + "owner": "Proprietario", + "type": "Tipo" + }, + "report": { + "category": "Categoria", + "creationDate": "Data di creazione", + "submittedBy": "Inviata da" + }, + "status": { + "assignedTo": "Assegnato a", + "internalNotes": "Note interne", + "resolutionDate": "Data di risoluzione", + "resolved": "Risolti", + "status": "Stato", + "unresolved": "Non risolto" + } + }, + "warning": { + "objectDeleted": "L'oggetto associato a questa segnalazione ĆØ stato eliminato." + } }, - "label": { - "category": "Categoria", - "search": "Cerca" - }, - "link": { - "local": "Locale", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "placeholder": { - "search": "Cerca per dominio, nome, accountā€¦" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" + "UserRequestCard": { + "button": { + "approve": "Approva", + "reject": "Rifiuta" + }, + "header": { + "actions": "Azioni", + "notes": "Note interne", + "signup": "Messaggio" + }, + "link": { + "request": "Richiesta { id }" + }, + "message": { + "signup": "Questo utente vuole registrarsi alla tua istanza." + }, + "notApplicable": "N/D", + "table": { + "request": { + "creationDate": "Data di creazione", + "submittedBy": "Inviata da" + }, + "status": { + "approved": "Approvato", + "assignedTo": "Assegnato a", + "internalNotes": "Note interne", + "pending": "In sospeso", + "refused": "Rifiutata", + "status": "Stato" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Stato dell'account", - "email": "Email", - "lastActivity": "Ultima attivitĆ ", - "permissions": "Permessi", - "signup": "Registrati", - "status": "Stato", - "username": "Nome utente" - }, - "accountStatus": { - "active": "Attivo", - "inactive": "Inattivo" - }, - "status": { - "admin": "Amministratore", - "regular": "Utente semplice", - "staff": "Membro dello staff" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "permission": { - "library": "Libreria", - "moderation": "Moderazione", - "settings": "Impostazioni" - }, - "notApplicable": "N/D", - "placeholder": { - "search": "Cerca per nome utente, indirizzo e-mail, nomeā€¦" - }, - "pagination": { - "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Tutto", - "expired": "Scaduto/utilizzato", - "open": "Aperto" - }, - "table": { - "invitation": { - "header": { - "code": "Codice", - "creationDate": "Data di creazione", - "expirationDate": "Data di scadenza", - "owner": "Proprietario", - "status": "Stato" - } - } - }, - "action": { - "delete": "Elimina" - }, - "label": { - "expired": "Scaduto", - "unused": "Non utilizzato", - "search": "Cerca", - "status": "Stato", - "used": "Usati" - }, - "ordering": { - "label": "Ordinamento" - }, - "placeholder": { - "search": "Cerca per nome utente, indirizzo e-mail, codiceā€¦" - }, - "pagination": { - "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" - } - }, "InvitationForm": { "button": { "clear": "Pulisci", "new": "Ottieni un nuovo invito" }, - "table": { - "invitation": { - "header": { - "code": "Codice", - "link": "Condividi collegamento" - } - } - }, "header": { "failure": "Errore durante la creazione dell'invito" }, @@ -2537,523 +2614,59 @@ }, "placeholder": { "invitation": "Lascia vuoto per un codice casuale" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Azioni", - "label": "Etichetta campo", - "type": "Tipo campo", - "required": "Richiesto" - }, - "type": { - "long": "Testo lungo", - "short": "Testo breve" - }, - "required": { - "false": "No", - "true": "Si" - } - } - }, - "button": { - "add": "Aggiungi campo", - "edit": "Modifica modulo", - "preview": "Anteprima modulo" - }, - "label": { - "additionalField": "Campo aggiuntivo", - "additionalFields": "Campi aggiuntivi", - "delete": "Elimina", - "helpText": "Suggerimento", - "moveDown": "Sposta giĆ¹", - "moveUp": "Sposta su" - }, - "help": { - "additionalFields": "Campi aggiuntivi da visualizzare nel modulo. Visualizzati solo se la convalida manuale delle iscrizioni ĆØ attiva.", - "helpText": "Testo opzionale da visualizzare all'inizio del modulo di iscrizione." - } - }, - "SettingsGroup": { - "header": { - "image": "Immagine attuale", - "error": "Errore durante il salvataggio delle impostazioni" - }, - "button": { - "save": "Salva" - }, - "message": { - "success": "Impostazioni aggiornate con successo." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Tutto" - }, - "label": { - "category": "Categoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione.", - "modal": "Vuoi segnalare questo oggetto?", - "submissionFailure": "Errore durante l'invio della segnalazione" - }, - "button": { - "cancel": "Annulla", - "submit": "Invia segnalazione" - }, - "label": { - "email": "Email", - "forwardToDomain": "Inoltra a { domain}", - "message": "Messaggio" - }, - "description": { - "forwardToDomain": "Inoltra una copia anonima della segnalazione al server che ospita questo elemento.", - "message": "Usa questo campo per fornire contesto aggiuntivo al moderatore che gestirĆ  la tua segnalazione.", - "modal": "Usa questo modulo per inviare una segnalazione al nostro team di moderazione.", - "email": "Utilizzeremo questo indirizzo email qualora avessimo bisogno di contattarti per questa segnalazione." - }, - "message": { - "submissionSuccess": "Segnalazione inviata con successo, grazie" - } - }, - "FilterModal": { - "button": { - "cancel": "Annulla", - "hide": "Nascondi contenuto" - }, - "message": { - "success": "Filtro di contenuto aggiunto con successo" - }, - "header": { - "modal": "Vuoi nascondere i contenuti dell'artista \"{ name }\"?", - "failure": "Errore durante la creazione del filtro" - }, - "warning": { - "createFilter": { - "listItem2": "Nel widget \"Aggiunti recentemente\"", - "listItem3": "Negli elenchi di artisti ed album", - "listItem1": "Nei preferiti di altri utenti e nella cronologia di ascolto", - "listItem4": "Nei suggerimenti radio", - "listIntro": "Non vedrai tracce, album e attivitĆ  dell'utente collegate a questo artista in futuro:" - } - }, - "help": { - "createFilter": "Puoi gestire ed modificare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Si ĆØ verificato un errore durante il tentativo di aggiornamento dei dati:", - "success": "I dati sono stati aggiornati con successo dal server remoto.", - "pending": "La richiesta di aggiornamento non ĆØ stata processata in tempo dal nostro server. SarĆ  processata piĆ¹ tardi.", - "skipped": "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Si ĆØ verificato un errore HTTP durante il tentativo di contatto del server remoto", - "invalidAttributesError": "I dati riportati dal server remoto hanno attributi invalidi o mancanti", - "connectionError": "Impossibile connettersi al server remoto", - "httpStatus": "Il server remoto ha risposto con il codice HTTP { status }", - "timeoutError": "Il server remoto non ha risposto abbastanza velocemente", - "invalidJsonError": "Il server remoto ha risposto con dati JSON o JSON-LD non validi", - "unknownError": "Errore sconosciuto" - }, - "label": { - "detail": "Dettaglio dell'errore", - "type": "Tipo di errore" - } - } - }, - "button": { - "close": "Chiudi", - "reload": "Chiudi e ricarica pagina" - }, - "header": { - "saveFailure": "Errore durante il salvataggio delle impostazioni", - "failure": "Errore di aggiornamento", - "pending": "Aggiornamento in sospeso", - "success": "Aggiornamento riuscito", - "skipped": "L'aggiornamento ĆØ stato rimandato", - "refresh": "Sto aggiornando l'oggetto dal server remotoā€¦" - }, - "loader": { - "fetchRequest": "Richiedendo un recuperoā€¦", - "awaitingResult": "Aspettando i risultatiā€¦" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Nessuna libreria corrispondente." - }, - "button": { - "showMore": "Mostra altri" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Scorciatoie del lettore audio", - "clearQueue": "Svuota la coda", - "decreaseVolume": "Diminuisci volume", - "expandQueue": "Espandi coda/visualizzazione player", - "increaseVolume": "Aumenta volume", - "playPause": "Pausa/riproduci la traccia corrente", - "playNext": "Riproduci traccia successiva", - "playPrevious": "Riproduci traccia precedente", - "seekBack30": "Salta indietro 30s", - "seekBack5": "Salta indietro 5s", - "seekForward30": "Salta avanti 30s", - "seekForward5": "Salta avanti 5s", - "shuffleQueue": "Mischia la tua coda", - "toggleFavorite": "Inverti preferito", - "toggleMute": "Cambia muto", - "toggleLoop": "Cambia tipo di riproduzione della coda" - }, - "general": { - "focus": "Metti in primo piano la barra di ricerca", - "label": "Scorciatoie generali", - "show": "Mostra scorciatoie da tastiera disponibili", - "unfocus": "Togli il primo piano dalla barra di ricerca" - } - }, - "button": { - "close": "Chiudi" - }, - "header": { - "modal": "Scorciatoie da tastiera" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Annulla", - "submit": "Invia" - }, - "header": { - "chooseInstance": "Scegli la tua istanza", - "failure": "Non ĆØ possibile connettersi all'URL dato", - "suggestions": "Scelte suggerite" - }, - "label": { - "url": "URL dell'istanza" - }, - "help": { - "notFunkwhaleServer": "L'indirizzo fornito non ĆØ quello di un server Funkwhale", - "serverDown": "Il server potrebbe essere caduto", - "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti." - }, - "message": { - "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" - } - }, - "Queue": { - "button": { - "clear": "Svuota", - "close": "Chiudi", - "stopRadio": "Ferma radio" - }, - "label": { - "duration": "Durata", - "addArtistContentFilter": "Nascondi contenuti di questo artistaā€¦", - "next": "Prossima traccia", - "pause": "Pausa", - "play": "Riproduci", - "previous": "Traccia precedente", - "queue": "Coda", - "remove": "Rimuovi", - "restart": "Riavvia traccia" - }, - "message": { - "radio": "Le nuove tracce saranno allegate qui automaticamente.", - "automaticPlay": "La traccia seguente verrĆ  riprodotta automaticamente tra pochi secondiā€¦" - }, - "header": { - "failure": "La traccia non puĆ² essere caricata", - "radio": "Hai una radio in riproduzione" - }, - "meta": { - "queuePosition": "Traccia { index } su { length }" - }, - "warning": { - "connectivity": "Potresti avere un problema di connettivitĆ ." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copia" - }, - "title": "Mostra/nascondi password", - "message": { - "copy": "Testo copiato negli appunti!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Modifica" - } - }, - "Button": { - "startRadio": "Riproduci radio", - "stopRadio": "Ferma radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Errore durante il recupero dell'oggetto" - }, - "button": { - "fediverse": "Fediverso", - "rss": "RSS", - "search": "Cerca" - }, - "label": { - "fediverse": { - "fieldLabel": "Fediverso", - "title": "Iscriviti ad un podcast condiviso sul Fediverso" - }, - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml", - "fieldLabel": "Indirizzo del feed RSS", - "title": "Iscriviti al feed RSS di un podcast" - } - }, - "warning": { - "unsupported": "Questo tipo di oggetto non ĆØ ancora supportato" - }, - "error": { - "fetchFailed": "Questo oggetto non puĆ² essere recuperato" - }, - "description": { - "fediverse": "Usa questo modulo per recuperare un oggetto ospitato da qualche altra parte nel Fediverso.", - "rss": "Usa questo modulo per iscriverti a un feed RSS dall'URL relativo." - } - }, - "PageNotFound": { - "link": { - "home": "Vai alla pagina iniziale" - }, - "title": "Pagina Non Trovata", - "header": { - "pageNotFound": "Pagina non trovata!" - }, - "message": { - "pageNotFound": "Ci dispiace, la pagina che hai richiesto non esiste:" - } - }, - "vui": { - "Pagination": { - "next": "Pagina Successiva", - "label": "Impaginazione", - "previous": "Pagina Precedente" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostra 1 altro tag | Mostra { n } altri tag" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "listenings": "{ n } ascolto | { n } ascolti", - "subscribers": "{ n } iscritto | { n } iscritti", - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "channelEpisodes": "Tutti gli Episodi", - "mirrored": "Mirror da { dominio }", - "moderation": "Apri nell'interfaccia di moderazione", - "channelOverview": "Panoramica", - "channelTracks": "Tracce", - "domainView": "Visualizza su { dominio }" - }, - "header": { - "artistChannel": "Canale dell'artista", - "podcastChannel": "Canale podcast" - }, - "button": { - "cancel": "Annulla", - "confirm": "Elimina", - "delete": "Eliminaā€¦", - "edit": "Modificaā€¦", - "embed": "Incorpora", - "play": "Riproduci", - "updateChannel": "Aggiorna canale", - "upload": "Carica" - }, - "title": "Canale", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copia-incolla il seguente url nella tua app di podcasting preferita:" - }, - "header": "Iscriviti via RSS" - }, - "fediverse": { - "content": { - "help": "Se stai usando Mastodon o altre applicazioni per il fediverso, puoi iscriverti a questo account:" - }, - "header": "Iscriviti sul Fediverso" - }, - "funkwhale": { - "header": "Iscriviti su Funkwhale" - }, - "header": "Iscriviti a questo canale" }, - "delete": { - "header": "Eliminare questo Canale?", - "content": { - "warning": "Il canale sarĆ  rimosso, cosƬ come i file ad esso associati e i dati. Questa azione ĆØ irreversibile." - } - }, - "embed": { - "header": "Incorpora il lavoro di questo artista nel tuo sito web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Aggiungi nuovo", - "erroredUploads": "Visualizza caricamenti falliti", - "skippedUploads": "Visualizza caricamenti saltati" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Ultimi episodi", - "latestTracks": "Ultime tracce", - "series": "Serie", - "uploadsFailure": "Non ĆØ stato possibile pubblicare alcuni file", - "uploadsProcessing": "I file caricati stanno venendo elaborati", - "uploadsSuccess": "Upload pubblicati con successo" - }, - "meta": { - "progress": "File processati:" - }, - "message": { - "processing": "I file caricati stanno venendo elaborati da Funkwhale e saranno pubblicati a breve." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Aggiungi nuovo" - }, - "button": { - "cancel": "Annulla", - "subscribe": "Iscriviti" - }, - "placeholder": { - "search": "Filtra per nomeā€¦" - }, - "title": "Canali a cui sei iscritto", - "modal": { - "subscription": { - "header": "Iscrizione" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "details": "Dettagli Libreria" - }, - "label": { - "size": "Dimensione totale dei file in questa libreria" - }, - "button": { - "upload": "Carica" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } usato su { max } consentito", - "errored": "File con errore", - "pending": "File in sospeso", - "skipped": "File saltati" - }, - "header": { - "currentUsage": "Utilizzo attuale" - }, - "loading": { - "currentUsage": "Caricando i dati di utilizzoā€¦" - }, - "button": { - "purge": "Rimuovi" - }, - "modal": { - "purgeErrored": { - "header": "Rimuovere file con errori?", - "content": { - "description": "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." - } - }, - "purgePending": { - "header": "Rimuovere file in attesa?", - "content": { - "description": "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." - } - }, - "purgeSkipped": { - "header": "Rimuovere file saltati?", - "content": { - "description": "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." - } - } - }, - "link": { - "viewFiles": "Vedi files" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artista", - "duration": "Durata", - "importStatus": "Stato dell'importazione", - "size": "Dimensione", - "title": "Titolo", - "uploadDate": "Data di caricamento" + "code": "Codice", + "link": "Condividi collegamento" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Elimina" + }, + "label": { + "expired": "Scaduto", + "search": "Cerca", + "status": "Stato", + "unused": "Non utilizzato", + "used": "Usati" }, "option": { - "status": { - "all": "Tutto", - "draft": "Bozza", - "failed": "Fallito", - "finished": "Finito", - "pending": "In sospeso", - "skipped": "Saltato" - } + "all": "Tutto", + "expired": "Scaduto/utilizzato", + "open": "Aperto" }, + "ordering": { + "label": "Ordinamento" + }, + "pagination": { + "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" + }, + "placeholder": { + "search": "Cerca per nome utente, indirizzo e-mail, codiceā€¦" + }, + "table": { + "invitation": { + "header": { + "code": "Codice", + "creationDate": "Data di creazione", + "expirationDate": "Data di scadenza", + "owner": "Proprietario", + "status": "Stato", + "user": "Utente" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Cerca" + }, + "notApplicable": "N/D", "ordering": { "direction": { "ascending": "Crescente", @@ -3062,397 +2675,550 @@ }, "label": "Ordinamento" }, - "action": { - "delete": "Elimina", - "restartImport": "Riavvia importazione" + "pagination": { + "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" }, - "label": { - "importStatus": "Stato dell'importazione", - "search": "Cerca" - }, - "notApplicable": "N/D", - "empty": { - "noTracks": "Non sono ancora state aggiunte tracce a questa libreria" + "permission": { + "library": "Libreria", + "moderation": "Moderazione", + "settings": "Impostazioni" }, "placeholder": { - "search": "Cerca per titolo, artista, albumā€¦" + "search": "Cerca per nome utente, indirizzo e-mail, nomeā€¦" }, - "button": { - "showStatus": "Mostra informazioni sullo stato di caricamento di questa traccia" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crea una nuova libreria" - }, - "loading": { - "libraries": "Caricando le Librerieā€¦" - }, - "empty": { - "noLibrary": "Sembra che tu non abbia ancora nessuna libreria, ĆØ tempo di crearne una." - }, - "header": { - "libraries": "Le mie librerie" - } - }, - "Form": { - "button": { - "create": "Crea libreria", - "delete": "Elimina", - "confirm": "Elimina libreria", - "update": "Aggiorna libreria" - }, - "modal": { - "delete": { - "header": "Eliminare questa libreria?", - "content": { - "warning": "La libreria e tutte le sue tracce saranno eliminate. Questa azione ĆØ irreversibile." + "table": { + "user": { + "accountStatus": { + "active": "Attivo", + "inactive": "Inattivo" + }, + "header": { + "accountStatus": "Stato dell'account", + "email": "Email", + "lastActivity": "Ultima attivitĆ ", + "permissions": "Permessi", + "signup": "Registrati", + "status": "Stato", + "username": "Nome utente" + }, + "status": { + "admin": "Amministratore", + "regular": "Utente semplice", + "staff": "Membro dello staff" } } - }, - "label": { - "description": "Descrizione", - "name": "Nome", - "visibility": "VisibilitĆ " - }, - "header": { - "failure": "Errore" - }, - "description": { - "library": "Le librerie sono di aiuto per organizzare e condividere la tua collezione musicale. Puoi caricare la tua musica su Funkwhale e condividerla con amici e parenti.", - "visibility": "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilitĆ ." - }, - "message": { - "libraryCreated": "Libreria creata", - "libraryDeleted": "Libreria eliminata", - "libraryUpdated": "Libreria aggiornata" - }, - "placeholder": { - "name": "La mia eccezionale libreria", - "description": "Questa libreria contiene la mia musica personale, spero vi piaccia." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce", - "failedTracks": "Tracce con errore:", - "lastUpdate": "Ultimo aggiornamento:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." - }, - "header": "Smettere di seguire questa libreria?" - } - }, - "button": { - "cancel": "Annulla richiesta di seguire", - "follow": "Segui", - "pending": "Richiesta di seguire in attesa di approvazione", - "unfollow": "Smetti di seguire" - }, - "link": { - "scanDetails": "Dettagli", - "scan": "Scansiona ora" - }, - "label": { - "scanFailure": "Errore durante la scansione", - "scanPending": "Scansione in sospeso", - "scanSuccess": "Scansionata", - "scanPartialSuccess": "Scansione eseguita con errori", - "scanProgress": "Scansionandoā€¦ ({ progress }%)", - "sharingLink": "Condividi collegamento" - }, - "message": { - "scanLaunched": "Scansione avviata", - "scanSkipped": "Scansione saltata (la scansione precedente ĆØ troppo recente)" - }, - "tooltip": { - "private": "Questa libreria ĆØ privata e la tua approvazione dal suo proprietario ĆØ necessaria per accedere al suo contenuto", - "public": "Questa libreria ĆØ pubblica e tu puoi accedere al suo contenuto liberamente" - } - }, - "ScanForm": { - "header": { - "failure": "Non ĆØ stato possibile recuperare la libreria remota" - }, - "placeholder": { - "url": "Inserisci l'URL di una libreria" - }, - "label": { - "search": "Cerca una libreria remota" - }, - "button": { - "submit": "Invia ricerca" - } - }, - "Home": { - "header": { - "knownLibraries": "Librerie conosciute", - "remoteLibraries": "Librerie remote" - }, - "loading": { - "remoteLibraries": "Caricando le librerie remoteā€¦" - }, - "button": { - "refresh": "Aggiorna" - }, - "description": { - "remoteLibraries": "Le librerie remote sono di proprietĆ  di altri utenti nella rete. Puoi accedervi se sono pubbliche o se ti ĆØ stato dato l'accesso ad esse." - } - } - }, - "Home": { - "title": "Aggiungi e gestisci contenuti", - "description": { - "follow": "Segui librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiedono l'approvazione del loro proprietario.", - "channel": { - "1": "Se sei un musicista o un podcaster, i canali sono pensati per te!", - "2": "Condividi le tue opere pubblicamente e ottieni iscritti su Funkwhale, il Fediverso o qualsiasi applicazione di podcasting." - }, - "upload": "Carica la tua libreria musicale personale su Funkwhale per ascoltarla da ovunque e condividerla con amici e famiglia." - }, - "header": { - "follow": "Segui librerie remote", - "channel": "Pubblica le tue opere in un canale", - "upload": "Carica contenuto di terze parti in una libreria" - }, - "button": { - "start": "Per iniziare" - }, - "help": { - "uploadQuota": "Questa istanza offre fino a {quota} di spazio di archiviazione per ogni utente." - } - }, - "Base": { - "title": "Aggiungi contenuto", - "link": { - "libraries": "Librerie", - "tracks": "Tracce" - }, - "menu": { - "secondary": "Menu secondario" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "moderation": "Apri nell'interfaccia di moderazione", - "owner": "ProprietĆ  di { username }", - "tracks": "Tracce", - "domain": "Visualizza su { dominio }" - }, - "button": { - "edit": "Modifica", - "upload": "Carica" - }, - "title": "Libreria", - "label": { - "private": "Privato", - "public": "Pubblico", - "instance": "Ristretto", - "sharingLink": "Condividi collegamento" - }, - "description": { - "sharingLink": "Condividi questo link con altri utenti in modo che possano richiedere l'accesso alla tua libreria incollandolo nella barra di ricerca della loro istanza." - }, - "tooltip": { - "private": "Questa libreria ĆØ privata e la tua approvazione dal suo proprietario ĆØ necessaria per accedere al suo contenuto", - "public": "Questa libreria ĆØ pubblica e tu puoi accedere al suo contenuto liberamente", - "instance": "Questa libreria ĆØ ristretta agli utenti di questa istanza" - } - }, - "Edit": { - "button": { - "accept": "Accetta", - "reject": "Rifiuta" - }, - "table": { - "action": { - "status": { - "accepted": "Accettato", - "pending": "Approvazione in sospeso", - "rejected": "Rifiutato" - }, - "header": { - "action": "Azione", - "date": "Data", - "status": "Stato", - "user": "Utente" - } - } - }, - "header": { - "followers": "Seguito da", - "libraryContents": "Contenuto della libreria" - }, - "loading": { - "followers": "Caricando la lista di chi ti segueā€¦" - }, - "empty": { - "noFollowers": "Nessuno segue questa libreria" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Questa libreria ĆØ vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - }, - "DetailOverview": { - "empty": { - "upload": "Questa libreria ĆØ vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - }, - "DetailTracks": { - "empty": { - "upload": "Questa libreria ĆØ vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Profilo di { username }", - "link": { - "activity": "AttivitĆ ", - "moderation": "Apri nell'interfaccia di moderazione", - "overview": "Panoramica", - "domainView": "Visualizza su { dominio }" - }, - "label": { - "self": "Questo sei tu!" - } - }, - "PasswordReset": { - "label": { - "email": "Indirizzo email dell'account" - }, - "button": { - "requestReset": "Chiedi un reset della password" - }, - "link": { - "back": "Torna alla pagina di accesso" - }, - "placeholder": { - "email": "Inserisci l'indirizzo email collegato al tuo account" - }, - "header": { - "failure": "Errore durante la richiesta di un reset della password", - "reset": "Resetta la tua password" - }, - "title": "Resetta la tua password", - "help": { - "form": "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Aggiungi nuovo" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Canale dell'artista" - }, - "header": "Crea canale", - "podcast": { - "header": "Canale podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Annulla", - "createChannel": "Crea canale", - "next": "Prossimo passo", - "previous": "Passo precedente" + "hide": "Nascondi contenuto" }, "header": { - "channels": "Canali", - "sharedLibraries": "Questo utente ha condiviso le seguenti librerie", - "libraries": "Librerie dell'Utente" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Torna alla pagina di accesso", - "login": "Procedi all'accesso" + "failure": "Errore durante la creazione del filtro", + "modal": "Vuoi nascondere i contenuti dell'artista \"{ name }\"?" }, - "title": "Cambia la tua password", - "header": { - "failure": "Errore durante la modifica della password", - "success": "Password aggiornata con successo" + "help": { + "createFilter": "Puoi gestire ed modificare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." }, "message": { - "requestSent": "Se l'indirizzo email fornito nel passo precedente ĆØ valido e collegato a un account utente, dovresti ricevere un'email con le istruzioni per il reset nei prossimi minuti.", - "success": "La tua password ĆØ stata aggiornata con successo." + "success": "Filtro di contenuto aggiunto con successo" }, + "warning": { + "createFilter": { + "listIntro": "Non vedrai tracce, album e attivitĆ  dell'utente collegate a questo artista in futuro:", + "listItem1": "Nei preferiti di altri utenti e nella cronologia di ascolto", + "listItem2": "Nel widget \"Aggiunti recentemente\"", + "listItem3": "Negli elenchi di artisti ed album", + "listItem4": "Nei suggerimenti radio" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Nuova password" + "category": "Categoria" }, + "option": { + "all": "Tutto" + } + }, + "ReportModal": { "button": { - "update": "Aggiorna la tua password" - } - }, - "EmailConfirm": { - "title": "Conferma il tuo indirizzo e-mail", - "label": { - "confirmationCode": "Codice di conferma" + "cancel": "Annulla", + "submit": "Invia segnalazione" + }, + "description": { + "email": "Utilizzeremo questo indirizzo email qualora avessimo bisogno di contattarti per questa segnalazione.", + "forwardToDomain": "Inoltra una copia anonima della segnalazione al server che ospita questo elemento.", + "message": "Usa questo campo per fornire contesto aggiuntivo al moderatore che gestirĆ  la tua segnalazione.", + "modal": "Usa questo modulo per inviare una segnalazione al nostro team di moderazione." }, "header": { - "failure": "Non ĆØ stato possibile confermare il tuo indirizzo e-mail", - "success": "Indirizzo e-mail confermato" + "disabled": "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione.", + "modal": "Vuoi segnalare questo oggetto?", + "submissionFailure": "Errore durante l'invio della segnalazione" }, - "link": { - "login": "Procedi all'accesso", - "back": "Torna alla pagina di accesso" + "label": { + "email": "Email", + "forwardToDomain": "Inoltra a { domain}", + "message": "Messaggio" }, "message": { - "success": "Ora puoi usare il servizio senza limitazioni." - } - }, - "Signup": { - "header": { - "createAccount": "Crea un account su Funkwhale" - }, - "title": "Registrati" - }, - "Login": { - "title": "Accedi", - "header": { - "login": "Accedi al tuo account Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Accesso in corsoā€¦" - } - }, - "Plugins": { - "title": "Gestisci i plugin" - }, - "ProfileActivity": { - "header": { - "playlists": "Playlist", - "recentlyFavorited": "Preferiti recenti", - "recentlyListened": "Ascoltate recentemente" + "submissionSuccess": "Segnalazione inviata con successo, grazie" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Approva", + "markRead": "Segna come letta", + "markUnread": "Segna come non letta", + "reject": "Rifiuta" + }, + "message": { + "libraryAcceptFollow": "{ username } ha accettato la tua richiesta di seguire la libreria \"{ library }\"", + "libraryFollow": "{ username } segue la tua libreria \"{ library }\"", + "libraryPendingFollow": "{ username } vuole seguire la tua libreria \"{ library }\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Editor": { + "button": { + "addDuplicate": "Aggiungi comunque", + "clear": "Pulisci playlist", + "copy": "Copia la coda corrente in questa playlist", + "insertFromQueue": "Inserisci dalla coda ({ n } traccia) | Inserisci dalla coda ({ n } tracce)" + }, + "error": { + "sync": "Si ĆØ verificato un errore durante il salvataggio delle modifiche" + }, + "header": { + "editor": "Modifica lista di riproduzione" + }, + "help": { + "reorder": "Trascina e rilascia righe per riordinare le tracce nella playlist" + }, + "loading": { + "sync": "Sincronizzando le modifiche con il serverā€¦" + }, + "message": { + "sync": "Modifiche sincronizzate con il server" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Questo cancellerĆ  tutte le tracce da questa lista di riproduzione e non puĆ² essere annullato." + }, + "header": "Vuoi pulire la playlist \"{ playlist }\"?" + } + }, + "warning": { + "duplicate": "Alcune tracce nella tua coda sono giĆ  presenti in questo elenco di riproduzione:" + } + }, + "Form": { + "button": { + "create": "Crea playlist", + "update": "Aggiorna lista di riproduzione" + }, + "header": { + "createFailure": "La lista di riproduzione non puĆ² essere creata", + "createPlaylist": "Crea una nuova lista di riproduzione", + "createSuccess": "Lista di riproduzione creata", + "updateSuccess": "Lista di riproduzione aggiornata" + }, + "label": { + "name": "Nome lista di riproduzione", + "visibility": "VisibilitĆ  lista di riproduzione" + }, + "placeholder": { + "name": "La mia eccezionale playlist" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Aggiungi comunque", + "addToPlaylist": "Aggiungi a questa playlist", + "addTrack": "Aggiungi traccia", + "cancel": "Annulla", + "edit": "Modifica" + }, + "empty": { + "noPlaylists": "Non sono ancora state create playlist" + }, + "header": { + "addFailure": "La traccia non puĆ² essere aggiunta alla lista di riproduzione", + "addToPlaylist": "Aggiungi alla playlist", + "available": "Playlist disponibili", + "manage": "Gestisci playlist", + "noResults": "Nessun risultato che corrisponde al tuo filtro" + }, + "label": { + "filter": "Filtra" + }, + "placeholder": { + "filterPlaylist": "Inserisci il nome della playlist" + }, + "table": { + "edit": { + "header": { + "edit": "Modifica", + "lastModification": "Ultima modifica", + "name": "Nome", + "tracks": "Tracce" + } + } + }, + "warning": { + "duplicate": "{ 0 } ĆØ giĆ  nella { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Aggiungi alla playlistā€¦" + } + }, + "Widget": { + "button": { + "create": "Crea Playlist", + "more": "Mostra altri" + }, + "placeholder": { + "noPlaylists": "Non sono ancora state create playlist" + } + } + }, + "radios": { + "Button": { + "startRadio": "Riproduci radio", + "stopRadio": "Ferma radio" + }, + "Card": { + "button": { + "edit": "Modifica" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostra 1 altro tag | Mostra { n } altri tag" + } + } + }, + "vui": { + "Pagination": { + "label": "Impaginazione", + "next": "Pagina Successiva", + "previous": "Pagina Precedente" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{ n } traccia ĆØ stata aggiunta alla tua coda | { n } tracce sono state aggiunte alla tua coda" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musica", + "other": "Altro", + "podcast": "Podcast" + }, + "label": "Categoria del contenuto" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Questa traccia ĆØ stata caricata, ma la sua elaborazione non ĆØ ancora stata programmata", + "label": "Bozza" + }, + "errored": { + "help": "Non ĆØ stato possibile processare questa traccia, assicurati che sia etichettata correttamente", + "label": "Si ĆØ verificato un errore" + }, + "finished": { + "help": "Importato", + "label": "Finito" + }, + "pending": { + "help": "Questa traccia ĆØ stata caricata, ma non ĆØ ancora stata processata dal server", + "label": "In sospeso" + }, + "skipped": { + "help": "Questa traccia ĆØ giĆ  presente in una delle tue librerie", + "label": "Saltato" + } + }, + "label": "Clicca per visualizzare piĆ¹ informazioni sul processo di importazione di questo caricamento" + }, + "privacyLevel": { + "choices": { + "instance": "Tutti su questa istanza", + "private": "Nessuno tranne me", + "public": "Tutti, su tutte le istanze" + }, + "help": "Imposta il livello di visibilitĆ  delle tue attivitĆ ", + "label": "VisibilitĆ  dell'attivitĆ ", + "shortChoices": { + "instance": "Istanza", + "private": "Privato", + "public": "Tutti" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contenuto illegale", + "invalidMetadata": "Metadati non validi", + "offensiveContent": "Contenuto offensivo", + "other": "Altro", + "takedownRequest": "Richiesta di rimozione" + }, + "label": "Categoria" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data di accesso", + "albumTitle": "Nome album", + "artistName": "Nome dell'artista", + "bitrate": "Bitrate", + "creationDate": "Data di creazione", + "dateJoined": "Data di registrazione", + "domain": "Dominio", + "duration": "Durata", + "expirationDate": "Data di scadenza", + "firstSeen": "Visto per la prima volta in data", + "followers": "Seguito da", + "itemsCount": "Oggetti", + "lastActivity": "Ultima attivitĆ ", + "lastSeen": "Visto l'ultima volta in data", + "modificationDate": "Data di modifica", + "name": "Nome", + "receivedMessages": "Messaggi ricevuti", + "releaseDate": "Data di rilascio", + "size": "Dimensione", + "trackTitle": "Nome traccia", + "uploads": "Caricamenti", + "username": "Nome utente", + "users": "Utenti" + }, + "scopes": { + "edits": { + "description": "Accesso alle modifiche", + "label": "Modifiche" + }, + "favorites": { + "label": "Preferiti" + }, + "filters": { + "description": "Accesso ai filtri del contenuto", + "label": "Filtri di contenuto" + }, + "follows": { + "description": "Accesso ai seguiti", + "label": "Segue" + }, + "libraries": { + "description": "Accedi ai file audio, librerie, artisti, album e tracce", + "label": "Librerie e caricamenti" + }, + "listenings": { + "description": "Accedi alla cronologia di ascolto", + "label": "Ascolti" + }, + "notifications": { + "description": "Accesso alle notifiche", + "label": "Notifiche" + }, + "playlists": { + "description": "Accesso alle playlist", + "label": "Playlist" + }, + "profile": { + "description": "Accedi a email, nome utente e informazioni del profilo", + "label": "Profilo" + }, + "radios": { + "description": "Accesso alle radio", + "label": "Radio" + }, + "reports": { + "description": "Accesso ai report di moderazione", + "label": "Segnalazioni" + }, + "security": { + "description": "Accesso alle impostazioni di sicurezza come password e autorizzazioni", + "label": "Sicurezza" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data di rilascio", + "title": "Titolo" + }, + "artist": { + "name": "Nome" + }, + "cover": { + "label": "Cover" + }, + "description": { + "label": "Descrizione" + }, + "tags": { + "label": "Tag" + }, + "track": { + "copyright": "Diritti d'autore", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + } + }, + "useReport": { + "account": { + "typeLabel": "Account" + }, + "album": { + "label": "Segnala questo albumā€¦", + "typeLabel": "Album" + }, + "artist": { + "label": "Segnala questo artistaā€¦", + "typeLabel": "Artista", + "unknownLabel": "Artista sconosciuto" + }, + "channel": { + "label": "Segnala questo canaleā€¦", + "typeLabel": "Canale" + }, + "library": { + "label": "Segnala questa libreriaā€¦", + "typeLabel": "Libreria" + }, + "playlist": { + "label": "Segnala questa playlistā€¦", + "typeLabel": "Playlist" + }, + "track": { + "label": "Segnala questa tracciaā€¦", + "typeLabel": "Traccia" + } + }, + "useReportConfigs": { + "account": { + "label": "Account", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Data di rilascio", + "title": "Titolo" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Canale" + }, + "creationDate": { + "label": "Data di creazione" + }, + "library": { + "description": "Descrizione", + "label": "Libreria" + }, + "musicbrainzId": { + "label": "ID MusicBrainz" + }, + "name": { + "label": "Nome" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Etichette" + }, + "track": { + "copyright": "Diritti d'autore", + "label": "Traccia", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + }, + "visibility": { + "label": "VisibilitĆ " + } + } + }, + "useThemeList": { + "darkTheme": "Scuro", + "lightTheme": "Chiaro" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Hai inviato troppe richieste e sei stato limitato, riprova tra { delay }", + "rateLimitLater": "Hai inviato troppe richieste e sei stato limitato, riprova piĆ¹ tardi" + }, + "serviceWorker": { + "actions": { + "later": "Dopo", + "update": "Aggiorna" + }, + "newAppVersion": "ƈ disponibile una nuova versione dell'app." + } + }, + "views": { "Notifications": { + "button": { + "read": "Segna tutte come lette", + "submit": "Ho capito!" + }, + "empty": { + "notifications": "Nessuna notifica da visualizzare." + }, + "header": { + "funkwhaleSupport": "Ti piace Funkwhale?", + "instanceSupport": "Supporta questo pod di Funkwhale", + "messages": "I tuoi messaggi", + "notifications": "Le tue notifiche" + }, + "label": { + "reminder": "Ricordamelo tra:", + "showRead": "Mostra notifiche lette" + }, + "link": { + "donate": "Dona", + "help": "Scopri altri modi per aiutare" + }, + "loading": { + "notifications": "Caricando le notificheā€¦" + }, + "message": { + "funkwhaleSupport": "Abbiamo notato che sei qui da un po'. Se Funkwhale ti ĆØ utile, potresti aiutarci a renderlo ancora migliore!" + }, "option": { "delay": { "30": "30 giorni", @@ -3461,584 +3227,63 @@ "never": "Mai" } }, - "link": { - "help": "Scopri altri modi per aiutare", - "donate": "Dona" + "title": "Notifiche" + }, + "Search": { + "button": { + "submit": "Invia Query di Ricerca" }, "header": { - "funkwhaleSupport": "Ti piace Funkwhale?", - "instanceSupport": "Supporta questo pod di Funkwhale", - "messages": "I tuoi messaggi", - "notifications": "Le tue notifiche" + "remote": "Cerca un oggetto remoto", + "rss": "Iscriviti al feed RSS di un podcast", + "search": "Cerca" }, - "button": { - "submit": "Ho capito!", - "read": "Segna tutte come lette" - }, - "loading": { - "notifications": "Caricando le notificheā€¦" - }, - "empty": { - "notifications": "Nessuna notifica da visualizzare." - }, - "title": "Notifiche", "label": { - "reminder": "Ricordamelo tra:", - "showRead": "Mostra notifiche lette" - }, - "message": { - "funkwhaleSupport": "Abbiamo notato che sei qui da un po'. Se Funkwhale ti ĆØ utile, potresti aiutarci a renderlo ancora migliore!" + "albums": "Albums", + "artists": "Artisti", + "playlists": "Playlist", + "podcasts": "Podcast", + "radios": "Radio", + "series": "Serie", + "tags": "Tag", + "tracks": "Tracce" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nome utente", - "loginStatus": { - "disabled": "Disabilitato", - "enabled": "Abilitato", - "label": "Stato dell'accesso" - }, - "displayName": "Nome visualizzato", - "email": "Indirizzo email", - "lastActivity": "Ultima attivitĆ ", - "lastChecked": "Controllato l'ultima volta", - "permissions": "Permessi", - "signupDate": "Data di registrazione", - "userType": "Tipo" - }, - "audioContent": { - "cachedSize": "Dimensione in cache", - "megabyte": "MB", - "totalSize": "Dimensione totale", - "uploadQuota": "Quota di upload" - }, - "activity": { - "emittedFollows": "Emessi i follow della libreria", - "emittedMessages": "Messaggi emessi", - "firstSeen": "Visto per la prima volta", - "receivedFollows": "Ricevuto un follow della libreria" - } - }, - "header": { - "accountData": "Dati dell'account", - "activity": "AttivitĆ ", - "audioContent": "Contenuto audio", - "localAccount": "Account locale", - "activePolicy": "Questo dominio ĆØ soggetto a regole specifiche di moderazione", - "noPolicy": "Non hai nessuna regola attiva per questo account." - }, - "button": { - "addPolicy": "Aggiungi una nuova regola di moderazione" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "domain": "Dominio", - "libraries": "Librerie", - "linkedReports": "Segnalazioni collegate", - "openProfile": "Apri profilo", - "remoteProfile": "Apri profilo remoto", - "requests": "Richieste", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "tooltip": { - "uploadQuota": "Determina quanto contenuto un utente puĆ² caricare. Lascia vuoto per usare il valore predefinito dell'istanza." - }, - "option": { - "permission": { - "library": "Libreria", - "moderation": "Moderazione", - "settings": "Impostazioni" - } - }, - "description": { - "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." - }, - "notApplicable": "N/D", - "warning": { - "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" - } - }, - "Base": { - "link": { - "accounts": "Account", - "domains": "Domini", - "reports": "Segnalazioni", - "userRequests": "Richieste dell'Utente" - }, - "title": "Moderazione", - "menu": { - "secondary": "Menu secondario" - } - }, - "DomainsDetail": { - "header": { - "activity": "AttivitĆ ", - "audioContent": "Contenuto audio", - "instanceData": "Dati dell'istanza", - "activePolicy": "Questo dominio ĆØ soggetto a regole specifiche di moderazione", - "noPolicy": "Non hai nessuna regola attiva per questo dominio." - }, - "button": { - "addPolicy": "Aggiungi una nuova regola di moderazione", - "addToAllowList": "Aggiungi alla lista dei consentiti", - "refreshNodeInfo": "Aggiorna informazioni del nodo", - "removeFromAllowList": "Rimuovi dalla lista dei consentiti" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "knownAccounts": "Account conosciuti", - "libraries": "Librerie", - "website": "Apri sito web", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "activity": { - "emittedFollows": "Emessi i follow della libreria", - "emittedMessages": "Messaggi emessi", - "firstSeen": "Visto per la prima volta", - "receivedFollows": "Ricevuto un follow della libreria" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Errore durante il recupero delle informazioni del nodo", - "label": "Stato" - }, - "inAllowList": { - "label": "ĆØ presente sulla lista dei consentiti", - "false": "No", - "true": "Si" - }, - "lastChecked": "Controllato l'ultima volta", - "domainName": "Nome", - "software": { - "label": "Software" - }, - "totalUsers": "Utenti totali" - } - }, - "description": { - "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." - }, - "notApplicable": "N/D", - "warning": { - "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" - } - }, - "DomainsList": { - "button": { - "add": "Aggiungi" - }, - "label": { - "addDomain": "Aggiungi un dominio", - "addToAllowList": "Aggiungi alla lista dei consentiti" - }, - "title": "Domini", - "header": { - "domains": "Domini", - "failure": "Errore durante la creazione del dominio" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Tutto", - "resolved": "Risolti", - "unresolved": "Non risolto" - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "title": "Segnalazioni", - "header": { - "reports": "Segnalazioni" - }, - "label": { - "search": "Cerca", - "status": "Stato" - }, - "placeholder": { - "search": "Cerca per account, informazioni, dominioā€¦" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Tutto", - "approved": "Approvato", - "pending": "In sospeso", - "refused": "Rifiutata" - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "label": { - "search": "Cerca", - "status": "Stato" - }, - "placeholder": { - "search": "Cerca per usernameā€¦" - }, - "title": "Richieste dell'Utente", - "header": { - "userRequests": "Richieste dell'Utente" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data di accesso", - "firstSeen": "Visto per la prima volta" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Dimensione in cache", - "duration": "Durata", - "size": "Dimensione", - "track": "Traccia" - }, - "upload": { - "name": "Nome" - } - }, - "link": { - "account": "Account", - "domain": "Dominio", - "importStatus": "Stato dell'importazione", - "library": "Libreria", - "remoteProfile": "Apri profilo remoto", - "type": "Tipo", - "django": "Vedi nell'amministrazione di Django", - "visibility": "VisibilitĆ " - }, - "header": { - "activity": "AttivitĆ ", - "audioContent": "Contenuto audio", - "local": "Locale", - "uploadData": "Data di caricamento" - }, - "button": { - "delete": "Elimina", - "download": "Scarica" - }, - "modal": { - "delete": { - "header": "Eliminare questo caricamento?", - "content": { - "warning": "Il caricamento sarĆ  rimosso. Questa azione ĆØ irreversibile." - } - } - }, - "notApplicable": "N/D" - }, - "LibraryDetail": { - "link": { - "account": "Account", - "albums": "Albums", - "artists": "Artisti", - "domain": "Dominio", - "reports": "Segnalazioni collegate", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django", - "visibility": "VisibilitĆ " - }, - "header": { - "activity": "AttivitĆ ", - "audioContent": "Contenuto audio", - "libraryData": "Dati della libreria", - "local": "Locale" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "library": { - "description": "Descrizione", - "name": "Nome" - }, - "activity": { - "firstSeen": "Visto per la prima volta", - "followers": "Seguito da" - } - }, - "button": { - "delete": "Elimina" - }, - "modal": { - "delete": { - "header": "Eliminare questa libreria?", - "content": { - "warning": "La libreria sarĆ  rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione ĆØ irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" - } - }, - "AlbumDetail": { - "header": { - "activity": "AttivitĆ ", - "albumData": "Dati dell'album", - "audioContent": "Contenuto audio", - "local": "Locale" - }, - "link": { - "artist": "Artista", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "album": { - "description": "Descrizione", - "title": "Titolo" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo album?", - "content": { - "warning": "L'album sarĆ  rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" - } - }, - "ArtistDetail": { - "header": { - "activity": "AttivitĆ ", - "artistData": "Dati dell'artista", - "audioContent": "Contenuto audio", - "local": "Locale" - }, - "link": { - "albums": "Albums", - "category": "Categoria", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "artist": { - "description": "Descrizione", - "name": "Nome" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo artista?", - "content": { - "warning": "L'artista sarĆ  rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" - } - }, - "TagDetail": { - "header": { - "activity": "AttivitĆ ", - "audioContent": "Contenuto audio", - "tagData": "Dati del tag" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "localProfile": "Apri profilo locale", - "tracks": "Tracce", - "django": "Vedi nell'amministrazione di Django" - }, - "button": { - "delete": "Elimina" - }, - "modal": { - "delete": { - "header": "Eliminare questo tag?", - "content": { - "warning": "Il tag selezionato sarĆ  rimosso e scollegato da tutte le entitĆ  esistenti. Questa azione ĆØ irreversibile." - } - } - }, - "table": { - "activity": { - "firstSeen": "Visto per la prima volta" - }, - "tag": { - "name": "Nome" - } - } - }, - "TrackDetail": { - "header": { - "activity": "AttivitĆ ", - "local": "Locale", - "trackData": "Dati della traccia" - }, - "link": { - "album": "Album", - "albumArtist": "Artista dell'album", - "artist": "Artista", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "trackData": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "track": { - "copyright": "Diritti d'autore", - "description": "Descrizione", - "discNumber": "Numero disco", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questa traccia?", - "content": { - "warning": "La traccia sarĆ  rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "edits": "Modifiche", - "libraries": "Librerie", - "tags": "Etichette", - "tracks": "Tracce", - "uploads": "Caricamenti" - }, - "title": "Gestisci libreria", - "menu": { - "secondary": "Menu secondario" - } - }, - "EditsList": { - "title": "Modifiche", - "header": { - "edits": "Modifiche della libreria" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Elimina", + "openRemote": "Apri profilo remoto", + "refresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "AttivitĆ ", + "audioContent": "Contenuto audio", + "channelData": "Dati del canale" + }, + "label": { + "local": "Locale" + }, + "link": { + "django": "Vedi nell'amministrazione di Django", + "localProfile": "Apri profilo locale" + }, + "modal": { + "delete": { + "content": { + "warning": "Il canale sarĆ  rimosso, cosƬ come i file caricati, le tracce e gli album ad esso associati. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo canale?" + } + }, "table": { - "channelData": { - "account": "Account", - "category": "Categoria", - "description": "Descrizione", - "domain": "Dominio", - "name": "Nome", - "rss": "Feed RSS", - "url": "URL" + "activity": { + "edits": "Modifiche", + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "linkedReports": "Segnalazioni collegate", + "listenings": "Ascolti", + "playlists": "Playlist" }, "audioContent": { "albums": "Albums", @@ -4047,40 +3292,16 @@ "tracks": "Tracce", "uploads": "Caricamenti" }, - "activity": { - "edits": "Modifiche", - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "linkedReports": "Segnalazioni collegate", - "listenings": "Ascolti", - "playlists": "Playlist" + "channelData": { + "account": "Account", + "category": "Categoria", + "description": "Descrizione", + "domain": "Dominio", + "name": "Nome", + "rss": "Feed RSS", + "url": "URL" } }, - "header": { - "activity": "AttivitĆ ", - "audioContent": "Contenuto audio", - "channelData": "Dati del canale" - }, - "button": { - "delete": "Elimina", - "openRemote": "Apri profilo remoto", - "refresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo canale?", - "content": { - "warning": "Il canale sarĆ  rimosso, cosƬ come i file caricati, le tracce e gli album ad esso associati. Questa azione ĆØ irreversibile." - } - } - }, - "label": { - "local": "Locale" - }, - "link": { - "localProfile": "Apri profilo locale", - "django": "Vedi nell'amministrazione di Django" - }, "warning": { "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" } @@ -4104,53 +3325,1198 @@ "channels": "Canali", "federation": "Federazione", "instanceInfo": "Informazioni sull'istanza", - "settings": "Impostazioni dell'istanza", "moderation": "Moderazione", "music": "Musica", "playlists": "Playlist", "sections": "Sezioni", "security": "Sicurezza", + "settings": "Impostazioni dell'istanza", "signups": "Registrazioni", "stats": "Statistiche", "subsonic": "Subsonic", "ui": "Interfaccia Utente" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "AttivitĆ ", + "albumData": "Dati dell'album", + "audioContent": "Contenuto audio", + "local": "Locale" + }, + "link": { + "artist": "Artista", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "L'album sarĆ  rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo album?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "album": { + "description": "Descrizione", + "title": "Titolo" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" + } + }, + "ArtistDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "AttivitĆ ", + "artistData": "Dati dell'artista", + "audioContent": "Contenuto audio", + "local": "Locale" + }, + "link": { + "albums": "Albums", + "category": "Categoria", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "L'artista sarĆ  rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo artista?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "artist": { + "description": "Descrizione", + "name": "Nome" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "edits": "Modifiche", + "libraries": "Librerie", + "tags": "Etichette", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Gestisci libreria" + }, + "EditsList": { + "header": { + "edits": "Modifiche della libreria" + }, + "title": "Modifiche" + }, + "LibraryDetail": { + "button": { + "delete": "Elimina" + }, + "header": { + "activity": "AttivitĆ ", + "audioContent": "Contenuto audio", + "libraryData": "Dati della libreria", + "local": "Locale" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artisti", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti", + "visibility": "VisibilitĆ " + }, + "modal": { + "delete": { + "content": { + "warning": "La libreria sarĆ  rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questa libreria?" + } + }, + "table": { + "activity": { + "firstSeen": "Visto per la prima volta", + "followers": "Seguito da" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + }, + "library": { + "description": "Descrizione", + "name": "Nome" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" + } + }, + "TagDetail": { + "button": { + "delete": "Elimina" + }, + "header": { + "activity": "AttivitĆ ", + "audioContent": "Contenuto audio", + "tagData": "Dati del tag" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "django": "Vedi nell'amministrazione di Django", + "localProfile": "Apri profilo locale", + "tracks": "Tracce" + }, + "modal": { + "delete": { + "content": { + "warning": "Il tag selezionato sarĆ  rimosso e scollegato da tutte le entitĆ  esistenti. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo tag?" + } + }, + "table": { + "activity": { + "firstSeen": "Visto per la prima volta" + }, + "tag": { + "name": "Nome" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "AttivitĆ ", + "local": "Locale", + "trackData": "Dati della traccia" + }, + "link": { + "album": "Album", + "albumArtist": "Artista dell'album", + "artist": "Artista", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "La traccia sarĆ  rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questa traccia?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "track": { + "copyright": "Diritti d'autore", + "description": "Descrizione", + "discNumber": "Numero disco", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + }, + "trackData": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" + } + }, + "UploadDetail": { + "button": { + "delete": "Elimina", + "download": "Scarica" + }, + "header": { + "activity": "AttivitĆ ", + "audioContent": "Contenuto audio", + "local": "Locale", + "uploadData": "Data di caricamento" + }, + "link": { + "account": "Account", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "importStatus": "Stato dell'importazione", + "library": "Libreria", + "remoteProfile": "Apri profilo remoto", + "type": "Tipo", + "visibility": "VisibilitĆ " + }, + "modal": { + "delete": { + "content": { + "warning": "Il caricamento sarĆ  rimosso. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo caricamento?" + } + }, + "notApplicable": "N/D", + "table": { + "activity": { + "accessedDate": "Data di accesso", + "firstSeen": "Visto per la prima volta" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate" + }, + "cachedSize": "Dimensione in cache", + "duration": "Durata", + "size": "Dimensione", + "track": "Traccia" + }, + "upload": { + "name": "Nome" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Aggiungi una nuova regola di moderazione" + }, + "description": { + "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + }, + "header": { + "accountData": "Dati dell'account", + "activePolicy": "Questo dominio ĆØ soggetto a regole specifiche di moderazione", + "activity": "AttivitĆ ", + "audioContent": "Contenuto audio", + "localAccount": "Account locale", + "noPolicy": "Non hai nessuna regola attiva per questo account." + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "libraries": "Librerie", + "linkedReports": "Segnalazioni collegate", + "openProfile": "Apri profilo", + "remoteProfile": "Apri profilo remoto", + "requests": "Richieste", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "notApplicable": "N/D", + "option": { + "permission": { + "library": "Libreria", + "moderation": "Moderazione", + "settings": "Impostazioni" + } + }, + "table": { + "accountData": { + "displayName": "Nome visualizzato", + "email": "Indirizzo email", + "lastActivity": "Ultima attivitĆ ", + "lastChecked": "Controllato l'ultima volta", + "loginStatus": { + "disabled": "Disabilitato", + "enabled": "Abilitato", + "label": "Stato dell'accesso" + }, + "permissions": "Permessi", + "signupDate": "Data di registrazione", + "userType": "Tipo", + "username": "Nome utente" + }, + "activity": { + "emittedFollows": "Emessi i follow della libreria", + "emittedMessages": "Messaggi emessi", + "firstSeen": "Visto per la prima volta", + "receivedFollows": "Ricevuto un follow della libreria" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "megabyte": "MB", + "totalSize": "Dimensione totale", + "uploadQuota": "Quota di upload" + } + }, + "tooltip": { + "uploadQuota": "Determina quanto contenuto un utente puĆ² caricare. Lascia vuoto per usare il valore predefinito dell'istanza." + }, + "warning": { + "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" + } + }, + "Base": { + "link": { + "accounts": "Account", + "domains": "Domini", + "reports": "Segnalazioni", + "userRequests": "Richieste dell'Utente" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Moderazione" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Aggiungi una nuova regola di moderazione", + "addToAllowList": "Aggiungi alla lista dei consentiti", + "refreshNodeInfo": "Aggiorna informazioni del nodo", + "removeFromAllowList": "Rimuovi dalla lista dei consentiti" + }, + "description": { + "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + }, + "header": { + "activePolicy": "Questo dominio ĆØ soggetto a regole specifiche di moderazione", + "activity": "AttivitĆ ", + "audioContent": "Contenuto audio", + "instanceData": "Dati dell'istanza", + "noPolicy": "Non hai nessuna regola attiva per questo dominio." + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "django": "Vedi nell'amministrazione di Django", + "knownAccounts": "Account conosciuti", + "libraries": "Librerie", + "tracks": "Tracce", + "uploads": "Caricamenti", + "website": "Apri sito web" + }, + "notApplicable": "N/D", + "table": { + "activity": { + "emittedFollows": "Emessi i follow della libreria", + "emittedMessages": "Messaggi emessi", + "firstSeen": "Visto per la prima volta", + "receivedFollows": "Ricevuto un follow della libreria" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + }, + "instanceData": { + "domainName": "Nome", + "inAllowList": { + "false": "No", + "label": "ĆØ presente sulla lista dei consentiti", + "true": "Si" + }, + "lastChecked": "Controllato l'ultima volta", + "nodeInfoStatus": { + "label": "Stato", + "value": "Errore durante il recupero delle informazioni del nodo" + }, + "software": { + "label": "Software" + }, + "totalUsers": "Utenti totali" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attivitĆ  conosciute e contenuti della tua istanza, e non riflette l'attivitĆ  generale per questo oggetto" + } + }, + "DomainsList": { + "button": { + "add": "Aggiungi" + }, + "header": { + "domains": "Domini", + "failure": "Errore durante la creazione del dominio" + }, + "label": { + "addDomain": "Aggiungi un dominio", + "addToAllowList": "Aggiungi alla lista dei consentiti" + }, + "title": "Domini" + }, + "ReportsList": { + "header": { + "reports": "Segnalazioni" + }, + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "status": { + "all": "Tutto", + "resolved": "Risolti", + "unresolved": "Non risolto" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "placeholder": { + "search": "Cerca per account, informazioni, dominioā€¦" + }, + "title": "Segnalazioni" + }, + "RequestsList": { + "header": { + "userRequests": "Richieste dell'Utente" + }, + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "status": { + "all": "Tutto", + "approved": "Approvato", + "pending": "In sospeso", + "refused": "Rifiutata" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "placeholder": { + "search": "Cerca per usernameā€¦" + }, + "title": "Richieste dell'Utente" + } + }, "users": { "Base": { "link": { "invitations": "Inviti", "users": "Utenti" }, - "title": "Gestisci utenti", "menu": { "secondary": "Menu secondario" + }, + "title": "Gestisci utenti" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Accesso in corsoā€¦" + } + }, + "EmailConfirm": { + "header": { + "failure": "Non ĆØ stato possibile confermare il tuo indirizzo e-mail", + "success": "Indirizzo e-mail confermato" + }, + "label": { + "confirmationCode": "Codice di conferma" + }, + "link": { + "back": "Torna alla pagina di accesso", + "login": "Procedi all'accesso" + }, + "message": { + "success": "Ora puoi usare il servizio senza limitazioni." + }, + "title": "Conferma il tuo indirizzo e-mail" + }, + "Login": { + "header": { + "login": "Accedi al tuo account Funkwhale" + }, + "title": "Accedi" + }, + "PasswordReset": { + "button": { + "requestReset": "Chiedi un reset della password" + }, + "header": { + "failure": "Errore durante la richiesta di un reset della password", + "reset": "Resetta la tua password" + }, + "help": { + "form": "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." + }, + "label": { + "email": "Indirizzo email dell'account" + }, + "link": { + "back": "Torna alla pagina di accesso" + }, + "placeholder": { + "email": "Inserisci l'indirizzo email collegato al tuo account" + }, + "title": "Resetta la tua password" + }, + "PasswordResetConfirm": { + "button": { + "update": "Aggiorna la tua password" + }, + "header": { + "failure": "Errore durante la modifica della password", + "success": "Password aggiornata con successo" + }, + "label": { + "newPassword": "Nuova password" + }, + "link": { + "back": "Torna alla pagina di accesso", + "login": "Procedi all'accesso" + }, + "message": { + "requestSent": "Se l'indirizzo email fornito nel passo precedente ĆØ valido e collegato a un account utente, dovresti ricevere un'email con le istruzioni per il reset nei prossimi minuti.", + "success": "La tua password ĆØ stata aggiornata con successo." + }, + "title": "Cambia la tua password" + }, + "Plugins": { + "title": "Gestisci i plugin" + }, + "ProfileActivity": { + "header": { + "playlists": "Playlist", + "recentlyFavorited": "Preferiti recenti", + "recentlyListened": "Ascoltate recentemente" + } + }, + "ProfileBase": { + "label": { + "self": "Questo sei tu!" + }, + "link": { + "activity": "AttivitĆ ", + "domainView": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "overview": "Panoramica" + }, + "title": "Profilo di { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Annulla", + "createChannel": "Crea canale", + "next": "Prossimo passo", + "previous": "Passo precedente" + }, + "header": { + "channels": "Canali", + "libraries": "Librerie dell'Utente", + "sharedLibraries": "Questo utente ha condiviso le seguenti librerie" + }, + "link": { + "addNew": "Aggiungi nuovo" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Canale dell'artista" + }, + "header": "Crea canale", + "podcast": { + "header": "Canale podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crea un account su Funkwhale" + }, + "title": "Registrati" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina", + "delete": "Eliminaā€¦", + "edit": "Modificaā€¦", + "embed": "Incorpora", + "play": "Riproduci", + "updateChannel": "Aggiorna canale", + "upload": "Carica" + }, + "header": { + "artistChannel": "Canale dell'artista", + "podcastChannel": "Canale podcast" + }, + "link": { + "channelEpisodes": "Tutti gli Episodi", + "channelOverview": "Panoramica", + "channelTracks": "Tracce", + "domainView": "Visualizza su { dominio }", + "mirrored": "Mirror da { dominio }", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "listenings": "{ n } ascolto | { n } ascolti", + "subscribers": "{ n } iscritto | { n } iscritti", + "tracks": "{ n } traccia | { n } tracce" + }, + "modal": { + "delete": { + "content": { + "warning": "Il canale sarĆ  rimosso, cosƬ come i file ad esso associati e i dati. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questo Canale?" + }, + "embed": { + "header": "Incorpora il lavoro di questo artista nel tuo sito web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Se stai usando Mastodon o altre applicazioni per il fediverso, puoi iscriverti a questo account:" + }, + "header": "Iscriviti sul Fediverso" + }, + "funkwhale": { + "header": "Iscriviti su Funkwhale" + }, + "header": "Iscriviti a questo canale", + "rss": { + "content": { + "help": "Copia-incolla il seguente url nella tua app di podcasting preferita:" + }, + "header": "Iscriviti via RSS" + } + } + }, + "title": "Canale" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Ultimi episodi", + "latestTracks": "Ultime tracce", + "series": "Serie", + "uploadsFailure": "Non ĆØ stato possibile pubblicare alcuni file", + "uploadsProcessing": "I file caricati stanno venendo elaborati", + "uploadsSuccess": "Upload pubblicati con successo" + }, + "link": { + "addAlbum": "Aggiungi nuovo", + "erroredUploads": "Visualizza caricamenti falliti", + "skippedUploads": "Visualizza caricamenti saltati" + }, + "message": { + "processing": "I file caricati stanno venendo elaborati da Funkwhale e saranno pubblicati a breve." + }, + "meta": { + "progress": "File processati:" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Annulla", + "subscribe": "Iscriviti" + }, + "link": { + "addNew": "Aggiungi nuovo" + }, + "modal": { + "subscription": { + "header": "Iscrizione" + } + }, + "placeholder": { + "search": "Filtra per nomeā€¦" + }, + "title": "Canali a cui sei iscritto" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Librerie", + "tracks": "Tracce" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Aggiungi contenuto" + }, + "Home": { + "button": { + "start": "Per iniziare" + }, + "description": { + "channel": { + "1": "Se sei un musicista o un podcaster, i canali sono pensati per te!", + "2": "Condividi le tue opere pubblicamente e ottieni iscritti su Funkwhale, il Fediverso o qualsiasi applicazione di podcasting." + }, + "follow": "Segui librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiedono l'approvazione del loro proprietario.", + "upload": "Carica la tua libreria musicale personale su Funkwhale per ascoltarla da ovunque e condividerla con amici e famiglia." + }, + "header": { + "channel": "Pubblica le tue opere in un canale", + "follow": "Segui librerie remote", + "upload": "Carica contenuto di terze parti in una libreria" + }, + "help": { + "uploadQuota": "Questa istanza offre fino a {quota} di spazio di archiviazione per ogni utente." + }, + "title": "Aggiungi e gestisci contenuti" + }, + "libraries": { + "Card": { + "button": { + "upload": "Carica" + }, + "label": { + "size": "Dimensione totale dei file in questa libreria" + }, + "link": { + "details": "Dettagli Libreria" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "FilesTable": { + "action": { + "delete": "Elimina", + "restartImport": "Riavvia importazione" + }, + "button": { + "showStatus": "Mostra informazioni sullo stato di caricamento di questa traccia" + }, + "empty": { + "noTracks": "Non sono ancora state aggiunte tracce a questa libreria" + }, + "label": { + "importStatus": "Stato dell'importazione", + "search": "Cerca" + }, + "notApplicable": "N/D", + "option": { + "status": { + "all": "Tutto", + "draft": "Bozza", + "failed": "Fallito", + "finished": "Finito", + "pending": "In sospeso", + "skipped": "Saltato" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per titolo, artista, albumā€¦" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artista", + "duration": "Durata", + "importStatus": "Stato dell'importazione", + "size": "Dimensione", + "title": "Titolo", + "uploadDate": "Data di caricamento" + } + } + } + }, + "Form": { + "button": { + "confirm": "Elimina libreria", + "create": "Crea libreria", + "delete": "Elimina", + "update": "Aggiorna libreria" + }, + "description": { + "library": "Le librerie sono di aiuto per organizzare e condividere la tua collezione musicale. Puoi caricare la tua musica su Funkwhale e condividerla con amici e parenti.", + "visibility": "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilitĆ ." + }, + "header": { + "failure": "Errore" + }, + "label": { + "description": "Descrizione", + "name": "Nome", + "visibility": "VisibilitĆ " + }, + "message": { + "libraryCreated": "Libreria creata", + "libraryDeleted": "Libreria eliminata", + "libraryUpdated": "Libreria aggiornata" + }, + "modal": { + "delete": { + "content": { + "warning": "La libreria e tutte le sue tracce saranno eliminate. Questa azione ĆØ irreversibile." + }, + "header": "Eliminare questa libreria?" + } + }, + "placeholder": { + "description": "Questa libreria contiene la mia musica personale, spero vi piaccia.", + "name": "La mia eccezionale libreria" + } + }, + "Home": { + "empty": { + "noLibrary": "Sembra che tu non abbia ancora nessuna libreria, ĆØ tempo di crearne una." + }, + "header": { + "libraries": "Le mie librerie" + }, + "link": { + "createLibrary": "Crea una nuova libreria" + }, + "loading": { + "libraries": "Caricando le Librerieā€¦" + } + }, + "Quota": { + "button": { + "purge": "Rimuovi" + }, + "header": { + "currentUsage": "Utilizzo attuale" + }, + "label": { + "currentUsage": "{ current } usato su { max } consentito", + "errored": "File con errore", + "pending": "File in sospeso", + "skipped": "File saltati" + }, + "link": { + "viewFiles": "Vedi files" + }, + "loading": { + "currentUsage": "Caricando i dati di utilizzoā€¦" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file con errori?" + }, + "purgePending": { + "content": { + "description": "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file in attesa?" + }, + "purgeSkipped": { + "content": { + "description": "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file saltati?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Annulla richiesta di seguire", + "follow": "Segui", + "pending": "Richiesta di seguire in attesa di approvazione", + "unfollow": "Smetti di seguire" + }, + "label": { + "scanFailure": "Errore durante la scansione", + "scanPartialSuccess": "Scansione eseguita con errori", + "scanPending": "Scansione in sospeso", + "scanProgress": "Scansionandoā€¦ ({ progress }%)", + "scanSuccess": "Scansionata", + "sharingLink": "Condividi collegamento" + }, + "link": { + "scan": "Scansiona ora", + "scanDetails": "Dettagli" + }, + "message": { + "scanLaunched": "Scansione avviata", + "scanSkipped": "Scansione saltata (la scansione precedente ĆØ troppo recente)" + }, + "meta": { + "failedTracks": "Tracce con errore:", + "lastUpdate": "Ultimo aggiornamento:", + "tracks": "{ n } traccia | { n } tracce" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." + }, + "header": "Smettere di seguire questa libreria?" + } + }, + "tooltip": { + "private": "Questa libreria ĆØ privata e la tua approvazione dal suo proprietario ĆØ necessaria per accedere al suo contenuto", + "public": "Questa libreria ĆØ pubblica e tu puoi accedere al suo contenuto liberamente" + } + }, + "Home": { + "button": { + "refresh": "Aggiorna" + }, + "description": { + "remoteLibraries": "Le librerie remote sono di proprietĆ  di altri utenti nella rete. Puoi accedervi se sono pubbliche o se ti ĆØ stato dato l'accesso ad esse." + }, + "header": { + "knownLibraries": "Librerie conosciute", + "remoteLibraries": "Librerie remote" + }, + "loading": { + "remoteLibraries": "Caricando le librerie remoteā€¦" + } + }, + "ScanForm": { + "button": { + "submit": "Invia ricerca" + }, + "header": { + "failure": "Non ĆØ stato possibile recuperare la libreria remota" + }, + "label": { + "search": "Cerca una libreria remota" + }, + "placeholder": { + "url": "Inserisci l'URL di una libreria" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artisti", - "playlists": "Playlist", - "podcasts": "Podcast", - "radios": "Radio", - "series": "Serie", - "tags": "Tag", - "tracks": "Tracce" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria ĆØ vuota, dovresti caricarci qualcosa!" + } }, - "header": { - "search": "Cerca", - "remote": "Cerca un oggetto remoto", - "rss": "Iscriviti al feed RSS di un podcast" + "DetailOverview": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria ĆØ vuota, dovresti caricarci qualcosa!" + } }, - "button": { - "submit": "Invia Query di Ricerca" + "DetailTracks": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria ĆØ vuota, dovresti caricarci qualcosa!" + } + }, + "Edit": { + "button": { + "accept": "Accetta", + "reject": "Rifiuta" + }, + "empty": { + "noFollowers": "Nessuno segue questa libreria" + }, + "header": { + "followers": "Seguito da", + "libraryContents": "Contenuto della libreria" + }, + "loading": { + "followers": "Caricando la lista di chi ti segueā€¦" + }, + "table": { + "action": { + "header": { + "action": "Azione", + "date": "Data", + "status": "Stato", + "user": "Utente" + }, + "status": { + "accepted": "Accettato", + "pending": "Approvazione in sospeso", + "rejected": "Rifiutato" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Modifica", + "upload": "Carica" + }, + "description": { + "sharingLink": "Condividi questo link con altri utenti in modo che possano richiedere l'accesso alla tua libreria incollandolo nella barra di ricerca della loro istanza." + }, + "label": { + "instance": "Ristretto", + "private": "Privato", + "public": "Pubblico", + "sharingLink": "Condividi collegamento" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "owner": "ProprietĆ  di { username }", + "tracks": "Tracce" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Libreria", + "tooltip": { + "instance": "Questa libreria ĆØ ristretta agli utenti di questa istanza", + "private": "Questa libreria ĆØ privata e la tua approvazione dal suo proprietario ĆØ necessaria per accedere al suo contenuto", + "public": "Questa libreria ĆØ pubblica e tu puoi accedere al suo contenuto liberamente" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina playlist", + "delete": "Elimina", + "edit": "Modifica", + "embed": "Incorpora", + "playAll": "Riproduci tutto", + "stopEdit": "Smetti di modificare" + }, + "empty": { + "noTracks": "Non ci sono ancora tracce in questa playlist" + }, + "header": { + "tracks": "Tracce" + }, + "meta": { + "tracks": "Lista di riproduzione contenente { n } traccia, di { username } | Lista di riproduzione contenente { n } tracce, di { username }" + }, + "modal": { + "delete": { + "content": { + "warning": "Questo cancellerĆ  questa lista di riproduzione e non puĆ² essere annullato." + }, + "header": "Vuoi eliminare la playlist \"{ playlist }\"?" + }, + "embed": { + "header": "Incorpora questo album nel tuo sito web" + } + }, + "title": "Playlist" + }, "List": { + "button": { + "create": "Crea playlist", + "manage": "Gestisci le tue playlist", + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando playlists", + "playlists": "Playlist" + }, + "label": { + "search": "Cerca" + }, "ordering": { "direction": { "ascending": "Crescente", @@ -4159,58 +4525,11 @@ }, "label": "Ordinamento" }, - "header": { - "browse": "Sfogliando playlists", - "playlists": "Playlist" - }, - "button": { - "create": "Crea playlist", - "manage": "Gestisci le tue playlist", - "search": "Cerca" - }, - "placeholder": { - "search": "Inserisci il nome di una playlistā€¦" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, "pagination": { "results": "Risultati per pagina" }, - "label": { - "search": "Cerca" - } - }, - "Detail": { - "button": { - "cancel": "Annulla", - "delete": "Elimina", - "confirm": "Elimina playlist", - "edit": "Modifica", - "embed": "Incorpora", - "playAll": "Riproduci tutto", - "stopEdit": "Smetti di modificare" - }, - "modal": { - "delete": { - "header": "Vuoi eliminare la playlist \"{ playlist }\"?", - "content": { - "warning": "Questo cancellerĆ  questa lista di riproduzione e non puĆ² essere annullato." - } - }, - "embed": { - "header": "Incorpora questo album nel tuo sito web" - } - }, - "title": "Playlist", - "meta": { - "tracks": "Lista di riproduzione contenente { n } traccia, di { username } | Lista di riproduzione contenente { n } tracce, di { username }" - }, - "empty": { - "noTracks": "Non ci sono ancora tracce in questa playlist" - }, - "header": { - "tracks": "Tracce" + "placeholder": { + "search": "Inserisci il nome di una playlistā€¦" } } }, @@ -4220,287 +4539,22 @@ "confirm": "Elimina radio", "edit": "Modificaā€¦" }, - "modal": { - "delete": { - "header": "Vuoi eliminare la radio \"{ radio }\"?", - "content": { - "warning": "Questo cancellerĆ  questa radio e non puĆ² essere annullato." - } - } - }, "empty": { "noTracks": "Non sono ancora state aggiunte tracce a questa radio" }, - "title": "Radio", "header": { "tracks": "Tracce" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } traccia ĆØ stata aggiunta alla tua coda | { n } tracce sono state aggiunte alla tua coda" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Accedi ai file audio, librerie, artisti, album e tracce", - "label": "Librerie e caricamenti" - }, - "filters": { - "description": "Accesso ai filtri del contenuto", - "label": "Filtri di contenuto" - }, - "profile": { - "description": "Accedi a email, nome utente e informazioni del profilo", - "label": "Profilo" - }, - "edits": { - "description": "Accesso alle modifiche", - "label": "Modifiche" - }, - "follows": { - "description": "Accesso ai seguiti", - "label": "Segue" - }, - "listenings": { - "description": "Accedi alla cronologia di ascolto", - "label": "Ascolti" - }, - "reports": { - "description": "Accesso ai report di moderazione", - "label": "Segnalazioni" - }, - "notifications": { - "description": "Accesso alle notifiche", - "label": "Notifiche" - }, - "playlists": { - "description": "Accesso alle playlist", - "label": "Playlist" - }, - "radios": { - "description": "Accesso alle radio", - "label": "Radio" - }, - "security": { - "description": "Accesso alle impostazioni di sicurezza come password e autorizzazioni", - "label": "Sicurezza" - }, - "favorites": { - "label": "Preferiti" - } }, - "filters": { - "accessedDate": "Data di accesso", - "albumTitle": "Nome album", - "artistName": "Nome dell'artista", - "bitrate": "Bitrate", - "creationDate": "Data di creazione", - "domain": "Dominio", - "duration": "Durata", - "expirationDate": "Data di scadenza", - "firstSeen": "Visto per la prima volta in data", - "followers": "Seguito da", - "itemsCount": "Oggetti", - "lastActivity": "Ultima attivitĆ ", - "lastSeen": "Visto l'ultima volta in data", - "modificationDate": "Data di modifica", - "name": "Nome", - "receivedMessages": "Messaggi ricevuti", - "releaseDate": "Data di rilascio", - "dateJoined": "Data di registrazione", - "size": "Dimensione", - "trackTitle": "Nome traccia", - "uploads": "Caricamenti", - "username": "Nome utente", - "users": "Utenti" - }, - "fields": { - "privacyLevel": { - "label": "VisibilitĆ  dell'attivitĆ ", - "help": "Imposta il livello di visibilitĆ  delle tue attivitĆ ", - "shortChoices": { - "public": "Tutti", - "instance": "Istanza", - "private": "Privato" + "modal": { + "delete": { + "content": { + "warning": "Questo cancellerĆ  questa radio e non puĆ² essere annullato." }, - "choices": { - "instance": "Tutti su questa istanza", - "public": "Tutti, su tutte le istanze", - "private": "Nessuno tranne me" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoria", - "choices": { - "illegalContent": "Contenuto illegale", - "invalidMetadata": "Metadati non validi", - "offensiveContent": "Contenuto offensivo", - "other": "Altro", - "takedownRequest": "Richiesta di rimozione" - } - }, - "importStatus": { - "label": "Clicca per visualizzare piĆ¹ informazioni sul processo di importazione di questo caricamento", - "choices": { - "draft": { - "label": "Bozza", - "help": "Questa traccia ĆØ stata caricata, ma la sua elaborazione non ĆØ ancora stata programmata" - }, - "errored": { - "label": "Si ĆØ verificato un errore", - "help": "Non ĆØ stato possibile processare questa traccia, assicurati che sia etichettata correttamente" - }, - "finished": { - "label": "Finito", - "help": "Importato" - }, - "pending": { - "label": "In sospeso", - "help": "Questa traccia ĆØ stata caricata, ma non ĆØ ancora stata processata dal server" - }, - "skipped": { - "label": "Saltato", - "help": "Questa traccia ĆØ giĆ  presente in una delle tue librerie" - } - } - }, - "contentCategory": { - "label": "Categoria del contenuto", - "choices": { - "music": "Musica", - "other": "Altro", - "podcast": "Podcast" - } + "header": "Vuoi eliminare la radio \"{ radio }\"?" } - } + }, + "title": "Radio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Account" - }, - "album": { - "typeLabel": "Album", - "label": "Segnala questo albumā€¦" - }, - "artist": { - "typeLabel": "Artista", - "label": "Segnala questo artistaā€¦" - }, - "channel": { - "typeLabel": "Canale", - "label": "Segnala questo canaleā€¦" - }, - "library": { - "typeLabel": "Libreria", - "label": "Segnala questa libreriaā€¦" - }, - "playlist": { - "typeLabel": "Playlist", - "label": "Segnala questa playlistā€¦" - }, - "track": { - "label": "Segnala questa tracciaā€¦", - "typeLabel": "Traccia" - } - }, - "useReportConfigs": { - "account": { - "label": "Account", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Data di rilascio", - "title": "Titolo" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Canale" - }, - "track": { - "copyright": "Diritti d'autore", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo", - "label": "Traccia" - }, - "creationDate": { - "label": "Data di creazione" - }, - "library": { - "description": "Descrizione", - "label": "Libreria" - }, - "musicbrainzId": { - "label": "ID MusicBrainz" - }, - "name": { - "label": "Nome" - }, - "playlist": { - "label": "Playlist" - }, - "tags": { - "label": "Etichette" - }, - "visibility": { - "label": "VisibilitĆ " - } - }, - "useEditConfigs": { - "track": { - "copyright": "Diritti d'autore", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo" - }, - "cover": { - "label": "Cover" - }, - "description": { - "label": "Descrizione" - }, - "artist": { - "name": "Nome" - }, - "album": { - "releaseDate": "Data di rilascio", - "title": "Titolo" - }, - "tags": { - "label": "Tag" - } - } - }, - "useThemeList": { - "darkTheme": "Scuro", - "lightTheme": "Chiaro" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "ƈ disponibile una nuova versione dell'app.", - "actions": { - "later": "Dopo", - "update": "Aggiorna" - } - }, - "axios": { - "rateLimitDelay": "Hai inviato troppe richieste e sei stato limitato, riprova tra { delay }", - "rateLimitLater": "Hai inviato troppe richieste e sei stato limitato, riprova piĆ¹ tardi" } } } From cc2272bb8017fd6e33b3782961a35771d7e391e4 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 08:06:30 +0000 Subject: [PATCH 206/371] Translated using Weblate (Occitan) Currently translated at 97.7% (2132 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/oc/ --- front/src/locales/oc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/oc.json b/front/src/locales/oc.json index 4e9bac612..abcbece46 100644 --- a/front/src/locales/oc.json +++ b/front/src/locales/oc.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Cargament..." + "loading": "Cargamentā€¦" }, "components": { "About": { From aa0ce033aa8de5747a1eb2b9cba9f16be13db864 Mon Sep 17 00:00:00 2001 From: drakonicguy <betikonik@gmail.com> Date: Mon, 11 Dec 2023 08:46:51 +0000 Subject: [PATCH 207/371] Translated using Weblate (Polish) Currently translated at 95.4% (2082 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/pl/ --- front/src/locales/pl.json | 7901 +++++++++++++++++++------------------ 1 file changed, 3954 insertions(+), 3947 deletions(-) diff --git a/front/src/locales/pl.json b/front/src/locales/pl.json index 910ec87d2..a9d56cb93 100644 --- a/front/src/locales/pl.json +++ b/front/src/locales/pl.json @@ -1,427 +1,363 @@ { + "App": { + "loading": "Ładowanieā€¦" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "Aplikacja { app } chciałaby uzyskać dostęp do twojego konta Funkwhale", - "authorize": "Autoryzuj zewnętrzną aplikację", - "authorizeFailure": "Wystąpił błąd podczas autoryzowania aplikacji", - "fetchFailure": "Wystąpił błąd podczas pobierania danych aplikacji", - "allScopes": "Pełen dostęp", - "readOnly": "Tylko do odczytu", - "writeOnly": "Tylko do zapisu" - }, - "title": "Autoryzuj aplikację", - "button": { - "authorize": "Autoryzuj { app }" - }, - "help": { - "pasteCode": "Wklej następujący kod do aplikacji:", - "redirect": "Zostaniesz przekierowany na { 0 }", - "copyCode": "Pokazany zostanie kod do wklejenia w aplikacji." - }, - "message": { - "unknownPermissions": "Aplikacja prosi też o następujące nieznane uprawnienia:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Dostęp wyłączony", - "passwordUpdated": "Zaktualizowano hasło", - "unavailable": "API Subsonic nie jest dostępne na tej instancji Funkwhale." - }, - "button": { - "confirmDisable": "Wyłącz dostęp", - "disable": "Wyłącz dostęp Subsonic", - "newPassword": "Poproś o nowe hasło", - "confirmNewPassword": "Poproś o hasło" - }, - "modal": { - "disableSubsonic": { - "header": "Wyłączyć dostęp do API Subsonic?", - "content": { - "warning": "To całkowicie wyłączy dostęp do API Subsonic z tego konta." - } - }, - "newPassword": { - "header": "Poprosić o nowe hasło do API Subsonic?", - "content": { - "warning": "To wyloguje Cię z urządzeń na ktĆ³rych jesteś obecnie zalogowany." - } - } - }, - "link": { - "apps": "Odkryj, jak korzystać z Funkwhale za pomocą innych aplikacji" - }, - "header": { - "error": "Błąd", - "subsonic": "Hasło do API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsługującymi API Subsonic.", - "paragraph3": "Korzystanie z Funkwhale za pomocą tych aplikacji wymaga jednak oddzielnego hasła, ktĆ³re możesz ustawić poniżej.", - "paragraph2": "Możesz użyć tego, aby cieszyć się swoją muzyką w trybie offline, na przykład na smartfonie czy tablecie." - } - }, - "label": { - "subsonicField": "Twoje hasło do API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token dostępowy", - "appId": "Identyfikator aplikacji", - "appSecret": "Sekret aplikacji" - }, - "header": { - "appDetails": "SzczegĆ³Å‚y aplikacji", - "editApp": "Edytuj aplikację" - }, - "help": { - "appDetails": "Identyfikator i sekret aplikacji są danymi wrażliwymi i powinny być traktowane jak hasła. Nie powinieneś się nimi z nikim dzielić." - }, - "link": { - "settings": "WrĆ³Ä‡ do ustawień" - }, - "title": "Edytuj aplikację", - "button": { - "regenerateToken": "StwĆ³rz nowy token" - } - }, - "Settings": { - "title": "Ustawienia konta", - "header": { - "accountSettings": "Ustawienia konta", - "authorizedApps": "Autoryzowane aplikacje", - "avatar": "Awatar", - "changeEmail": "Zmień swĆ³j adres e-mail", - "changePassword": "Zmień swoje hasło", - "contentFilters": "Filtry treści", - "deleteAccount": "Usuń moje konto", - "hiddenArtists": "Ukryci wykonawcy", - "plugins": "Rozszerzenia", - "settingsUpdated": "Zapisano ustawienia", - "emailFailure": "Nie udało się zmienić Twojego adresu e-mail", - "accountFailure": "Nie udało się usunąć Twojego konta", - "noApps": "Å»adna aplikacja nie jest połączona z Twoim kontem.", - "noPersonalApps": "Nie zarejestrowałeś jeszcze żadnej aplikacji.", - "yourApps": "Twoje aplikacje", - "avatarFailure": "Nie można było zapisać twojego awatara", - "passwordFailure": "Twoje hasło nie mogło zostać zmienione", - "updateFailure": "Twoje ustawienia nie mogły zostać zapisane" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplikacja", - "permissions": "Uprawnienia" - } - }, - "yourApps": { - "header": { - "application": "Aplikacja", - "creationDate": "Data utworzenia", - "scopes": "Zakresy dostępu" - } - }, - "artists": { - "header": { - "creationDate": "Data utworzenia", - "name": "Nazwa" - } - } - }, - "label": { - "avatar": "Awatar", - "currentPassword": "Aktualne hasło", - "newEmail": "Nowy adres e-mail", - "newPassword": "Nowe hasło", - "password": "Hasło" - }, - "button": { - "password": "Zmień hasło", - "delete": "Usuń", - "deleteAccountConfirm": "Usuń moje konto", - "deleteAccount": "Usuń moje kontoā€¦", - "disableSubsonic": "Wyłącz dostęp", - "edit": "Edytuj", - "refresh": "Odśwież", - "remove": "Usuń", - "removeApp": "Usuń aplikację", - "revoke": "Odwołaj", - "revokeAccess": "Odwołaj dostęp", - "update": "Zapisz", - "updateSettings": "Zapisz ustawienia" - }, - "description": { - "changeEmail": "Zmień adres e-mail powiązany z tym kontem. Na nowy adres zostanie wysłane potwierdzenie.", - "changePassword": { - "paragraph1": "Zmiana Twojego hasła zmieni też hasło do API Subsonic, jeśli je uzyskałeś(-aś).", - "paragraph2": "Będziesz musiał zaktualizować hasło w aplikacjach ktĆ³re go używają." - }, - "contentFilters": "Filtry treści pomogą Ci ukryć treści, ktĆ³rych nie chcesz widzieć w serwisie.", - "authorizedApps": "To jest lista aplikacji, ktĆ³re mają dostęp do informacji Twojego konta.", - "yourApps": "To jest lista aplikacji, ktĆ³re zarejestrowałeś(-aś).", - "plugins": "Użyj rozszerzeń do Funkwhale i zyskaj dodatkowe funkcjonalności.", - "deleteAccount": "Możesz permanentnie i nieodwracalnie skasować swoje konto i wszystkie powiązane informacje używając pĆ³l poniżej. Zostaniesz poproszony o potwierdzenie tej czynności." - }, - "modal": { - "changePassword": { - "header": "Zmienić Twoje hasło?", - "content": { - "warning": "Zmiana hasła będzie miała następujące konsekwencje:", - "logout": "Zostaniesz wylogowany i będziesz musiał zalogować się nowym hasłem", - "subsonic": "Twoje hasło do API Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urządzeń korzystających ze starego hasła do API Subsonic" - } - }, - "deleteAccount": { - "header": "Czy na pewno chcesz usunąć swoje konto?", - "content": { - "warning": "To jest nieodwracalne i permanentnie usunie Twoje dane z naszych serwerĆ³w. Zostaniesz natychmiast wylogowany(-a)." - } - }, - "deleteApp": { - "header": "Usunąć aplikację ā€ž{ application }ā€?", - "content": { - "warning": "To permanentnie usunie aplikację i wszystkie powiązane tokeny." - } - }, - "revokeApp": { - "header": "Czy odwołać dostęp dla aplikacji ā€ž{ application }ā€?", - "content": { - "warning": "To uniemożliwi tej aplikacji dostęp do usługi w Twoim imieniu." - } - } - }, - "help": { - "noApps": "Jeśli zezwolisz jakimś zewnętrznym aplikacjom na dostęp do twoich danych, te aplikacje pojawią się tutaj.", - "changePassword": "Upewnij się, że Twoje hasło jest poprawne", - "noPersonalApps": "Zarejestruj jakąś, aby zintegrować Funkwhale z innymi aplikacjami." - }, - "link": { - "managePlugins": "Zarządzaj rozszerzeniami", - "newApp": "Zarejestruj nową aplikację" - }, - "warning": { - "deleteAccount": "Twoje konto zostanie usunięte z naszych serwerĆ³w w ciągu kilku minut. Poinformujemy też inne serwery, ktĆ³re mogą mieć kopię twoich danych, aby przystąpiły do usuwania. WeÅŗ pod uwagę, że niektĆ³re serwery mogą być wyłączone, albo nie chcieć wspĆ³Å‚pracować." - }, - "message": { - "currentEmail": "TwĆ³j obecny adres e-mail to { email }.", - "confirmDelete": "Żądanie o usunięcie konta zostało przesłane. Twoje konto i powiązane z nim treści zostaną wkrĆ³tce usunięte" - } - }, - "Logout": { - "header": { - "confirm": "Czy na pewno chcesz się wylogować?", - "unauthenticated": "Nie jesteś obecnie zalogowany(-a)" - }, - "link": { - "login": "Zaloguj się!" - }, - "title": "Wyloguj się", - "button": { - "logout": "Tak, wyloguj mnie!" - }, - "message": { - "loggedIn": "Jesteś obecnie zalogowany jako { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "WrĆ³Ä‡ do ustawień" - }, - "title": "UtwĆ³rz nową aplikację" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Zaznaczenie nadrzędnych zakresĆ³w dostępu ā€žOdczytā€ lub ā€žZapisā€ umożliwia dostęp do wszystkich odpowiednich zakresĆ³w podrzędnych.", - "read": { - "label": "Odczyt", - "description": "Dostęp do odczytu danych użytkownika" - }, - "write": { - "label": "Zapis", - "description": "Dostęp do zapisu danych użytkownika" - } - }, - "name": "Nazwa", - "redirectUri": "Adres URI przekierowania" - }, - "button": { - "create": "UtwĆ³rz aplikację", - "update": "Zapisz aplikację" - }, - "help": { - "redirectUri": "Użyj \"urn:ietf:wg:oauth:2.0:oob\" jako URI przekierowania, jeśli twoja aplikacja nie jest dostępna w sieci web." - }, - "header": { - "failure": "Nie udało się zapisać Twoich zmian" - } - }, - "LoginForm": { - "link": { - "createAccount": "UtwĆ³rz konto", - "resetPassword": "Zresetuj hasło" - }, - "placeholder": { - "username": "WprowadÅŗ swoją nazwę użytkownika lub adres e-mail" - }, - "help": { - "approvalRequired": "Jeżeli niedawno się rejestrowałeś, może być koniecznie odczekanie, aż zespĆ³Å‚ moderujący rozpatrzy twoją aplikację.", - "invalidCredentials": "Upewnij się, że Twoja kombinacja nazwy użytkownika i hasła są poprawne oraz zweryfikuj poprawność adresu e-mail." - }, - "button": { - "login": "Zaloguj się" - }, - "label": { - "password": "Hasło", - "username": "Nazwa użytkownika lub adres e-mail" - }, - "header": { - "loginFailure": "Nie udało się Cię zalogować" - } - }, - "SignupForm": { - "button": { - "create": "UtwĆ³rz konto" - }, - "label": { - "email": "Adres e-mail", - "password": "Hasło", - "username": "Nazwa użytkownika" - }, - "placeholder": { - "email": "WprowadÅŗ swĆ³j adres e-mail", - "invitation": "WprowadÅŗ swĆ³j kod zaproszenia (wielkość znakĆ³w nie ma znaczenia)", - "username": "WprowadÅŗ swoją nazwę użytkownika" - }, - "header": { - "login": "Zaloguj się na swoje konto Funkwhale", - "signupFailure": "Twoje konto nie mogło zostać utworzone." - }, - "message": { - "registrationClosed": "Publiczna rejestracja na tej instancji nie jest aktywna. Potrzebujesz zaproszenia, aby się zarejestrować.", - "requiresReview": "Rejestrowanie się na tej instancji jest dozwolone, ale wymaga zatwierdzenia przez jednego z moderatorĆ³w.", - "awaitingReview": "Twoja aplikacja o konto została przesłana. Zostaniesz poinformowany za pomocą wiadomości e-mail kiedy zespĆ³Å‚ moderacyjny ją rozpatrzy.", - "accountCreated": "Twoje konto zostało stworzone z powodzeniem. Zweryfikuj swĆ³j adres e-mail przed prĆ³bą logowania." - } - }, - "Plugin": { - "link": { - "documentation": "Dokumentacja" - }, - "label": { - "pluginEnabled": "Włączony", - "library": "Biblioteka" - }, - "header": { - "failure": "Wystąpił błąd podczas zapisywania rozszerzenia" - }, - "description": { - "library": "Biblioteka, do ktĆ³rej pliki powinny zostać zaimportowane." - }, - "button": { - "save": "Zapisz", - "scan": "Skanuj" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", - "hoursOfMusic": "godzina muzyki | godziny muzyki" + "description": { + "findApp": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji.", + "funkwhale": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, ktĆ³ry pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", + "publicContent": "Słuchaj publicznych albumĆ³w i list odtwarzania udostępnianych na tej instancji.", + "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!", + "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawcĆ³w, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!" }, "header": { - "funkwhale": "Serwis społecznościowy służący do udostępniania i cieszenia się muzyką", "aboutPod": "O tej instancji", - "publicContent": "Przeglądaj publiczne treści", "findApp": "Poznaj kompatybilne aplikacje", + "funkwhale": "Serwis społecznościowy służący do udostępniania i cieszenia się muzyką", + "publicContent": "Przeglądaj publiczne treści", "signup": "Zarejestruj się" }, - "title": "O tej instancji", + "help": { + "closedRegistrations": "Rejestracja nie jest możliwa na tej instancji. Możesz zapisać się na innej używając linka poniżej." + }, "link": { "findOtherPod": "ZnajdÅŗ inną instancję", "learnMore": "Dowiedz się więcej" }, - "description": { - "funkwhale": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, ktĆ³ry pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", - "publicContent": "Słuchaj publicznych albumĆ³w i list odtwarzania udostępnianych na tej instancji.", - "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawcĆ³w, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!", - "findApp": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji.", - "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!" + "message": { + "greeting": "Cześć, {username}", + "loggedIn": "Jesteś już zalogowany!" }, "placeholder": { "noDescription": "Opis nie jest dostępny." }, - "message": { - "loggedIn": "Jesteś już zalogowany!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", - "hoursOfMusic": "{ n } godzina muzyki | { n } godziny muzyki" + "hoursOfMusic": "godzina muzyki | godziny muzyki" + }, + "title": "O tej instancji" + }, + "AboutPod": { + "feature": { + "allowList": "Lista zezwoleń", + "anonymousAccess": "Anonimowy dostęp", + "federation": "Federacja", + "quota": "Limit przestrzeni", + "registrations": "Rejestracje", + "status": { + "closed": "Zamknięte", + "disabled": "Wyłączony", + "enabled": "Włączone", + "open": "Otwarte" + }, + "version": "Wersja Funkwhale" }, "header": { - "aboutFunkwhale": "O Funkwhale", "about": "O tej instancji", "contact": "Kontakt", + "features": "Informacje dodatkowe", + "rules": "Reguły", + "statistics": "Statystyki", + "terms": "Regulamin i polityka prywatności" + }, + "link": { + "about": "O tej instancji", + "features": "Informacje dodatkowe", + "introduction": "Wprowadzenie", + "rules": "Reguły", + "statistics": "Statystyki", + "terms": "Regulamin i polityka prywatności" + }, + "message": { + "contact": "Wyślij nam wiadomość e-mail: {'{{'} contactEmail {'}}'}" + }, + "notApplicable": "Niedostępne", + "placeholder": { + "noDescription": "Opis nie jest dostępny.", + "noRules": "Nie ustalono reguł.", + "noTerms": "Nie ustalono warunkĆ³w." + }, + "stat": { + "activeUsers": "aktywny użytkownik | aktywni użytkownicy", + "albumsCount": "album | albumy", + "artistsCount": "wykonawca | wykonawcĆ³w", + "hoursOfMusic": "godzina muzyki | godziny muzyki", + "listeningsCount": "odsłuchania | odsłuchania", + "tracksCount": "utwĆ³r | utwory" + }, + "title": "O tej instancji" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, ktĆ³ry pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", + "paragraph2": "Funkwhale jest bezpłatny i rozwijany przez przyjazną społeczność wolontariuszy." + }, + "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!", + "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawcĆ³w, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!" + }, + "header": { + "about": "O tej instancji", + "aboutFunkwhale": "O Funkwhale", + "contact": "Kontakt", + "links": "Użyteczne linki", "login": "Zaloguj się", - "newChannels": "Nowe kanały", "newAlbums": "Ostatnio dodane albumy", + "newChannels": "Nowe kanały", "signup": "Zarejestruj się", "statistics": "Statystyki", - "links": "Użyteczne linki", "welcome": "Witaj na { podName }!" }, "link": { - "publicContent": { - "label": "Przeglądaj publiczne treści", - "description": "Słuchaj publicznych albumĆ³w i list odtwarzania udostępnianych na tej instancji" + "findOtherPod": "ZnajdÅŗ inną instancję", + "funkwhale": "OdwiedÅŗ funkwhale.audio", + "learnMore": "Dowiedz się więcej", + "mobileApps": { + "description": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji", + "label": "Aplikacje mobilne" }, + "publicContent": { + "description": "Słuchaj publicznych albumĆ³w i list odtwarzania udostępnianych na tej instancji", + "label": "Przeglądaj publiczne treści" + }, + "rules": "Regulamin serwera", "userGuides": { "description": "Odkryj wszystko, co powinieneś wiedzieć o Funkwhale i jego funkcjach", "label": "Podręczniki użytkownika" }, - "findOtherPod": "ZnajdÅŗ inną instancję", - "learnMore": "Dowiedz się więcej", - "mobileApps": { - "label": "Aplikacje mobilne", - "description": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji" - }, - "rules": "Regulamin serwera", - "viewMore": "Zobacz więcejā€¦", - "funkwhale": "OdwiedÅŗ funkwhale.audio" + "viewMore": "Zobacz więcejā€¦" }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale jest bezpłatny i rozwijany przez przyjazną społeczność wolontariuszy.", - "paragraph1": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, ktĆ³ry pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci." - }, - "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawcĆ³w, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!", - "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!" - }, - "title": "Strona gÅ‚Ć³wna", "placeholder": { "noDescription": "Å»aden opis nie jest dostępny." + }, + "stat": { + "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", + "hoursOfMusic": "{ n } godzina muzyki | { n } godziny muzyki" + }, + "title": "Strona gÅ‚Ć³wna" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Nie odnaleziono strony!" + }, + "link": { + "home": "PrzejdÅŗ na stronę gÅ‚Ć³wną" + }, + "message": { + "pageNotFound": "Przepraszamy, strona ktĆ³rej szukasz nie istnieje:" + }, + "title": "Nie odnaleziono strony" + }, + "Queue": { + "button": { + "clear": "Wyczyść", + "close": "Zamknij", + "stopRadio": "Zatrzymaj radio" + }, + "header": { + "failure": "Ten utwĆ³r nie mĆ³gł zostać wczytany", + "radio": "Słuchasz stacji radiowej" + }, + "label": { + "addArtistContentFilter": "Ukryj zawartość od tego wykonawcyā€¦", + "duration": "Czas trwania", + "next": "Następny utwĆ³r", + "pause": "Wstrzymaj", + "play": "Odtwarzaj", + "previous": "Poprzedni utwĆ³r", + "queue": "Kolejka odtwarzania", + "remove": "Usuń", + "restart": "OdtwĆ³rz utwĆ³r ponownie" + }, + "message": { + "automaticPlay": "Następny utwĆ³r zostanie odtworzony automatycznie w ciągu kilku sekundā€¦", + "radio": "Nowe utwory pojawią się tutaj automatycznie." + }, + "meta": { + "queuePosition": "UtwĆ³r { index } z { length }" + }, + "warning": { + "connectivity": "Możesz mieć problemy z łącznością." + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "Kanał RSS", + "search": "Szukaj" + }, + "description": { + "fediverse": "Użyj tego formularza, aby obserwować kanał znajdujący się gdzieś indziej we Fediverse.", + "rss": "Użyj tego formularza, aby obserwować kanał RSS znajdujący się pod danym adresem URL." + }, + "error": { + "fetchFailed": "Ten obiekt nie mĆ³gł zostać pobrany" + }, + "header": { + "fetchFailed": "Wystąpił błąd podczas pobierania obiektu" + }, + "label": { + "fediverse": { + "fieldLabel": "Obiekt Fediverse", + "title": "Obserwuj podcast z Fediverse" + }, + "rss": { + "fieldLabel": "Lokalizacja kanału RSS", + "fieldPlaceholder": "https://adres.strony/rss.xml", + "title": "Zasubskrybuj kanał RSS podcastu" + } + }, + "warning": { + "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" + } + }, + "SetInstanceModal": { + "button": { + "cancel": "Anuluj", + "submit": "Prześlij" + }, + "header": { + "chooseInstance": "Wybierz instancję", + "failure": "Nie można połączyć się z podanym adresem URL", + "suggestions": "Polecane" + }, + "help": { + "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", + "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do ktĆ³rej chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji.", + "serverDown": "Serwer może być niedostępny" + }, + "label": { + "url": "Adres URL instancji" + }, + "message": { + "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" + } + }, + "ShortcutsModal": { + "button": { + "close": "Zamknij" + }, + "header": { + "modal": "SkrĆ³ty klawiszowe" + }, + "shortcut": { + "audio": { + "clearQueue": "Wyczyść kolejkę odtwarzania", + "decreaseVolume": "Zmniejsz głośność", + "expandQueue": "Rozwiń kolejkę odtwarzania/widok odtwarzacza", + "increaseVolume": "Zwiększ głośność", + "label": "SkrĆ³ty odtwarzacza", + "playNext": "Następny utwĆ³r", + "playPause": "Zatrzymaj/odtwarzaj aktualny utwĆ³r", + "playPrevious": "Poprzedni utwĆ³r", + "seekBack30": "Cofnij o 30 sekund", + "seekBack5": "Cofnij o 5 sekund", + "seekForward30": "Pomiń 30 sekund", + "seekForward5": "Pomiń 5 sekund", + "shuffleQueue": "Wymieszaj kolejkę", + "toggleFavorite": "Dodaj lub usuń z ulubionych", + "toggleLoop": "Włącz zapętlenie kolejki", + "toggleMute": "Przełącz wyciszenie" + }, + "general": { + "focus": "Aktywuj pasek wyszukiwania", + "label": "SkrĆ³ty ogĆ³lne", + "show": "Pokaż dostępne skrĆ³ty klawiszowe", + "unfocus": "Dezaktywuj pasek wyszukiwania" + } + } + }, + "Sidebar": { + "header": { + "administration": "Administracja", + "explore": "Odkrywaj", + "library": "Moja biblioteka", + "main": "GÅ‚Ć³wna nawigacja", + "more": "Więcej" + }, + "label": { + "add": "Dodaj zawartość", + "administration": "Administracja", + "edits": "Edycje oczekujące na rozpatrzenie", + "follows": "Oczekujące prośby o obserwowanie", + "language": "Język", + "main": "Menu gÅ‚Ć³wne", + "play": "Odtwarzaj ten utwĆ³r", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "albums": "Albumy", + "artists": "Artyści", + "browse": "Przeglądaj", + "channels": "Kanały", + "createAccount": "UtwĆ³rz konto", + "favorites": "Ulubione", + "home": "Strona gÅ‚Ć³wna", + "library": "Biblioteka", + "login": "Zaloguj się", + "moderation": "Moderacja", + "playlists": "Listy odtwarzania", + "podcasts": "Podcasty", + "radios": "Stacje radiowe", + "search": "Szukaj", + "settings": "Ustawienia", + "users": "Użytkownicy" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "Zapisz" + }, + "header": { + "error": "Wystąpił błąd podczas zapisywania ustawień", + "image": "Aktualny obraz" + }, + "message": { + "success": "Pomyślnie zapisano ustawienia." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Dodaj nowe pole", + "edit": "Edytuj formularz", + "preview": "Podgląd formularza" + }, + "help": { + "additionalFields": "Dodatkowe pola do wyświetlenia w formularzu rejestracji. Ich zawartość jest widoczna tylko gdy manualna weryfikacja rejestracji jest włączona.", + "helpText": "Opcjonalny tekst, ktĆ³ry będzie widoczny nad formularzem rejestracji." + }, + "label": { + "additionalField": "Dodatkowe pole", + "additionalFields": "Dodatkowe pola", + "delete": "Usuń", + "helpText": "Podręcznik pomocy", + "moveDown": "Przesuń w dĆ³Å‚", + "moveUp": "Przesuń w gĆ³rę" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Działania", + "label": "Etykieta pola", + "required": "Wymagane", + "type": "Typ pola" + }, + "required": { + "false": "Nie", + "true": "Tak" + }, + "type": { + "long": "Długi tekst", + "short": "KrĆ³tki tekst" + } + } + } } }, "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } epizod | { n } epizody", - "tracks": "{ n } utwĆ³r | { n } utwory" - } - }, - "Widget": { - "button": { - "more": "Pokaż więcej" - } - } - }, "ChannelCard": { "meta": { "episodes": "{ n } epizod | { n } epizody", @@ -429,249 +365,49 @@ }, "title": "Aktualizowany { date }" }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } epizod | { n } epizody" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } utwĆ³r | { n } utwory" - } - }, - "Widget": { - "button": { - "more": "Pokaż więcej" - } - } - }, - "Player": { - "meta": { - "position": "{ index } z { length }" - }, - "header": { - "player": "Odtwarzacz i jego skrĆ³ty" - }, - "label": { - "clearQueue": "Wyczyść kolejkę odtwarzania", - "expandQueue": "Rozwiń kolejkę odtwarzania", - "addArtistContentFilter": "Ukryj zawartość od tego wykonawcyā€¦", - "loopingDisabled": "Zapętlanie jest wyłączone. Naciśnij, aby przełączyć na zapętlanie jednego utworu.", - "loopingSingle": "Zapętlanie jednego utworu jest włączone. Naciśnij, aby przełączyć na zapętlanie całej kolejki odtwarzania.", - "loopingWholeQueue": "Zapętlanie całej kolejki jest włączone. Naciśnij, aby wyłączyć zapętlanie.", - "audioPlayer": "Odtwarzacz multimediĆ³w", - "mute": "Wycisz", - "nextTrack": "Następny utwĆ³r", - "pause": "Wstrzymaj", - "play": "Odtwarzaj", - "previousTrack": "Poprzedni utwĆ³r", - "shuffleQueue": "Wymieszaj swoją kolejkę", - "unmute": "Odcisz" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Dodaj do kolejki odtwarzania", - "addToPlaylist": "Dodaj do listy odtwarzaniaā€¦", - "episodeDetails": "SzczegĆ³Å‚y odcinka", - "hideArtist": "Ukryj zawartość od tego wykonawcy", - "discretePlay": "Odtwarzaj", - "playAlbum": "Odtwarzaj album", - "playArtist": "Odtwarzaj wykonawcę", - "playNext": "OdtwĆ³rz następny", - "playNow": "OdtwĆ³rz teraz", - "playPlaylist": "Odtwarzaj listę odtwarzania", - "startRadio": "Odtwarzaj podobne utwory", - "playTrack": "Odtwarzaj utwĆ³r", - "playTracks": "Odtwarzaj utwory", - "report": "Zgłośā€¦", - "trackDetails": "SzczegĆ³Å‚y utworu" - }, - "title": { - "more": "Więcejā€¦", - "unavailable": "Ten utwĆ³r nie jest dostępny w żadnej z bibliotek, do ktĆ³rych masz dostęp" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Dodaj do ulubionych", - "addToPlaylist": "Dodaj do listy odtwarzaniaā€¦", - "addToQueue": "Dodaj do kolejki odtwarzania", - "episodeDetails": "SzczegĆ³Å‚y odcinka", - "playNext": "OdtwĆ³rz następny", - "playNow": "OdtwĆ³rz teraz", - "startRadio": "Odtwarzaj stację radiową", - "removeFromFavorites": "Usuń z ulubionych", - "trackDetails": "SzczegĆ³Å‚y utworu", - "albumDetails": "Zobacz album", - "artistDetails": "Zobacz wykonawcę", - "channelDetails": "Zobacz kanał", - "seriesDetails": "Zobacz serial" - } - }, - "MobileRow": { - "button": { - "actions": "Wyświetl akcje dla utworu" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Dodaj do ulubionych", - "addToPlaylist": "Dodaj do listy odtwarzaniaā€¦", - "addToQueue": "Dodaj do kolejki odtwarzania", - "episodeDetails": "SzczegĆ³Å‚y odcinka", - "playNext": "OdtwĆ³rz następny", - "playNow": "OdtwĆ³rz teraz", - "startRadio": "Odtwarzaj stację radiową", - "removeFromFavorites": "Usuń z ulubionych", - "trackDetails": "SzczegĆ³Å‚y utworu", - "albumDetails": "Zobacz album", - "artistDetails": "Zobacz wykonawcę", - "channelDetails": "Zobacz kanał", - "seriesDetails": "Zobacz serial" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "title": "Tytuł" - } - } - }, - "Widget": { - "empty": { - "noResults": "Niczego tu nie ma" - }, - "button": { - "more": "Pokaż więcej" - } - }, - "MobileRow": { - "button": { - "actions": "Wyświetl akcje dla utworu" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Dostosuj głośność" - }, - "button": { - "mute": "Wycisz", - "unmute": "Odcisz" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Wykonawca", - "category": { - "federation": "Federacja", - "podcasts": "Podcasty" - }, - "search": "Szukaj treści", - "tag": "Tag", - "track": "UtwĆ³r" - }, - "link": { - "more": "Więcej wynikĆ³w šŸ”’", - "fediverse": "Szukaj we fediverse", - "rss": "Zasubskrybuj podcast za pomocą RSS" - }, - "header": { - "noResults": "Nie znaleziono wynikĆ³w" - }, - "placeholder": { - "search": "Szukaj wykonawcĆ³w, albumĆ³w, utworĆ³wā€¦" - }, - "empty": { - "noResults": "Przepraszamy, to wyszukiwanie nie zwrĆ³ciło wynikĆ³w" - } - }, - "Search": { - "header": { - "albums": "Albumy", - "artists": "Artyści", - "search": "Poszukaj trochę muzyki" - }, - "placeholder": { - "search": "Wykonawca, album, utwĆ³rā€¦" - }, - "empty": { - "noAlbums": "Nie znaleziono albumu spełniającego Twoje kryteria", - "noArtists": "Nie znaleziono wykonawcĆ³w spełniających Twoje kryteria" + "ChannelEntries": { + "help": { + "subscribe": "Powinieneś śledzić ten kanał, aby zobaczyć jego zawartość." } }, "ChannelForm": { - "label": { - "discography": "Dyskografia wykonawcy", - "category": "Kategoria", - "image": "Obrazek kanału", - "description": "Opis", - "username": "Nazwa we Fediverse", - "language": "Język", - "name": "Nazwa", - "email": "Adres e-mail właściciela", - "owner": "Nazwa posiadacza", - "podcast": "Podcasty", - "subcategory": "Podkategoria", - "tags": "Tagi" - }, - "placeholder": { - "name": "Wspaniała nazwa kanału", - "username": "wspaniałanazwakanału" - }, "header": { "error": "Wystąpił błąd podczas zapisywania kanału" }, "help": { - "podcast": "Publikuj swoje odcinki i informuj o tym swoją społeczność na bieżąco.", "discography": "Opublikuj muzykę ktĆ³rą tworzysz, jako fajną dyskografię podzieloną na albumy i single.", + "podcast": "Publikuj swoje odcinki i informuj o tym swoją społeczność na bieżąco.", "podcastFields": "Używane do wypełnienia pĆ³l itunes:email oraz itunes:name wymaganych przez pewne platformy jak iTunes czy Spotify.", "username": "Używana w adresie URL i do obserwacji tego kanału we Fediverse. Nie możesz zmienić jej pĆ³Åŗniej." }, + "label": { + "category": "Kategoria", + "description": "Opis", + "discography": "Dyskografia wykonawcy", + "email": "Adres e-mail właściciela", + "image": "Obrazek kanału", + "language": "Język", + "name": "Nazwa", + "owner": "Nazwa posiadacza", + "podcast": "Podcasty", + "subcategory": "Podkategoria", + "tags": "Tagi", + "username": "Nazwa we Fediverse" + }, + "legend": { + "purpose": "Do czego używany będzie ten kanał?" + }, "loader": { "loading": "Ładowanie" }, - "legend": { - "purpose": "Do czego używany będzie ten kanał?" + "placeholder": { + "name": "Wspaniała nazwa kanału", + "username": "wspaniałanazwakanału" } }, - "LibraryFollowButton": { - "button": { - "cancel": "Cofnij prośbę o obserwowanie", - "follow": "Obserwuj", - "unfollow": "Przestań obserwować" - } - }, - "EmbedWizard": { - "button": { - "copy": "Kopiuj" - }, - "help": { - "embed": "Wklej ten kod do ÅŗrĆ³dła HTML swojej strony internetowej", - "width": "Pozostaw puste, aby uzyskać elastyczny widget", - "anonymous": "Skontaktuj się z administracją i poproś o zmianę odpowiedniego ustawienia." - }, - "label": { - "embed": "Kod osadzenia", - "height": "Wysokość widgetu", - "width": "Szerokość widgetu" - }, - "header": { - "preview": "Podgląd" - }, - "warning": { - "anonymous": "Udostępnianie nie będzie działało ponieważ ta instancja nie pozwala anonimowym użytkownikom na dostęp do treści." - }, - "message": { - "copy": "Skopiowano tekst do schowka!" + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } epizod | { n } epizody" } }, "ChannelSeries": { @@ -687,28 +423,1055 @@ "showMore": "Pokaż więcej" } }, - "ChannelEntries": { + "EmbedWizard": { + "button": { + "copy": "Kopiuj" + }, + "header": { + "preview": "Podgląd" + }, "help": { - "subscribe": "Powinieneś śledzić ten kanał, aby zobaczyć jego zawartość." + "anonymous": "Skontaktuj się z administracją i poproś o zmianę odpowiedniego ustawienia.", + "embed": "Wklej ten kod do ÅŗrĆ³dła HTML swojej strony internetowej", + "width": "Pozostaw puste, aby uzyskać elastyczny widget" + }, + "label": { + "embed": "Kod osadzenia", + "height": "Wysokość widgetu", + "width": "Szerokość widgetu" + }, + "message": { + "copy": "Skopiowano tekst do schowka!" + }, + "warning": { + "anonymous": "Udostępnianie nie będzie działało ponieważ ta instancja nie pozwala anonimowym użytkownikom na dostęp do treści." } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cofnij prośbę o obserwowanie", + "follow": "Obserwuj", + "unfollow": "Przestań obserwować" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Dodaj do listy odtwarzaniaā€¦", + "addToQueue": "Dodaj do kolejki odtwarzania", + "discretePlay": "Odtwarzaj", + "episodeDetails": "SzczegĆ³Å‚y odcinka", + "hideArtist": "Ukryj zawartość od tego wykonawcy", + "playAlbum": "Odtwarzaj album", + "playArtist": "Odtwarzaj wykonawcę", + "playNext": "OdtwĆ³rz następny", + "playNow": "OdtwĆ³rz teraz", + "playPlaylist": "Odtwarzaj listę odtwarzania", + "playTrack": "Odtwarzaj utwĆ³r", + "playTracks": "Odtwarzaj utwory", + "report": "Zgłośā€¦", + "startRadio": "Odtwarzaj podobne utwory", + "trackDetails": "SzczegĆ³Å‚y utworu" + }, + "title": { + "more": "Więcejā€¦", + "unavailable": "Ten utwĆ³r nie jest dostępny w żadnej z bibliotek, do ktĆ³rych masz dostęp" + } + }, + "Player": { + "header": { + "player": "Odtwarzacz i jego skrĆ³ty" + }, + "label": { + "addArtistContentFilter": "Ukryj zawartość od tego wykonawcyā€¦", + "audioPlayer": "Odtwarzacz multimediĆ³w", + "clearQueue": "Wyczyść kolejkę odtwarzania", + "expandQueue": "Rozwiń kolejkę odtwarzania", + "loopingDisabled": "Zapętlanie jest wyłączone. Naciśnij, aby przełączyć na zapętlanie jednego utworu.", + "loopingSingle": "Zapętlanie jednego utworu jest włączone. Naciśnij, aby przełączyć na zapętlanie całej kolejki odtwarzania.", + "loopingWholeQueue": "Zapętlanie całej kolejki jest włączone. Naciśnij, aby wyłączyć zapętlanie.", + "mute": "Wycisz", + "nextTrack": "Następny utwĆ³r", + "pause": "Wstrzymaj", + "play": "Odtwarzaj", + "previousTrack": "Poprzedni utwĆ³r", + "shuffleQueue": "Wymieszaj swoją kolejkę", + "unmute": "Odcisz" + }, + "meta": { + "position": "{ index } z { length }" + } + }, + "Search": { + "empty": { + "noAlbums": "Nie znaleziono albumu spełniającego Twoje kryteria", + "noArtists": "Nie znaleziono wykonawcĆ³w spełniających Twoje kryteria" + }, + "header": { + "albums": "Albumy", + "artists": "Artyści", + "search": "Poszukaj trochę muzyki" + }, + "placeholder": { + "search": "Wykonawca, album, utwĆ³rā€¦" + } + }, + "SearchBar": { + "empty": { + "noResults": "Przepraszamy, to wyszukiwanie nie zwrĆ³ciło wynikĆ³w" + }, + "header": { + "noResults": "Nie znaleziono wynikĆ³w" + }, + "label": { + "album": "Album", + "artist": "Wykonawca", + "category": { + "federation": "Federacja", + "podcasts": "Podcasty" + }, + "search": "Szukaj treści", + "tag": "Tag", + "track": "UtwĆ³r" + }, + "link": { + "fediverse": "Szukaj we fediverse", + "more": "Więcej wynikĆ³w šŸ”’", + "rss": "Zasubskrybuj podcast za pomocą RSS" + }, + "placeholder": { + "search": "Szukaj wykonawcĆ³w, albumĆ³w, utworĆ³wā€¦" + } + }, + "VolumeControl": { + "button": { + "mute": "Wycisz", + "unmute": "Odcisz" + }, + "label": { + "slider": "Dostosuj głośność" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } utwĆ³r | { n } utwory" + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } epizod | { n } epizody", + "tracks": "{ n } utwĆ³r | { n } utwory" + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Wyświetl akcje dla utworu" + } + }, + "Modal": { + "button": { + "addToFavorites": "Dodaj do ulubionych", + "addToPlaylist": "Dodaj do listy odtwarzaniaā€¦", + "addToQueue": "Dodaj do kolejki odtwarzania", + "albumDetails": "Zobacz album", + "artistDetails": "Zobacz wykonawcę", + "channelDetails": "Zobacz kanał", + "episodeDetails": "SzczegĆ³Å‚y odcinka", + "playNext": "OdtwĆ³rz następny", + "playNow": "OdtwĆ³rz teraz", + "removeFromFavorites": "Usuń z ulubionych", + "seriesDetails": "Zobacz serial", + "startRadio": "Odtwarzaj stację radiową", + "trackDetails": "SzczegĆ³Å‚y utworu" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Wyświetl akcje dla utworu" + } + }, + "Modal": { + "button": { + "addToFavorites": "Dodaj do ulubionych", + "addToPlaylist": "Dodaj do listy odtwarzaniaā€¦", + "addToQueue": "Dodaj do kolejki odtwarzania", + "albumDetails": "Zobacz album", + "artistDetails": "Zobacz wykonawcę", + "channelDetails": "Zobacz kanał", + "episodeDetails": "SzczegĆ³Å‚y odcinka", + "playNext": "OdtwĆ³rz następny", + "playNow": "OdtwĆ³rz teraz", + "removeFromFavorites": "Usuń z ulubionych", + "seriesDetails": "Zobacz serial", + "startRadio": "Odtwarzaj stację radiową", + "trackDetails": "SzczegĆ³Å‚y utworu" + } + }, + "Table": { + "table": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "title": "Tytuł" + } + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + }, + "empty": { + "noResults": "Niczego tu nie ma" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "StwĆ³rz nowy token" + }, + "header": { + "appDetails": "SzczegĆ³Å‚y aplikacji", + "editApp": "Edytuj aplikację" + }, + "help": { + "appDetails": "Identyfikator i sekret aplikacji są danymi wrażliwymi i powinny być traktowane jak hasła. Nie powinieneś się nimi z nikim dzielić." + }, + "label": { + "accessToken": "Token dostępowy", + "appId": "Identyfikator aplikacji", + "appSecret": "Sekret aplikacji" + }, + "link": { + "settings": "WrĆ³Ä‡ do ustawień" + }, + "title": "Edytuj aplikację" + }, + "ApplicationForm": { + "button": { + "create": "UtwĆ³rz aplikację", + "update": "Zapisz aplikację" + }, + "header": { + "failure": "Nie udało się zapisać Twoich zmian" + }, + "help": { + "redirectUri": "Użyj \"urn:ietf:wg:oauth:2.0:oob\" jako URI przekierowania, jeśli twoja aplikacja nie jest dostępna w sieci web." + }, + "label": { + "name": "Nazwa", + "redirectUri": "Adres URI przekierowania", + "scopes": { + "description": "Zaznaczenie nadrzędnych zakresĆ³w dostępu ā€žOdczytā€ lub ā€žZapisā€ umożliwia dostęp do wszystkich odpowiednich zakresĆ³w podrzędnych.", + "read": { + "description": "Dostęp do odczytu danych użytkownika", + "label": "Odczyt" + }, + "write": { + "description": "Dostęp do zapisu danych użytkownika", + "label": "Zapis" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "WrĆ³Ä‡ do ustawień" + }, + "title": "UtwĆ³rz nową aplikację" + }, + "Authorize": { + "button": { + "authorize": "Autoryzuj { app }" + }, + "header": { + "access": "Aplikacja { app } chciałaby uzyskać dostęp do twojego konta Funkwhale", + "allScopes": "Pełen dostęp", + "authorize": "Autoryzuj zewnętrzną aplikację", + "authorizeFailure": "Wystąpił błąd podczas autoryzowania aplikacji", + "fetchFailure": "Wystąpił błąd podczas pobierania danych aplikacji", + "readOnly": "Tylko do odczytu", + "writeOnly": "Tylko do zapisu" + }, + "help": { + "copyCode": "Pokazany zostanie kod do wklejenia w aplikacji.", + "pasteCode": "Wklej następujący kod do aplikacji:", + "redirect": "Zostaniesz przekierowany na { 0 }" + }, + "message": { + "unknownPermissions": "Aplikacja prosi też o następujące nieznane uprawnienia:" + }, + "title": "Autoryzuj aplikację" + }, + "LoginForm": { + "button": { + "login": "Zaloguj się" + }, + "header": { + "loginFailure": "Nie udało się Cię zalogować" + }, + "help": { + "approvalRequired": "Jeżeli niedawno się rejestrowałeś, może być koniecznie odczekanie, aż zespĆ³Å‚ moderujący rozpatrzy twoją aplikację.", + "invalidCredentials": "Upewnij się, że Twoja kombinacja nazwy użytkownika i hasła są poprawne oraz zweryfikuj poprawność adresu e-mail." + }, + "label": { + "password": "Hasło", + "username": "Nazwa użytkownika lub adres e-mail" + }, + "link": { + "createAccount": "UtwĆ³rz konto", + "resetPassword": "Zresetuj hasło" + }, + "placeholder": { + "username": "WprowadÅŗ swoją nazwę użytkownika lub adres e-mail" + } + }, + "Logout": { + "button": { + "logout": "Tak, wyloguj mnie!" + }, + "header": { + "confirm": "Czy na pewno chcesz się wylogować?", + "unauthenticated": "Nie jesteś obecnie zalogowany(-a)" + }, + "link": { + "login": "Zaloguj się!" + }, + "message": { + "loggedIn": "Jesteś obecnie zalogowany jako { username }" + }, + "title": "Wyloguj się" + }, + "Plugin": { + "button": { + "save": "Zapisz", + "scan": "Skanuj" + }, + "description": { + "library": "Biblioteka, do ktĆ³rej pliki powinny zostać zaimportowane." + }, + "header": { + "failure": "Wystąpił błąd podczas zapisywania rozszerzenia" + }, + "label": { + "library": "Biblioteka", + "pluginEnabled": "Włączony" + }, + "link": { + "documentation": "Dokumentacja" + } + }, + "Settings": { + "button": { + "delete": "Usuń", + "deleteAccount": "Usuń moje kontoā€¦", + "deleteAccountConfirm": "Usuń moje konto", + "disableSubsonic": "Wyłącz dostęp", + "edit": "Edytuj", + "password": "Zmień hasło", + "refresh": "Odśwież", + "remove": "Usuń", + "removeApp": "Usuń aplikację", + "revoke": "Odwołaj", + "revokeAccess": "Odwołaj dostęp", + "update": "Zapisz", + "updateSettings": "Zapisz ustawienia" + }, + "description": { + "authorizedApps": "To jest lista aplikacji, ktĆ³re mają dostęp do informacji Twojego konta.", + "changeEmail": "Zmień adres e-mail powiązany z tym kontem. Na nowy adres zostanie wysłane potwierdzenie.", + "changePassword": { + "paragraph1": "Zmiana Twojego hasła zmieni też hasło do API Subsonic, jeśli je uzyskałeś(-aś).", + "paragraph2": "Będziesz musiał zaktualizować hasło w aplikacjach ktĆ³re go używają." + }, + "contentFilters": "Filtry treści pomogą Ci ukryć treści, ktĆ³rych nie chcesz widzieć w serwisie.", + "deleteAccount": "Możesz permanentnie i nieodwracalnie skasować swoje konto i wszystkie powiązane informacje używając pĆ³l poniżej. Zostaniesz poproszony o potwierdzenie tej czynności.", + "plugins": "Użyj rozszerzeń do Funkwhale i zyskaj dodatkowe funkcjonalności.", + "yourApps": "To jest lista aplikacji, ktĆ³re zarejestrowałeś(-aś)." + }, + "header": { + "accountFailure": "Nie udało się usunąć Twojego konta", + "accountSettings": "Ustawienia konta", + "authorizedApps": "Autoryzowane aplikacje", + "avatar": "Awatar", + "avatarFailure": "Nie można było zapisać twojego awatara", + "changeEmail": "Zmień swĆ³j adres e-mail", + "changePassword": "Zmień swoje hasło", + "contentFilters": "Filtry treści", + "deleteAccount": "Usuń moje konto", + "emailFailure": "Nie udało się zmienić Twojego adresu e-mail", + "hiddenArtists": "Ukryci wykonawcy", + "noApps": "Å»adna aplikacja nie jest połączona z Twoim kontem.", + "noPersonalApps": "Nie zarejestrowałeś jeszcze żadnej aplikacji.", + "passwordFailure": "Twoje hasło nie mogło zostać zmienione", + "plugins": "Rozszerzenia", + "settingsUpdated": "Zapisano ustawienia", + "updateFailure": "Twoje ustawienia nie mogły zostać zapisane", + "yourApps": "Twoje aplikacje" + }, + "help": { + "changePassword": "Upewnij się, że Twoje hasło jest poprawne", + "noApps": "Jeśli zezwolisz jakimś zewnętrznym aplikacjom na dostęp do twoich danych, te aplikacje pojawią się tutaj.", + "noPersonalApps": "Zarejestruj jakąś, aby zintegrować Funkwhale z innymi aplikacjami." + }, + "label": { + "avatar": "Awatar", + "currentPassword": "Aktualne hasło", + "newEmail": "Nowy adres e-mail", + "newPassword": "Nowe hasło", + "password": "Hasło" + }, + "link": { + "managePlugins": "Zarządzaj rozszerzeniami", + "newApp": "Zarejestruj nową aplikację" + }, + "message": { + "confirmDelete": "Żądanie o usunięcie konta zostało przesłane. Twoje konto i powiązane z nim treści zostaną wkrĆ³tce usunięte", + "currentEmail": "TwĆ³j obecny adres e-mail to { email }." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Zostaniesz wylogowany i będziesz musiał zalogować się nowym hasłem", + "subsonic": "Twoje hasło do API Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urządzeń korzystających ze starego hasła do API Subsonic", + "warning": "Zmiana hasła będzie miała następujące konsekwencje:" + }, + "header": "Zmienić Twoje hasło?" + }, + "deleteAccount": { + "content": { + "warning": "To jest nieodwracalne i permanentnie usunie Twoje dane z naszych serwerĆ³w. Zostaniesz natychmiast wylogowany(-a)." + }, + "header": "Czy na pewno chcesz usunąć swoje konto?" + }, + "deleteApp": { + "content": { + "warning": "To permanentnie usunie aplikację i wszystkie powiązane tokeny." + }, + "header": "Usunąć aplikację ā€ž{ application }ā€?" + }, + "revokeApp": { + "content": { + "warning": "To uniemożliwi tej aplikacji dostęp do usługi w Twoim imieniu." + }, + "header": "Czy odwołać dostęp dla aplikacji ā€ž{ application }ā€?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data utworzenia", + "name": "Nazwa" + } + }, + "authorizedApps": { + "header": { + "application": "Aplikacja", + "permissions": "Uprawnienia" + } + }, + "yourApps": { + "header": { + "application": "Aplikacja", + "creationDate": "Data utworzenia", + "scopes": "Zakresy dostępu" + } + } + }, + "title": "Ustawienia konta", + "warning": { + "deleteAccount": "Twoje konto zostanie usunięte z naszych serwerĆ³w w ciągu kilku minut. Poinformujemy też inne serwery, ktĆ³re mogą mieć kopię twoich danych, aby przystąpiły do usuwania. WeÅŗ pod uwagę, że niektĆ³re serwery mogą być wyłączone, albo nie chcieć wspĆ³Å‚pracować." + } + }, + "SignupForm": { + "button": { + "create": "UtwĆ³rz konto" + }, + "header": { + "login": "Zaloguj się na swoje konto Funkwhale", + "signupFailure": "Twoje konto nie mogło zostać utworzone." + }, + "label": { + "email": "Adres e-mail", + "password": "Hasło", + "username": "Nazwa użytkownika" + }, + "message": { + "accountCreated": "Twoje konto zostało stworzone z powodzeniem. Zweryfikuj swĆ³j adres e-mail przed prĆ³bą logowania.", + "awaitingReview": "Twoja aplikacja o konto została przesłana. Zostaniesz poinformowany za pomocą wiadomości e-mail kiedy zespĆ³Å‚ moderacyjny ją rozpatrzy.", + "registrationClosed": "Publiczna rejestracja na tej instancji nie jest aktywna. Potrzebujesz zaproszenia, aby się zarejestrować.", + "requiresReview": "Rejestrowanie się na tej instancji jest dozwolone, ale wymaga zatwierdzenia przez jednego z moderatorĆ³w." + }, + "placeholder": { + "email": "WprowadÅŗ swĆ³j adres e-mail", + "invitation": "WprowadÅŗ swĆ³j kod zaproszenia (wielkość znakĆ³w nie ma znaczenia)", + "username": "WprowadÅŗ swoją nazwę użytkownika" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Wyłącz dostęp", + "confirmNewPassword": "Poproś o hasło", + "disable": "Wyłącz dostęp Subsonic", + "newPassword": "Poproś o nowe hasło" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsługującymi API Subsonic.", + "paragraph2": "Możesz użyć tego, aby cieszyć się swoją muzyką w trybie offline, na przykład na smartfonie czy tablecie.", + "paragraph3": "Korzystanie z Funkwhale za pomocą tych aplikacji wymaga jednak oddzielnego hasła, ktĆ³re możesz ustawić poniżej." + } + }, + "header": { + "error": "Błąd", + "subsonic": "Hasło do API Subsonic" + }, + "label": { + "subsonicField": "Twoje hasło do API Subsonic" + }, + "link": { + "apps": "Odkryj, jak korzystać z Funkwhale za pomocą innych aplikacji" + }, + "message": { + "accessDisabled": "Dostęp wyłączony", + "passwordUpdated": "Zaktualizowano hasło", + "unavailable": "API Subsonic nie jest dostępne na tej instancji Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "To całkowicie wyłączy dostęp do API Subsonic z tego konta." + }, + "header": "Wyłączyć dostęp do API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "To wyloguje Cię z urządzeń na ktĆ³rych jesteś obecnie zalogowany." + }, + "header": "Poprosić o nowe hasło do API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Wystąpił błąd podczas tworzenia" + }, + "label": { + "albumTitle": "Tytuł" + } + }, + "AlbumModal": { + "button": { + "cancel": "Anuluj", + "create": "UtwĆ³rz" + }, + "header": { + "newAlbum": "Nowy album", + "newSeries": "Nowy serial" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Seriale" + }, + "meta": { + "tracks": "{ n } utwĆ³r | { n } utwory" + }, + "option": { + "none": "Nic" + } + }, + "LicenseSelect": { + "label": { + "license": "Licencja" + }, + "link": { + "license": "O tej licencji" + }, + "option": { + "none": "Nic" + } + }, + "SubscribeButton": { + "help": { + "auth": "Musisz być zalogowany, aby obserwować ten kanał" + }, + "title": { + "subscribe": "Obserwuj", + "unsubscribe": "Przestań obserwować" + } + }, + "UploadForm": { + "button": { + "edit": "Edytuj", + "ignore": "Ignoruj", + "remove": "Usuń", + "resume": "WznĆ³w", + "retry": "SprĆ³buj ponownie" + }, + "description": { + "extensions": "Wspierane rozszerzenia: { extensions }" + }, + "header": { + "error": "Wystąpił błąd podczas publikowania" + }, + "help": { + "license": "Wybierz na jakiej licencji będą dostępne zamieszczone treści, aby zapewnić pewne wolności swojej publice." + }, + "label": { + "channel": "Kanał", + "openBrowser": "Przeglądajā€¦" + }, + "message": { + "dragAndDrop": "Przeciągnij i upuść pliki lub katalogi bądÅŗ po prostu kliknij, aby wybrać pliki do przesłania", + "pending": "Masz jakieś pliki oczekujące na publikację." + }, + "status": { + "errored": "Zakończono błędem", + "pending": "W toku", + "uploading": "Przesyłanie" + }, + "warning": { + "quota": "Nie masz więcej wolnego miejsca na swoje pliki. Skontaktuj się z moderatorem celem zwiększenia przydziału lub usuń trochę treści." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Opis", + "image": "Obrazek utworu", + "position": "Pozycja", + "tags": "Tagi", + "title": "Tytuł" + } + }, + "UploadModal": { + "button": { + "cancel": "Anuluj", + "close": "Zamknij", + "finishLater": "Ukończ pĆ³Åŗniej", + "next": "Następny krok", + "previous": "Poprzedni krok", + "publish": "Opublikuj", + "update": "Zaktualizuj" + }, + "header": { + "processing": "Przetwarzanie przesłanych plikĆ³w", + "publish": "Publikuj audio", + "uploadDetails": "SzczegĆ³Å‚y pliku", + "uploadFiles": "Pliki do przesłania" + }, + "meta": { + "files": "{ n } plik | { n } pliki", + "quota": "Pozostałe wolne miejsce:" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Wybrano { n } element | Wybrano { n } elementy", + "go": "Wykonaj", + "launch": "Wykonaj", + "refresh": "Odśwież zawartość tabeli", + "select": "Wybierz", + "selectAll": "Zaznacz wszystkie elementy", + "selectCurrentPage": "Zaznacz tylko obecną stronę", + "selectElement": "Zaznacz jeden element | Zaznacz wszystkie { n } elementy", + "selected": "Wybrano { n } z { total } | Wybrano { n } z { total }" + }, + "header": { + "error": "Wystąpił błąd podczas aplikowania działania" + }, + "label": { + "actions": "Działania", + "performAction": "Wykonaj akcje" + }, + "message": { + "needsRefresh": "Treść została zaktualizowana - odśwież, aby zobaczyć aktualną treść", + "success": "Działanie { action } zostało pomyślnie wykonane na { n } elemencie | Działanie { action } zostało pomyślnie wykonane na { n } elementach" + }, + "modal": { + "performAction": { + "content": { + "warning": "Może to wpływać na wiele rzeczy lub mieć nieodwracalne skutki, sprawdÅŗ dwukrotnie czy to na pewno to, czego chcesz." + }, + "header": "Czy chcesz wykonać działanie { action } na { n } elemencie? | Czy chcesz wykonać działanie { action } na { n } elementach?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Usuń" + }, + "header": { + "failure": "Nie można było zapisać twojego załącznika" + }, + "help": { + "upload": "PNG lub JPG. Rozdzielczość powinna mieścić się w przedziale między 1400x1400px a 3000x3000px. Maksymalny rozmiar pliku to 5 MB." + }, + "label": { + "upload": "Prześlij nowy obrazā€¦" + }, + "loader": { + "uploading": "Przesyłanie plikuā€¦" + } + }, + "CollapseLink": { + "button": { + "collapse": "Zwiń", + "expand": "Rozwiń" + } + }, + "ContentForm": { + "button": { + "preview": "Podgląd", + "write": "Zapisz" + }, + "empty": { + "noContent": "Nie ma nic do podglądu." + }, + "help": { + "markdown": "Formatowanie za pomocą składni Markdown jest wspierane." + }, + "placeholder": { + "input": "Napisz tutaj kilka sÅ‚Ć³wā€¦" + } + }, + "CopyInput": { + "button": { + "copy": "Kopiuj" + }, + "message": { + "success": "Skopiowano tekst do schowka!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Anuluj", + "confirm": "PotwierdÅŗ" + }, + "header": { + "confirm": "Czy chcesz potwierdzić to działanie?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } godz. { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Odśwież" + }, + "header": { + "noResults": "Nic nie znaleziono." + } + }, + "ExpandableDiv": { + "button": { + "less": "Pokaż mniej", + "more": "Pokaż więcej" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Wyczyść" + }, + "label": { + "search": "Szukaj" + }, + "placeholder": { + "search": "Szukajā€¦" + } + }, + "LoginModal": { + "description": { + "noAccess": "Nie masz dostępu!" + }, + "header": { + "unauthenticated": "Nie uwierzytelniono" + }, + "link": { + "login": "Zaloguj się", + "signup": "Zarejestruj się" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Anuluj", + "edit": "Edytuj", + "less": "Pokaż mniej", + "more": "Pokaż więcej", + "update": "Zapisz opis" + }, + "empty": { + "noDescription": "Å»aden opis nie jest dostępny" + }, + "header": { + "failure": "Wystąpił błąd podczas aktualizowania opisu" + } + }, + "UserMenu": { + "label": { + "language": "Język", + "shortcuts": "SkrĆ³ty klawiszowe", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "chat": "PokĆ³j czatowy", + "docs": "Dokumentacja", + "forum": "Forum dyskusyjne", + "git": "Zgłoś problem", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "notifications": "Powiadomienia", + "profile": "Profil", + "settings": "Ustawienia", + "signup": "Zarejestruj się", + "support": "Podręcznik pomocy" + } + }, + "UserModal": { + "button": { + "switchInstance": "Skorzystaj z innej instancji" + }, + "header": { + "options": "Opcje" + }, + "label": { + "language": "Język", + "shortcuts": "SkrĆ³ty klawiszowe", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "chat": "PokĆ³j czatowy", + "forum": "Forum dyskusyjne", + "git": "Zgłoś problem", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "notifications": "Powiadomienia", + "profile": "Profil", + "settings": "Ustawienia", + "signup": "Zarejestruj się", + "support": "Podręcznik pomocy" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Nie dodałeś jeszcze żadnych utworĆ³w do Twoich ulubionych" + }, + "header": { + "favorites": "{ n } polubienie | { n } polubienia" + }, + "link": { + "library": "Przeglądaj bibliotekę" + }, + "loader": { + "loading": "Ładowanie Twoich ulubionychā€¦" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "title": "Twoje ulubione" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Dodaj do ulubionych", + "remove": "Usuń z ulubionych" + }, + "label": { + "inFavorites": "W ulubionych" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Zamknij", + "reload": "Zamknij i odśwież stronę" + }, + "description": { + "failure": "Podczas prĆ³by odświeżenia danych wystąpił błąd:", + "pending": "Serwer nie obsłużył żądania odświeżenia na czas. Zostanie ono przetworzone pĆ³Åŗniej.", + "skipped": "Zdalny serwer odpowiedział, ale zwrĆ³cił nie wspierane przez Funkwhale dane.", + "success": "Dane zostały pomyślnie odświeżone ze zdalnego serwera." + }, + "header": { + "failure": "Błąd odswieżania", + "pending": "Odświeżanie w toku", + "refresh": "Odświeżanie obiektu z serwera zdalnegoā€¦", + "saveFailure": "Wystąpił błąd podczas zapisywania ustawień", + "skipped": "Odświeżanie zostało pominięte", + "success": "Odświeżanie zakończone sukcesem" + }, + "loader": { + "awaitingResult": "Ładowanie zdalnych wynikĆ³wā€¦", + "fetchRequest": "Pobieranieā€¦" + }, + "table": { + "error": { + "label": { + "detail": "SzczegĆ³Å‚y błędu", + "type": "Typ błędu" + }, + "value": { + "connectionError": "Nie można połączyć się ze zdalnym serwerem", + "httpError": "Wystąpił błąd HTTP podczas kontaktowania się ze zdalnym serwerem", + "httpStatus": "Zdalny serwer odpowiedział ze statusem HTTP { status }", + "invalidAttributesError": "Dane zwrĆ³cone przez serwer zdalny miały nieprawidłowe lub brakujące atrybuty", + "invalidJsonError": "Zdalny serwer zwrĆ³cił dane nie będące poprawnym JSON lub JSON-LD", + "timeoutError": "Zdalny serwer nie odpowiedział wystarczająco szybko", + "unknownError": "Nieznany błąd" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Pokaż więcej" + }, + "empty": { + "noMatch": "Nie znaleziono pasującej biblioteki." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Kopiuj" + }, + "message": { + "copy": "Skopiowano tekst do schowka!" + }, + "title": "Pokaż/ukryj hasło" } }, "library": { "AlbumBase": { + "link": { + "addDescription": "Dodaj opisā€¦" + }, "meta": { "episodes": "{ n } epizod | { n } epizody", "tracks": "{ n } utwĆ³r | { n } utwory" - }, - "link": { - "addDescription": "Dodaj opisā€¦" } }, - "ArtistBase": { - "meta": { - "tracks": "{ n } utwĆ³r w | { n } utwory w", - "albums": "{ n } albumie | { n } albumach" + "AlbumDetail": { + "description": { + "libraries": "Ten album występuje w następujących bibliotekach:" }, - "title": "Wykonawca", + "header": { + "episodes": "Odcinki", + "libraries": "Powiązane biblioteki", + "tracks": "Utwory" + }, + "meta": { + "volume": "Płyta { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Anuluj", + "delete": "Usuńā€¦", + "edit": "Edytuj", + "embed": "OsadÅŗ", + "more": "Więcejā€¦" + }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym", + "musicbrainz": "Zobacz na MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten album zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten album?" + }, + "embed": { + "header": "OsadÅŗ ten album na swojej stronie internetowej" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Edytuj ten album", + "suggest": "Zasugeruj zmiany w tym albumie" + }, + "message": { + "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." + } + }, + "Albums": { + "button": { + "search": "Szukaj" + }, + "empty": { + "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj albumy" + }, + "label": { + "search": "Szukaj", + "tags": "Tagi" + }, + "link": { + "addMusic": "Dodaj trochę muzyki" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "WprowadÅŗ tytuł albumuā€¦" + }, + "title": "Albumy" + }, + "ArtistBase": { "button": { "cancel": "Anuluj", "edit": "Edytuj", @@ -716,76 +1479,186 @@ "more": "Więcejā€¦", "play": "Odtwarzaj wszystkie albumy" }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym", + "musicbrainz": "Zobacz na MusicBrainz", + "wikipedia": "Wyszukaj na Wikipedii" + }, + "meta": { + "albums": "{ n } albumie | { n } albumach", + "tracks": "{ n } utwĆ³r w | { n } utwory w" + }, "modal": { "embed": { "header": "OsadÅŗ prace tego wykonawcy na swojej stronie internetowej" } }, + "title": "Wykonawca" + }, + "ArtistDetail": { + "button": { + "filter": "Usuń filtr", + "more": "Załaduj więcejā€¦" + }, + "description": { + "library": "Utwory tego wykonawcy występują w następujących bibliotekach:" + }, + "header": { + "album": "Albumy tego wykonawcy", + "library": "Powiązane biblioteki", + "track": "Nowe utwory tego wykonawcy" + }, "link": { - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "wikipedia": "Wyszukaj na Wikipedii", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }", - "musicbrainz": "Zobacz na MusicBrainz" + "filter": "Przejrzyj moje filtry" + }, + "message": { + "filter": "Obecnie ukrywasz treści powiązane z tym wykonawcą." } }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } utwĆ³r zgodny z wybranymi filtrami | { n } utwory zgodne z wybranymi filtrami", - "builder": "Budowanie", - "created": "Utworzono stację radiową", - "updated": "Zaktualizowano stację radiową" + "ArtistEdit": { + "header": { + "edit": "Edytuj tego wykonawcę", + "suggest": "Zasugeruj zmiany w tym wykonawcy" + }, + "message": { + "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." + } + }, + "Artists": { + "button": { + "search": "Szukaj", + "upload": "Dodaj trochę muzyki" + }, + "empty": { + "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj wykonawcĆ³w" + }, + "label": { + "excludeCompilation": "Wyklucz wykonawcĆ³w składanek", + "search": "Nazwa wykonawcy", + "tags": "Tagi" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" }, - "table": { - "filter": { - "header": { - "actions": "Działania", - "candidates": "Kandydaci", - "config": "Konfiguracja", - "exclude": "Wyklucz", - "name": "Nazwa filtra" - } - } + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Szukajā€¦" + }, + "title": "Artyści" + }, + "EditCard": { + "button": { + "approve": "ZatwierdÅŗ", + "delete": "Usuń", + "reject": "Odrzuć" + }, + "header": { + "modification": "Edycja { id }" + }, + "link": { + "track": "UtwĆ³r #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Sugestia zostanie całkowicie usunięta. To działanie jest nieodwracalne." }, - "button": { - "filter": "Dodaj filtr", - "save": "Zapisz" - }, - "label": { - "filter": "Dodaj filtry, aby dostosować swoją stację radiową", - "description": "Opis", - "public": "Wyświetlaj publicznie", - "name": "Nazwa stacji radiowej" - }, - "placeholder": { - "description": "MĆ³j wspaniały opis", - "name": "Moja wspaniała stacja radiowa" - }, - "title": "Tworzenie stacji radiowej", - "option": { - "filter": "Wybierz filtr" - }, - "description": { - "builder": "Możesz użyć tego interfejsu, aby utworzyć własną stację radiową, ktĆ³ra będzie odtwarzać tylko utwory pasujące do Twoich kryteriĆ³w." + "delete": { + "header": "Usunąć tę sugestię?" } }, - "Filter": { - "cancelButton": "Anuluj", - "excludeLabel": "Wyklucz", - "removeButton": "Usuń", - "matchingTracksModalHeader": "Utwory zgodne z filtrem" + "status": { + "applied": "Zatwierdzono i zastosowano", + "approved": "Zatwierdzono", + "pending": "Oczekuje na rozpatrzenie", + "rejected": "Odrzucono" + }, + "table": { + "update": { + "header": { + "field": "Pole", + "newValue": "Nowa wartość", + "oldValue": "Poprzednia wartość" + }, + "notApplicable": "Niedostępne" + } + } + }, + "EditForm": { + "button": { + "cancel": "Anuluj", + "clear": "Wyczyść", + "new": "Prześlij kolejne zmiany", + "reset": "PrzywrĆ³Ä‡ wartość domyślną", + "showAll": "Pokaż wszystkie edycje", + "showUnreviewed": "Ogranicz do nierozpatrzonych edycji", + "submit": "Prześlij i zastosuj zmiany", + "suggest": "Prześlij sugestię" + }, + "empty": { + "suggestEdit": "Zaproponuj zmiany przy użyciu poniższego formularza." + }, + "header": { + "failure": "Wystąpił błąd podczas przesyłania zmian", + "recentEdits": "Ostatnie edycje", + "success": "Twoje zmiany zostały przesłane pomyślnie.", + "unreviewed": "Ostatnie propozycje zmian czekające na rozpatrzenie" + }, + "label": { + "summary": "Podsumowanie (opcjonalne)" + }, + "message": { + "noPermission": "Nie masz uprawnień do edycji tego obiektu, ale możesz zasugerować zmiany. Po przesłaniu sugestie zostaną rozpatrzone przez moderatorĆ³w." + }, + "notApplicable": "Niedostępne", + "placeholder": { + "summary": "Kilka sÅ‚Ć³w opisujących twoje zmiany." } }, "FileUpload": { - "tooltip": { - "network": "Wystąpił błąd sieciowy podczas przesyłania tego pliku", - "size": "Nie można było przesłać tego pliku. Upewnij się, że nie jest zbyt duży", - "extension": "Nieprawidłowy typ pliku. Upewnij się, że przesyłasz plik audio. Wspierane typy plikĆ³w to { extensions }", - "retry": "SprĆ³buj ponownie", - "denied": "Plik odrzucony, upewnij się że nie jest zbyt duży i że nie przekroczyłeś swojego limitu", - "timeout": "Przesyłanie zajęło zbyt długo, sprĆ³buj jeszcze raz" + "button": { + "cancel": "Anuluj", + "retry": "SprĆ³buj przesłać ponownie nieudane" + }, + "description": { + "import": "Rezultaty twojego importu:", + "previousImport": "Rezultaty twojego poprzedniego importu:" + }, + "header": { + "failure": "Wystąpił błąd podczas importowania", + "local": "Wgraj muzykę ze swojego urządzenia", + "server": "Stan importu", + "status": "Stan importu" + }, + "label": { + "extensions": "Wspierane rozszerzenia: { extensions }", + "remainingSpace": "Pozostałe wolne miejsce", + "uploadWidget": "Przeciągnij i upuść pliki lub katalogi bądÅŗ po prostu kliknij, aby wybrać pliki do przesłania" + }, + "link": { + "picard": "Polecamy używać w tym celu Picarda.", + "processing": "Przetwarzanie", + "uploading": "Przesyłanie" + }, + "message": { + "local": { + "copyright": "Nie wgrywasz plikĆ³w chronionych prawem autorskim do publicznej biblioteki, w przeciwnym wypadku możesz łamać prawo", + "format": "Pliki, ktĆ³re przesyłasz, są w formacie OGG, FLAC, MP3 lub AIFF", + "message": "Za chwilę dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij się że:", + "tag": "Pliki muzyczne ktĆ³re przesyłasz posiadają poprawne metadane." + } }, "table": { "upload": { @@ -802,114 +1675,96 @@ } } }, + "tooltip": { + "denied": "Plik odrzucony, upewnij się że nie jest zbyt duży i że nie przekroczyłeś swojego limitu", + "extension": "Nieprawidłowy typ pliku. Upewnij się, że przesyłasz plik audio. Wspierane typy plikĆ³w to { extensions }", + "network": "Wystąpił błąd sieciowy podczas przesyłania tego pliku", + "retry": "SprĆ³buj ponownie", + "size": "Nie można było przesłać tego pliku. Upewnij się, że nie jest zbyt duży", + "timeout": "Przesyłanie zajęło zbyt długo, sprĆ³buj jeszcze raz" + } + }, + "FsBrowser": { "button": { - "cancel": "Anuluj", - "retry": "SprĆ³buj przesłać ponownie nieudane" - }, - "label": { - "uploadWidget": "Przeciągnij i upuść pliki lub katalogi bądÅŗ po prostu kliknij, aby wybrać pliki do przesłania", - "remainingSpace": "Pozostałe wolne miejsce", - "extensions": "Wspierane rozszerzenia: { extensions }" - }, + "import": "Import" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Importowanie jeszcze się nie rozpoczęło" + } + }, + "Home": { "header": { - "failure": "Wystąpił błąd podczas importowania", - "server": "Stan importu", - "status": "Stan importu", - "local": "Wgraj muzykę ze swojego urządzenia" + "newChannels": "Nowe kanały", + "playlists": "Listy odtwarzania", + "recentlyAdded": "Ostatnio dodane", + "recentlyFavorited": "Ostatnio polubione", + "recentlyListened": "Ostatnio odsłuchane" }, - "link": { - "processing": "Przetwarzanie", - "uploading": "Przesyłanie", - "picard": "Polecamy używać w tym celu Picarda." + "title": "Biblioteka" + }, + "ImportStatusModal": { + "button": { + "close": "Zamknij" }, - "description": { - "import": "Rezultaty twojego importu:", - "previousImport": "Rezultaty twojego poprzedniego importu:" - }, - "message": { - "local": { - "format": "Pliki, ktĆ³re przesyłasz, są w formacie OGG, FLAC, MP3 lub AIFF", - "tag": "Pliki muzyczne ktĆ³re przesyłasz posiadają poprawne metadane.", - "message": "Za chwilę dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij się że:", - "copyright": "Nie wgrywasz plikĆ³w chronionych prawem autorskim do publicznej biblioteki, w przeciwnym wypadku możesz łamać prawo" + "error": { + "importFailure": "Wystąpił błąd podczas przetwarzania przesłanego pliku. Więcej informacji znajdziesz poniżej.", + "invalidMetadata": { + "label": "Nieprawidłowe metadane", + "message": "Metadane zawarte w tym pliku są nieprawidłowe lub brakuje części wymaganych informacji." + }, + "unknownError": { + "label": "Nieznany błąd", + "message": "Wystąpił nieznany błąd" } - } - }, - "EditForm": { - "placeholder": { - "summary": "Kilka sÅ‚Ć³w opisujących twoje zmiany." - }, - "button": { - "cancel": "Anuluj", - "clear": "Wyczyść", - "reset": "PrzywrĆ³Ä‡ wartość domyślną", - "showUnreviewed": "Ogranicz do nierozpatrzonych edycji", - "showAll": "Pokaż wszystkie edycje", - "submit": "Prześlij i zastosuj zmiany", - "new": "Prześlij kolejne zmiany", - "suggest": "Prześlij sugestię" }, "header": { - "failure": "Wystąpił błąd podczas przesyłania zmian", - "recentEdits": "Ostatnie edycje", - "unreviewed": "Ostatnie propozycje zmian czekające na rozpatrzenie", - "success": "Twoje zmiany zostały przesłane pomyślnie." + "importDetail": "SzczegĆ³Å‚y importu" }, - "notApplicable": "Niedostępne", - "empty": { - "suggestEdit": "Zaproponuj zmiany przy użyciu poniższego formularza." - }, - "label": { - "summary": "Podsumowanie (opcjonalne)" + "link": { + "documentation": "Przeczytaj naszą dokumentację dotyczącą tego błędu", + "support": "OtwĆ³rz wątek pomocy (do wiadomości dołącz informacje dla programistĆ³w)" }, "message": { - "noPermission": "Nie masz uprawnień do edycji tego obiektu, ale możesz zasugerować zmiany. Po przesłaniu sugestie zostaną rozpatrzone przez moderatorĆ³w." + "importDetail": "Przetwarzanie przesłanych plikĆ³w nadal jest w toku.", + "importSuccess": "Plik został pomyślnie przetworzony przez serwer." + }, + "table": { + "error": { + "debug": "Informacje dla programistĆ³w", + "errorDetail": "SzczegĆ³Å‚y błędu", + "errorType": "Typ błędu", + "help": "Uzyskiwanie pomocy" + } + }, + "warning": { + "importSkipped": "Plik został pominięty, ponieważ podobny utwĆ³r jest już dostępny w jednej z bibliotek." } }, - "Albums": { - "link": { - "addMusic": "Dodaj trochę muzyki" - }, - "title": "Albumy", - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj albumy" - }, - "placeholder": { - "search": "WprowadÅŗ tytuł albumuā€¦" - }, - "empty": { - "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" - }, - "pagination": { - "results": "Wyniki na stronie" - }, - "label": { + "Podcasts": { + "button": { + "cancel": "Anuluj", + "channel": "UtwĆ³rz nowy kanał", + "feed": "Zasubskrybuj kanał RSS", "search": "Szukaj", - "tags": "Tagi" + "subscribe": "Obserwuj" }, - "button": { - "search": "Szukaj" - } - }, - "Artists": { - "button": { - "upload": "Dodaj trochę muzyki", - "search": "Szukaj" + "empty": { + "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj podcasty" }, "label": { - "search": "Nazwa wykonawcy", - "excludeCompilation": "Wyklucz wykonawcĆ³w składanek", + "search": "Tytuł podcastu", "tags": "Tagi" }, - "title": "Artyści", + "modal": { + "subscription": { + "header": "Subskrypcja" + } + }, "ordering": { "direction": { "ascending": "Rosnąco", @@ -918,20 +1773,107 @@ }, "label": "Porządkowanie" }, - "header": { - "browse": "Przeglądaj wykonawcĆ³w" - }, - "empty": { - "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" - }, "pagination": { "results": "Wyniki na stronie" }, "placeholder": { "search": "Szukajā€¦" + }, + "title": "Podcasty" + }, + "Radios": { + "button": { + "add": "UtwĆ³rz stację radiową", + "create": "UtwĆ³rz własną stację radiową" + }, + "empty": { + "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj stacje radiowe", + "instance": "Stacje radiowe instancji", + "user": "Stacje radiowe użytkownikĆ³w" + }, + "label": { + "search": "Szukaj" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "WprowadÅŗ nazwę stacji radiowejā€¦" + }, + "title": "Stacje radiowe" + }, + "TagDetail": { + "header": { + "channels": "Kanały", + "tracks": "Utwory" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym" } }, + "TagSelector": { + "placeholder": { + "search": "Szukajā€¦" + } + }, + "TrackBase": { + "button": { + "cancel": "Anuluj", + "delete": "Usuńā€¦", + "download": "Pobierz", + "edit": "Edytuj", + "embed": "OsadÅŗ", + "more": "Więcejā€¦", + "play": "Odtwarzaj" + }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym", + "wikipedia": "Wyszukaj na Wikipedii" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten utwĆ³r zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten utwĆ³r?" + }, + "embed": { + "header": "OsadÅŗ ten utwĆ³r na swojej stronie internetowej" + } + }, + "title": "UtwĆ³r" + }, "TrackDetail": { + "description": { + "library": "Ten utwĆ³r występuje w następujących bibliotekach:" + }, + "header": { + "episode": "SzczegĆ³Å‚y odcinka", + "library": "Powiązane biblioteki", + "playlists": "Powiązane listy odtwarzania", + "release": "SzczegĆ³Å‚y wydania", + "track": "SzczegĆ³Å‚y utworu" + }, + "link": { + "musicbrainz": "Zobacz na MusicBrainz" + }, + "notApplicable": "Niedostępne", "table": { "release": { "album": "Album", @@ -951,272 +1893,6 @@ "duration": "Czas trwania", "size": "Rozmiar" } - }, - "header": { - "episode": "SzczegĆ³Å‚y odcinka", - "library": "Powiązane biblioteki", - "playlists": "Powiązane listy odtwarzania", - "release": "SzczegĆ³Å‚y wydania", - "track": "SzczegĆ³Å‚y utworu" - }, - "notApplicable": "Niedostępne", - "description": { - "library": "Ten utwĆ³r występuje w następujących bibliotekach:" - }, - "link": { - "musicbrainz": "Zobacz na MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albumy", - "artists": "Artyści", - "moderation": "OtwĆ³rz w interfejsie moderacyjnym" - }, - "header": { - "channels": "Kanały", - "tracks": "Utwory" - } - }, - "ArtistDetail": { - "header": { - "album": "Albumy tego wykonawcy", - "track": "Nowe utwory tego wykonawcy", - "library": "Powiązane biblioteki" - }, - "button": { - "more": "Załaduj więcejā€¦", - "filter": "Usuń filtr" - }, - "link": { - "filter": "Przejrzyj moje filtry" - }, - "description": { - "library": "Utwory tego wykonawcy występują w następujących bibliotekach:" - }, - "message": { - "filter": "Obecnie ukrywasz treści powiązane z tym wykonawcą." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Wystąpił błąd podczas przetwarzania przesłanego pliku. Więcej informacji znajdziesz poniżej.", - "unknownError": { - "message": "Wystąpił nieznany błąd", - "label": "Nieznany błąd" - }, - "invalidMetadata": { - "label": "Nieprawidłowe metadane", - "message": "Metadane zawarte w tym pliku są nieprawidłowe lub brakuje części wymaganych informacji." - } - }, - "button": { - "close": "Zamknij" - }, - "table": { - "error": { - "debug": "Informacje dla programistĆ³w", - "errorDetail": "SzczegĆ³Å‚y błędu", - "errorType": "Typ błędu", - "help": "Uzyskiwanie pomocy" - } - }, - "header": { - "importDetail": "SzczegĆ³Å‚y importu" - }, - "link": { - "support": "OtwĆ³rz wątek pomocy (do wiadomości dołącz informacje dla programistĆ³w)", - "documentation": "Przeczytaj naszą dokumentację dotyczącą tego błędu" - }, - "message": { - "importDetail": "Przetwarzanie przesłanych plikĆ³w nadal jest w toku.", - "importSuccess": "Plik został pomyślnie przetworzony przez serwer." - }, - "warning": { - "importSkipped": "Plik został pominięty, ponieważ podobny utwĆ³r jest już dostępny w jednej z bibliotek." - } - }, - "EditCard": { - "button": { - "approve": "ZatwierdÅŗ", - "delete": "Usuń", - "reject": "Odrzuć" - }, - "status": { - "approved": "Zatwierdzono", - "applied": "Zatwierdzono i zastosowano", - "pending": "Oczekuje na rozpatrzenie", - "rejected": "Odrzucono" - }, - "modal": { - "delete": { - "header": "Usunąć tę sugestię?" - }, - "content": { - "warning": "Sugestia zostanie całkowicie usunięta. To działanie jest nieodwracalne." - } - }, - "table": { - "update": { - "header": { - "field": "Pole", - "newValue": "Nowa wartość", - "oldValue": "Poprzednia wartość" - }, - "notApplicable": "Niedostępne" - } - }, - "header": { - "modification": "Edycja { id }" - }, - "link": { - "track": "UtwĆ³r #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj podcasty" - }, - "button": { - "cancel": "Anuluj", - "channel": "UtwĆ³rz nowy kanał", - "search": "Szukaj", - "subscribe": "Obserwuj", - "feed": "Zasubskrybuj kanał RSS" - }, - "empty": { - "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" - }, - "label": { - "search": "Tytuł podcastu", - "tags": "Tagi" - }, - "title": "Podcasty", - "pagination": { - "results": "Wyniki na stronie" - }, - "placeholder": { - "search": "Szukajā€¦" - }, - "modal": { - "subscription": { - "header": "Subskrypcja" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj stacje radiowe", - "instance": "Stacje radiowe instancji", - "user": "Stacje radiowe użytkownikĆ³w" - }, - "button": { - "add": "UtwĆ³rz stację radiową", - "create": "UtwĆ³rz własną stację radiową" - }, - "placeholder": { - "search": "WprowadÅŗ nazwę stacji radiowejā€¦" - }, - "empty": { - "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" - }, - "title": "Stacje radiowe", - "pagination": { - "results": "Wyniki na stronie" - }, - "label": { - "search": "Szukaj" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Anuluj", - "delete": "Usuńā€¦", - "edit": "Edytuj", - "embed": "OsadÅŗ", - "more": "Więcejā€¦" - }, - "modal": { - "delete": { - "header": "Usunąć ten album?", - "content": { - "warning": "Ten album zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "OsadÅŗ ten album na swojej stronie internetowej" - } - }, - "link": { - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }", - "musicbrainz": "Zobacz na MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Anuluj", - "delete": "Usuńā€¦", - "download": "Pobierz", - "edit": "Edytuj", - "embed": "OsadÅŗ", - "more": "Więcejā€¦", - "play": "Odtwarzaj" - }, - "modal": { - "delete": { - "header": "Usunąć ten utwĆ³r?", - "content": { - "warning": "Ten utwĆ³r zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "OsadÅŗ ten utwĆ³r na swojej stronie internetowej" - } - }, - "link": { - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "wikipedia": "Wyszukaj na Wikipedii", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }" - }, - "title": "UtwĆ³r" - }, - "AlbumEdit": { - "header": { - "edit": "Edytuj ten album", - "suggest": "Zasugeruj zmiany w tym albumie" - }, - "message": { - "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." - } - }, - "ArtistEdit": { - "header": { - "edit": "Edytuj tego wykonawcę", - "suggest": "Zasugeruj zmiany w tym wykonawcy" - }, - "message": { - "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." } }, "TrackEdit": { @@ -1228,49 +1904,67 @@ "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." } }, - "AlbumDetail": { - "header": { - "episodes": "Odcinki", - "tracks": "Utwory", - "libraries": "Powiązane biblioteki" + "radios": { + "Builder": { + "button": { + "filter": "Dodaj filtr", + "save": "Zapisz" + }, + "description": { + "builder": "Możesz użyć tego interfejsu, aby utworzyć własną stację radiową, ktĆ³ra będzie odtwarzać tylko utwory pasujące do Twoich kryteriĆ³w." + }, + "header": { + "builder": "Budowanie", + "created": "Utworzono stację radiową", + "matches": "{ n } utwĆ³r zgodny z wybranymi filtrami | { n } utwory zgodne z wybranymi filtrami", + "updated": "Zaktualizowano stację radiową" + }, + "label": { + "description": "Opis", + "filter": "Dodaj filtry, aby dostosować swoją stację radiową", + "name": "Nazwa stacji radiowej", + "public": "Wyświetlaj publicznie" + }, + "option": { + "filter": "Wybierz filtr" + }, + "placeholder": { + "description": "MĆ³j wspaniały opis", + "name": "Moja wspaniała stacja radiowa" + }, + "table": { + "filter": { + "header": { + "actions": "Działania", + "candidates": "Kandydaci", + "config": "Konfiguracja", + "exclude": "Wyklucz", + "name": "Nazwa filtra" + } + } + }, + "title": "Tworzenie stacji radiowej" }, - "description": { - "libraries": "Ten album występuje w następujących bibliotekach:" - }, - "meta": { - "volume": "Płyta { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Import" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Importowanie jeszcze się nie rozpoczęło" - } - }, - "Home": { - "title": "Biblioteka", - "header": { - "newChannels": "Nowe kanały", - "playlists": "Listy odtwarzania", - "recentlyAdded": "Ostatnio dodane", - "recentlyFavorited": "Ostatnio polubione", - "recentlyListened": "Ostatnio odsłuchane" - } - }, - "TagSelector": { - "placeholder": { - "search": "Szukajā€¦" + "Filter": { + "cancelButton": "Anuluj", + "excludeLabel": "Wyklucz", + "matchingTracksModalHeader": "Utwory zgodne z filtrem", + "removeButton": "Usuń" } } }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } polubienie | { n } polubienia" + "manage": { + "ChannelsTable": { + "label": { + "category": "Kategoria", + "search": "Szukaj" + }, + "link": { + "local": "Lokalne", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym" + }, + "option": { + "all": "Wszystkie" }, "ordering": { "direction": { @@ -1280,573 +1974,274 @@ }, "label": "Porządkowanie" }, - "link": { - "library": "Przeglądaj bibliotekę" - }, - "loader": { - "loading": "Ładowanie Twoich ulubionychā€¦" - }, - "empty": { - "noFavorites": "Nie dodałeś jeszcze żadnych utworĆ³w do Twoich ulubionych" - }, "pagination": { - "results": "Wyniki na stronie" - }, - "title": "Twoje ulubione" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Dodaj do ulubionych", - "remove": "Usuń z ulubionych" - }, - "label": { - "inFavorites": "W ulubionych" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } plik | { n } pliki", - "quota": "Pozostałe wolne miejsce:" - }, - "button": { - "cancel": "Anuluj", - "close": "Zamknij", - "finishLater": "Ukończ pĆ³Åŗniej", - "next": "Następny krok", - "previous": "Poprzedni krok", - "publish": "Opublikuj", - "update": "Zaktualizuj" - }, - "header": { - "uploadFiles": "Pliki do przesłania", - "processing": "Przetwarzanie przesłanych plikĆ³w", - "publish": "Publikuj audio", - "uploadDetails": "SzczegĆ³Å‚y pliku" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } utwĆ³r | { n } utwory" - }, - "label": { - "album": "Album", - "series": "Seriale" - }, - "option": { - "none": "Nic" - } - }, - "LicenseSelect": { - "link": { - "license": "O tej licencji" - }, - "label": { - "license": "Licencja" - }, - "option": { - "none": "Nic" - } - }, - "UploadForm": { - "help": { - "license": "Wybierz na jakiej licencji będą dostępne zamieszczone treści, aby zapewnić pewne wolności swojej publice." - }, - "label": { - "openBrowser": "Przeglądajā€¦", - "channel": "Kanał" - }, - "message": { - "dragAndDrop": "Przeciągnij i upuść pliki lub katalogi bądÅŗ po prostu kliknij, aby wybrać pliki do przesłania", - "pending": "Masz jakieś pliki oczekujące na publikację." - }, - "button": { - "edit": "Edytuj", - "ignore": "Ignoruj", - "remove": "Usuń", - "resume": "WznĆ³w", - "retry": "SprĆ³buj ponownie" - }, - "header": { - "error": "Wystąpił błąd podczas publikowania" - }, - "status": { - "errored": "Zakończono błędem", - "pending": "W toku", - "uploading": "Przesyłanie" - }, - "description": { - "extensions": "Wspierane rozszerzenia: { extensions }" - }, - "warning": { - "quota": "Nie masz więcej wolnego miejsca na swoje pliki. Skontaktuj się z moderatorem celem zwiększenia przydziału lub usuń trochę treści." - } - }, - "AlbumModal": { - "button": { - "cancel": "Anuluj", - "create": "UtwĆ³rz" - }, - "header": { - "newAlbum": "Nowy album", - "newSeries": "Nowy serial" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Opis", - "position": "Pozycja", - "tags": "Tagi", - "title": "Tytuł", - "image": "Obrazek utworu" - } - }, - "AlbumForm": { - "header": { - "error": "Wystąpił błąd podczas tworzenia" - }, - "label": { - "albumTitle": "Tytuł" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Obserwuj", - "unsubscribe": "Przestań obserwować" - }, - "help": { - "auth": "Musisz być zalogowany, aby obserwować ten kanał" - } - } - }, - "AboutPod": { - "stat": { - "hoursOfMusic": "godzina muzyki | godziny muzyki", - "activeUsers": "aktywny użytkownik | aktywni użytkownicy", - "albumsCount": "album | albumy", - "artistsCount": "wykonawca | wykonawcĆ³w", - "listeningsCount": "odsłuchania | odsłuchania", - "tracksCount": "utwĆ³r | utwory" - }, - "title": "O tej instancji", - "link": { - "about": "O tej instancji", - "features": "Informacje dodatkowe", - "introduction": "Wprowadzenie", - "rules": "Reguły", - "statistics": "Statystyki", - "terms": "Regulamin i polityka prywatności" - }, - "header": { - "about": "O tej instancji", - "contact": "Kontakt", - "features": "Informacje dodatkowe", - "rules": "Reguły", - "statistics": "Statystyki", - "terms": "Regulamin i polityka prywatności" - }, - "feature": { - "allowList": "Lista zezwoleń", - "anonymousAccess": "Anonimowy dostęp", - "status": { - "closed": "Zamknięte", - "disabled": "Wyłączony", - "enabled": "Włączone", - "open": "Otwarte" - }, - "federation": "Federacja", - "version": "Wersja Funkwhale", - "registrations": "Rejestracje", - "quota": "Limit przestrzeni" - }, - "notApplicable": "Niedostępne", - "placeholder": { - "noDescription": "Opis nie jest dostępny.", - "noRules": "Nie ustalono reguł.", - "noTerms": "Nie ustalono warunkĆ³w." - }, - "message": { - "contact": "Wyślij nam wiadomość e-mail: {'{{'} contactEmail {'}}'}" - } - }, - "common": { - "ActionTable": { - "button": { - "selected": "Wybrano { n } z { total } | Wybrano { n } z { total }", - "allSelected": "Wybrano { n } element | Wybrano { n } elementy", - "go": "Wykonaj", - "launch": "Wykonaj", - "refresh": "Odśwież zawartość tabeli", - "select": "Wybierz", - "selectAll": "Zaznacz wszystkie elementy", - "selectElement": "Zaznacz jeden element | Zaznacz wszystkie { n } elementy", - "selectCurrentPage": "Zaznacz tylko obecną stronę" - }, - "message": { - "success": "Działanie { action } zostało pomyślnie wykonane na { n } elemencie | Działanie { action } zostało pomyślnie wykonane na { n } elementach", - "needsRefresh": "Treść została zaktualizowana - odśwież, aby zobaczyć aktualną treść" - }, - "label": { - "actions": "Działania", - "performAction": "Wykonaj akcje" - }, - "modal": { - "performAction": { - "header": "Czy chcesz wykonać działanie { action } na { n } elemencie? | Czy chcesz wykonać działanie { action } na { n } elementach?", - "content": { - "warning": "Może to wpływać na wiele rzeczy lub mieć nieodwracalne skutki, sprawdÅŗ dwukrotnie czy to na pewno to, czego chcesz." - } - } - }, - "header": { - "error": "Wystąpił błąd podczas aplikowania działania" - } - }, - "Duration": { - "meta": { - "hours": "{ hours } godz. { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "O tej instancji", - "chat": "PokĆ³j czatowy", - "docs": "Dokumentacja", - "forum": "Forum dyskusyjne", - "support": "Podręcznik pomocy", - "git": "Zgłoś problem", - "login": "Zaloguj się", - "logout": "Wyloguj się", - "notifications": "Powiadomienia", - "profile": "Profil", - "settings": "Ustawienia", - "signup": "Zarejestruj się" - }, - "label": { - "shortcuts": "SkrĆ³ty klawiszowe", - "language": "Język", - "theme": "Motyw" - } - }, - "UserModal": { - "link": { - "about": "O tej instancji", - "chat": "PokĆ³j czatowy", - "forum": "Forum dyskusyjne", - "support": "Podręcznik pomocy", - "git": "Zgłoś problem", - "login": "Zaloguj się", - "logout": "Wyloguj się", - "notifications": "Powiadomienia", - "profile": "Profil", - "settings": "Ustawienia", - "signup": "Zarejestruj się" - }, - "label": { - "shortcuts": "SkrĆ³ty klawiszowe", - "language": "Język", - "theme": "Motyw" - }, - "header": { - "options": "Opcje" - }, - "button": { - "switchInstance": "Skorzystaj z innej instancji" - } - }, - "DangerousButton": { - "button": { - "cancel": "Anuluj", - "confirm": "PotwierdÅŗ" - }, - "header": { - "confirm": "Czy chcesz potwierdzić to działanie?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Anuluj", - "edit": "Edytuj", - "less": "Pokaż mniej", - "more": "Pokaż więcej", - "update": "Zapisz opis" - }, - "header": { - "failure": "Wystąpił błąd podczas aktualizowania opisu" - }, - "empty": { - "noDescription": "Å»aden opis nie jest dostępny" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Wyczyść" - }, - "label": { - "search": "Szukaj" + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" }, "placeholder": { - "search": "Szukajā€¦" - } - }, - "CollapseLink": { - "button": { - "collapse": "Zwiń", - "expand": "Rozwiń" - } - }, - "CopyInput": { - "button": { - "copy": "Kopiuj" - }, - "message": { - "success": "Skopiowano tekst do schowka!" - } - }, - "LoginModal": { - "link": { - "login": "Zaloguj się", - "signup": "Zarejestruj się" - }, - "header": { - "unauthenticated": "Nie uwierzytelniono" - }, - "description": { - "noAccess": "Nie masz dostępu!" - } - }, - "ContentForm": { - "help": { - "markdown": "Formatowanie za pomocą składni Markdown jest wspierane." - }, - "empty": { - "noContent": "Nie ma nic do podglądu." - }, - "button": { - "preview": "Podgląd", - "write": "Zapisz" - }, - "placeholder": { - "input": "Napisz tutaj kilka sÅ‚Ć³wā€¦" - } - }, - "EmptyState": { - "header": { - "noResults": "Nic nie znaleziono." - }, - "button": { - "refresh": "Odśwież" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG lub JPG. Rozdzielczość powinna mieścić się w przedziale między 1400x1400px a 3000x3000px. Maksymalny rozmiar pliku to 5 MB." - }, - "button": { - "remove": "Usuń" - }, - "label": { - "upload": "Prześlij nowy obrazā€¦" - }, - "loader": { - "uploading": "Przesyłanie plikuā€¦" - }, - "header": { - "failure": "Nie można było zapisać twojego załącznika" - } - }, - "ExpandableDiv": { - "button": { - "less": "Pokaż mniej", - "more": "Pokaż więcej" - } - } - }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } utwĆ³r | { n } utwory" - } - }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } jest już w liście odtwarzania { 1 }." - }, - "button": { - "addDuplicate": "Dodaj mimo to", - "addToPlaylist": "Dodaj do tej listy odtwarzania", - "addTrack": "Dodaj utwĆ³r", - "cancel": "Anuluj", - "edit": "Edytuj" - }, - "header": { - "addToPlaylist": "Dodaj do listy odtwarzania", - "available": "Dostępne listy odtwarzania", - "manage": "Zarządzaj listami odtwarzania", - "noResults": "Nie ma żadnych wynikĆ³w zgodnych z Twoim filtrem", - "addFailure": "Nie udało się dodać tego utworu do listy odtwarzania" + "search": "Szukaj za pomocą domeny, nazwy, kontaā€¦" }, "table": { - "edit": { + "channel": { "header": { - "edit": "Edytuj", - "lastModification": "Ostatnia modyfikacja", + "account": "Konto", + "albums": "Albumy", + "creationDate": "Data utworzenia", + "domain": "Domena", "name": "Nazwa", "tracks": "Utwory" } } - }, - "placeholder": { - "filterPlaylist": "WprowadÅŗ nazwę listy odtwarzania" - }, - "label": { - "filter": "Filtr" - }, - "empty": { - "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" } }, - "Editor": { - "button": { - "addDuplicate": "Dodaj mimo to", - "clear": "Wyczyść listę odtwarzania", - "copy": "Skopiuj utwory z obecnej kolejki do listy odtwarzania", - "insertFromQueue": "Dodaj z kolejki odtwarzania ({ n } utwĆ³r) | Dodaj z kolejki odtwarzania ({ n } utwory)" - }, - "error": { - "sync": "Podczas zapisywania twoich zmian wystąpił błąd" - }, - "message": { - "sync": "Zsynchronizowano zmiany z serwerem" - }, - "modal": { - "clearPlaylist": { - "header": "Czy chcesz wyczyścić listę odtwarzania ā€ž{ playlist }ā€?", - "content": { - "warning": "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania i nie zostać być cofnięte." + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrane albumy zostaną usunięte wraz z powiązanymi utworami, plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj" + }, + "link": { + "local": "Lokalne", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym" + }, + "notApplicable": "Niedostępne", + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, tytułu, wykonawcy, identyfikatora MusicBrainzā€¦" + }, + "table": { + "album": { + "header": { + "artist": "Wykonawca", + "creationDate": "Data utworzenia", + "domain": "Domena", + "name": "Tytuł", + "releaseDate": "Data wydania", + "tracks": "Utwory" + } } } }, - "help": { - "reorder": "Przeciągnij i upuść aby zmienić kolejność utworĆ³w w liście odtwarzania" - }, - "header": { - "editor": "Edytor list odtwarzania" - }, - "warning": { - "duplicate": "Jakieś utwory z Twojej kolejki są już na tej liście odtwarzania:" - }, - "loading": { - "sync": "Synchronizowanie zmian z serweremā€¦" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Dodaj do listy odtwarzaniaā€¦" - } - }, - "Form": { - "header": { - "createPlaylist": "UtwĆ³rz nową listę odtwarzania", - "createSuccess": "Utworzono listę odtwarzania", - "updateSuccess": "Zaktualizowano listę odtwarzania", - "createFailure": "Nie można było utworzyć listy odtwarzania" - }, - "button": { - "create": "UtwĆ³rz listę odtwarzania", - "update": "Zapisz listę odtwarzania" - }, - "placeholder": { - "name": "Moja wspaniała lista odtwarzania" - }, - "label": { - "name": "Nazwa listy odtwarzania", - "visibility": "Widoczność listy odtwarzania" - } - }, - "Widget": { - "button": { - "create": "UtwĆ³rz listę odtwarzania", - "more": "Pokaż więcej" - }, - "placeholder": { - "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } zaakceptował(-a) twoją prośbę o obserwowanie biblioteki \"{ library }\"", - "libraryFollow": "{ username } zaobserwował twoją bibliotekę \"{ library }\"", - "libraryPendingFollow": "{ username } chciałby obserwować twoją bibliotekę \"{ library }\"" - }, - "button": { - "approve": "ZatwierdÅŗ", - "markRead": "Oznacz jako przeczytane", - "markUnread": "Oznacz jako nieprzeczytane", - "reject": "Odrzuć" - } - } - }, - "Sidebar": { - "link": { - "about": "O tej instancji", - "albums": "Albumy", - "artists": "Artyści", - "browse": "Przeglądaj", - "channels": "Kanały", - "createAccount": "UtwĆ³rz konto", - "favorites": "Ulubione", - "home": "Strona gÅ‚Ć³wna", - "library": "Biblioteka", - "login": "Zaloguj się", - "moderation": "Moderacja", - "playlists": "Listy odtwarzania", - "podcasts": "Podcasty", - "radios": "Stacje radiowe", - "search": "Szukaj", - "settings": "Ustawienia", - "users": "Użytkownicy" - }, - "label": { - "add": "Dodaj zawartość", - "administration": "Administracja", - "language": "Język", - "main": "Menu gÅ‚Ć³wne", - "follows": "Oczekujące prośby o obserwowanie", - "edits": "Edycje oczekujące na rozpatrzenie", - "play": "Odtwarzaj ten utwĆ³r", - "theme": "Motyw" - }, - "header": { - "administration": "Administracja", - "explore": "Odkrywaj", - "main": "GÅ‚Ć³wna nawigacja", - "more": "Więcej", - "library": "Moja biblioteka" - } - }, - "manage": { - "library": { - "UploadsTable": { + "ArtistsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "category": "Kategoria", + "search": "Szukaj" + }, + "link": { + "local": "Lokalne" + }, + "option": { + "all": "Wszystkie" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, nazwy, identyfikatora MusicBrainzā€¦" + }, "table": { - "upload": { + "artist": { + "header": { + "albums": "Albumy", + "creationDate": "Data utworzenia", + "domain": "Domena", + "name": "Nazwa", + "tracks": "Utwory" + } + } + } + }, + "EditsCardList": { + "label": { + "status": "Stan" + }, + "option": { + "all": "Wszystkie", + "approved": "Zatwierdzono", + "pending": "Oczekuje na rozpatrzenie", + "rejected": "Odrzucono" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą konta, podsumowania, domenyā€¦" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrana biblioteka zostanie usunięta wraz z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj", + "visibility": "Widoczność" + }, + "link": { + "local": "Lokalne" + }, + "option": { + "all": "Wszystkie" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisuā€¦" + }, + "table": { + "library": { "header": { - "accessedDate": "Data dostępu", "account": "Konto", "creationDate": "Data utworzenia", "domain": "Domena", - "importStatus": "Stan importu", - "library": "Biblioteka", + "followers": "Obserwatorzy", "name": "Nazwa", - "size": "Rozmiar", + "uploads": "Przesłane pliki", "visibility": "Widoczność" } } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." + } }, + "label": { + "search": "Szukaj" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy" + }, + "table": { + "tag": { + "header": { + "albums": "Albumy", + "artists": "Artyści", + "creationDate": "Data utworzenia", + "name": "Nazwa", + "tracks": "Utwory" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrane utwory zostaną usunięte wraz z powiązanymi polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj" + }, + "link": { + "local": "Lokalne" + }, + "notApplicable": "Niedostępne", + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, tytułu, artysty, albumu, identyfikatora MusicBrainzā€¦" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "creationDate": "Data utworzenia", + "domain": "Domena", + "license": "Licencja", + "title": "Tytuł" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany plik zostanie usunięty. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj", + "status": "Stan", + "visibility": "Widoczność" + }, + "link": { + "local": "Lokalne" + }, + "notApplicable": "Niedostępne", "option": { "all": "Wszystkie", "failed": "Zakończony błędem", @@ -1862,396 +2257,68 @@ }, "label": "Porządkowanie" }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany plik zostanie usunięty. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj", - "status": "Stan", - "visibility": "Widoczność" + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" }, "placeholder": { "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu, ÅŗrĆ³dłaā€¦" }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data dostępu", "account": "Konto", "creationDate": "Data utworzenia", "domain": "Domena", - "followers": "Obserwatorzy", + "importStatus": "Stan importu", + "library": "Biblioteka", "name": "Nazwa", - "uploads": "Przesłane pliki", + "size": "Rozmiar", "visibility": "Widoczność" } } - }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrana biblioteka zostanie usunięta wraz z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "label": { - "search": "Szukaj", - "visibility": "Widoczność" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisuā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "creationDate": "Data utworzenia", - "domain": "Domena", - "license": "Licencja", - "title": "Tytuł" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrane utwory zostaną usunięte wraz z powiązanymi polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, tytułu, artysty, albumu, identyfikatora MusicBrainzā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albumy", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Nazwa", - "tracks": "Utwory" - } - } - }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "label": { - "category": "Kategoria", - "search": "Szukaj" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, identyfikatora MusicBrainzā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albumy", - "artists": "Artyści", - "creationDate": "Data utworzenia", - "name": "Nazwa", - "tracks": "Utwory" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." - } - }, - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą nazwy" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Wszystkie", - "approved": "Zatwierdzono", - "pending": "Oczekuje na rozpatrzenie", - "rejected": "Odrzucono" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "placeholder": { - "search": "Szukaj za pomocą konta, podsumowania, domenyā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - }, - "label": { - "status": "Stan" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Wykonawca", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Tytuł", - "releaseDate": "Data wydania", - "tracks": "Utwory" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrane albumy zostaną usunięte wraz z powiązanymi utworami, plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne", - "moderation": "OtwĆ³rz w interfejsie moderacyjnym" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, tytułu, wykonawcy, identyfikatora MusicBrainzā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Konto", - "domain": "Domena", - "local": "Lokalne", - "owner": "Posiadacz", - "type": "Rodzaj" - }, - "status": { - "assignedTo": "Przypisano do", - "internalNotes": "Notatki wewnętrzne", - "resolutionDate": "Data rozwiązania", - "resolved": "Rozwiązane", - "status": "Stan", - "unresolved": "Nierozstrzygnięte" - }, - "report": { - "category": "Kategoria", - "creationDate": "Data utworzenia", - "submittedBy": "Przesłane przez" + "AccountsTable": { + "action": { + "purge": { + "label": "Wyczyść" } }, - "header": { - "actions": "Działania", - "notes": "Notatki wewnętrzne", - "message": "Wiadomość", - "reportedObject": "Zgłoszony obiekt" - }, - "button": { - "confirmDelete": "Usuń", - "delete": "Usuń zgłoszony obiekt", - "resolve": "Rozwiąż", - "unresolve": "Cofnij rozwiązanie" - }, - "modal": { - "delete": { - "header": "Usunąć zgłoszony obiekt?", - "content": { - "warning": "To usunie obiekt związany z tym raportem i zaznaczy raport jako rozwiązany. Usunięcie jest nieodwracalne." - } - } - }, - "notApplicable": "Niedostępne", - "link": { - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "report": "Zgłoszenie { id }", - "publicPage": "Zobacz publiczną stronę" - }, - "warning": { - "objectDeleted": "Obiekt związany z tym raportem został usunięty." - } - }, - "UserRequestCard": { - "header": { - "actions": "Działania", - "notes": "Notatki wewnętrzne", - "signup": "Wiadomość" - }, - "button": { - "approve": "ZatwierdÅŗ", - "reject": "Odrzuć" - }, - "table": { - "status": { - "approved": "Zatwierdzono", - "assignedTo": "Przypisano do", - "internalNotes": "Notatki wewnętrzne", - "pending": "W toku", - "refused": "Odrzucone", - "status": "Stan" - }, - "request": { - "creationDate": "Data utworzenia", - "submittedBy": "Przesłane przez" - } - }, - "notApplicable": "Niedostępne", - "link": { - "request": "Aplikacja { id }" - }, - "message": { - "signup": "Ten użytkownik chce się zarejestrować na Twojej instancji." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Dodaj nową regułę moderacji", - "editRule": "Edytuj regułę moderacyjną", - "failure": "Wystąpił błąd podczas tworzenia reguły" - }, "label": { - "blockAll": "Zablokuj wszystko", - "policyDisabled": "Wyłączony", - "policyEnabled": "Włączony", - "silenceActivity": "Wycisz aktywność", - "silenceNotifications": "Wycisz powiadomienia", - "customizeRule": "lub dostosuj swoją regułę", - "policyReason": "PowĆ³d", - "rejectMedia": "Odrzuć media" + "search": "Szukaj" }, - "tooltip": { - "blockAll": "Zablokuj wszystko z tego konta lub domeny. To uniemożliwi jakąkolwiek interakcję z jednostką i usunie powiązaną zawartość (przesłane pliki, biblioteki, obserwowane itp.)", - "rejectMedia": "Nie pobieraj żadnych plikĆ³w multimedialnych (audio, okładka albumu, awatar kontaā€¦) z tego konta lub domeny. To usunie rĆ³wnież istniejącą zawartość.", - "summary": "Wyjaśnij, dlaczego stosujesz tę politykę - to pomoże ci zapamiętać czemu dodałeś tę regułę. Istnieje rĆ³wnież możliwość (zależnie od konfiguracji instancji) publicznego wyświetlania tej informacji, żeby pomĆ³c użytkownikom zrozumieć powĆ³d dodania reguły.", - "silenceActivity": "Ukryj zawartość konta lub domeny (pomijając obserwowane).", - "silenceNotifications": "Nie wywołuj powiadomień związanych z kontami lub domenami (pomijając obserwowane).", - "isActive": "Użyj tego ustawienia, aby tymczasowo włączyć/wyłączyć politykę zarazem nie usuwając jej całkowicie." + "link": { + "local": "Konto lokalne" }, - "button": { - "cancel": "Anuluj", - "create": "UtwĆ³rz", - "delete": "Usuń", - "confirm": "Usuń regułę moderacyjną", - "update": "Zapisz" + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" }, - "modal": { - "delete": { - "header": "Usunąć tę regułę moderacyjną?", - "content": { - "warning": "To działanie jest nieodwracalne." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Dodaj notatkę" + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" }, "placeholder": { - "summary": "np. Opisz, jakie działania zostały podjęteā€¦" + "search": "Szukaj za pomocą domeny, nazwy, opisuā€¦" }, - "header": { - "failure": "Wystąpił błąd podczas przesyłania notatki" + "table": { + "account": { + "header": { + "domain": "Domena", + "firstSeen": "Widziany po raz pierwszy", + "lastSeen": "Ostatnia aktywność", + "moderationRule": "Pod regułą moderacyjną", + "name": "Nazwa", + "uploads": "Przesłane pliki" + }, + "moderationRule": "Tak" + } } }, "DomainsTable": { @@ -2266,6 +2333,16 @@ "label": "Usuń z listy zezwoleń" } }, + "empty": { + "noPods": "Nie znaleziono innych instancji" + }, + "label": { + "inList": "Jest obecny na liście zezwoleń", + "search": "Szukaj" + }, + "link": { + "list": "Ta domena jest obecna na Twojej liście zezwoleń" + }, "option": { "all": "Wszystkie", "no": "Nie", @@ -2279,76 +2356,32 @@ }, "label": "Porządkowanie" }, - "table": { - "domain": { - "header": { - "firstSeen": "Widziany po raz pierwszy", - "name": "Nazwa", - "receivedMessages": "Otrzymane wiadomości", - "moderationRule": "Pod regułą moderacyjną", - "users": "Użytkownicy" - }, - "moderationRule": "Tak" - } - }, - "label": { - "inList": "Jest obecny na liście zezwoleń", - "search": "Szukaj" - }, - "empty": { - "noPods": "Nie znaleziono innych instancji" + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" }, "placeholder": { "search": "Szukaj za pomocą nazwyā€¦" }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - }, - "link": { - "list": "Ta domena jest obecna na Twojej liście zezwoleń" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domena", "firstSeen": "Widziany po raz pierwszy", - "lastSeen": "Ostatnia aktywność", - "name": "Nazwa", "moderationRule": "Pod regułą moderacyjną", - "uploads": "Przesłane pliki" + "name": "Nazwa", + "receivedMessages": "Otrzymane wiadomości", + "users": "Użytkownicy" }, "moderationRule": "Tak" } - }, - "link": { - "local": "Konto lokalne" - }, - "action": { - "purge": { - "label": "Wyczyść" - } - }, - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, opisuā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Edytuj" + }, + "header": { + "rule": "Reguła" + }, "label": { "blockAll": "Zablokuj wszystko", "muteActivity": "Wycisz aktywność", @@ -2356,15 +2389,49 @@ "reason": "PowĆ³d", "rejectMedia": "Odrzuć media" }, - "button": { - "edit": "Edytuj" - }, "status": { "enabled": "Włączone", "paused": "Wstrzymane" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń regułę moderacyjną", + "create": "UtwĆ³rz", + "delete": "Usuń", + "update": "Zapisz" }, "header": { - "rule": "Reguła" + "addRule": "Dodaj nową regułę moderacji", + "editRule": "Edytuj regułę moderacyjną", + "failure": "Wystąpił błąd podczas tworzenia reguły" + }, + "label": { + "blockAll": "Zablokuj wszystko", + "customizeRule": "lub dostosuj swoją regułę", + "policyDisabled": "Wyłączony", + "policyEnabled": "Włączony", + "policyReason": "PowĆ³d", + "rejectMedia": "Odrzuć media", + "silenceActivity": "Wycisz aktywność", + "silenceNotifications": "Wycisz powiadomienia" + }, + "modal": { + "delete": { + "content": { + "warning": "To działanie jest nieodwracalne." + }, + "header": "Usunąć tę regułę moderacyjną?" + } + }, + "tooltip": { + "blockAll": "Zablokuj wszystko z tego konta lub domeny. To uniemożliwi jakąkolwiek interakcję z jednostką i usunie powiązaną zawartość (przesłane pliki, biblioteki, obserwowane itp.)", + "isActive": "Użyj tego ustawienia, aby tymczasowo włączyć/wyłączyć politykę zarazem nie usuwając jej całkowicie.", + "rejectMedia": "Nie pobieraj żadnych plikĆ³w multimedialnych (audio, okładka albumu, awatar kontaā€¦) z tego konta lub domeny. To usunie rĆ³wnież istniejącą zawartość.", + "silenceActivity": "Ukryj zawartość konta lub domeny (pomijając obserwowane).", + "silenceNotifications": "Nie wywołuj powiadomień związanych z kontami lub domenami (pomijając obserwowane).", + "summary": "Wyjaśnij, dlaczego stosujesz tę politykę - to pomoże ci zapamiętać czemu dodałeś tę regułę. Istnieje rĆ³wnież możliwość (zależnie od konfiguracji instancji) publicznego wyświetlania tej informacji, żeby pomĆ³c użytkownikom zrozumieć powĆ³d dodania reguły." } }, "InstancePolicyModal": { @@ -2374,117 +2441,172 @@ }, "modal": { "manage": { - "header": "Zarządzaj regułami moderacyjnymi dla { obj }", "content": { "warning": "Ta jednostka podlega specyficznym regułom moderacyjnym" - } + }, + "header": "Zarządzaj regułami moderacyjnymi dla { obj }" } } }, + "NoteForm": { + "button": { + "add": "Dodaj notatkę" + }, + "header": { + "failure": "Wystąpił błąd podczas przesyłania notatki" + }, + "placeholder": { + "summary": "np. Opisz, jakie działania zostały podjęteā€¦" + } + }, "NotesThread": { "button": { "delete": "Usuń" }, "modal": { "delete": { - "header": "Usunąć tę notatkę?", "content": { "warning": "Notatka zostanie usunięta. To działanie jest nieodwracalne." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Konto", - "albums": "Albumy", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Nazwa", - "tracks": "Utwory" + }, + "header": "Usunąć tę notatkę?" } } }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" + "ReportCard": { + "button": { + "confirmDelete": "Usuń", + "delete": "Usuń zgłoszony obiekt", + "resolve": "Rozwiąż", + "unresolve": "Cofnij rozwiązanie" }, - "label": "Porządkowanie" + "header": { + "actions": "Działania", + "message": "Wiadomość", + "notes": "Notatki wewnętrzne", + "reportedObject": "Zgłoszony obiekt" + }, + "link": { + "moderation": "OtwĆ³rz w interfejsie moderacyjnym", + "publicPage": "Zobacz publiczną stronę", + "report": "Zgłoszenie { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "To usunie obiekt związany z tym raportem i zaznaczy raport jako rozwiązany. Usunięcie jest nieodwracalne." + }, + "header": "Usunąć zgłoszony obiekt?" + } + }, + "notApplicable": "Niedostępne", + "table": { + "object": { + "account": "Konto", + "domain": "Domena", + "local": "Lokalne", + "owner": "Posiadacz", + "type": "Rodzaj" + }, + "report": { + "category": "Kategoria", + "creationDate": "Data utworzenia", + "submittedBy": "Przesłane przez" + }, + "status": { + "assignedTo": "Przypisano do", + "internalNotes": "Notatki wewnętrzne", + "resolutionDate": "Data rozwiązania", + "resolved": "Rozwiązane", + "status": "Stan", + "unresolved": "Nierozstrzygnięte" + } + }, + "warning": { + "objectDeleted": "Obiekt związany z tym raportem został usunięty." + } }, - "label": { - "category": "Kategoria", - "search": "Szukaj" - }, - "link": { - "local": "Lokalne", - "moderation": "OtwĆ³rz w interfejsie moderacyjnym" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, kontaā€¦" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + "UserRequestCard": { + "button": { + "approve": "ZatwierdÅŗ", + "reject": "Odrzuć" + }, + "header": { + "actions": "Działania", + "notes": "Notatki wewnętrzne", + "signup": "Wiadomość" + }, + "link": { + "request": "Aplikacja { id }" + }, + "message": { + "signup": "Ten użytkownik chce się zarejestrować na Twojej instancji." + }, + "notApplicable": "Niedostępne", + "table": { + "request": { + "creationDate": "Data utworzenia", + "submittedBy": "Przesłane przez" + }, + "status": { + "approved": "Zatwierdzono", + "assignedTo": "Przypisano do", + "internalNotes": "Notatki wewnętrzne", + "pending": "W toku", + "refused": "Odrzucone", + "status": "Stan" + } + } } }, "users": { - "UsersTable": { + "InvitationForm": { + "button": { + "clear": "Wyczyść", + "new": "Uzyskaj nowe zaproszenie" + }, + "header": { + "failure": "Wystąpił błąd podczas tworzenia zaproszenia" + }, + "label": { + "invite": "Kod zaproszenia" + }, + "placeholder": { + "invitation": "Pozostaw puste, aby wygenerować kod" + }, "table": { - "user": { + "invitation": { "header": { - "accountStatus": "Stan konta", - "email": "Adres E-mail", - "lastActivity": "Ostatnia aktywność", - "permissions": "Uprawnienia", - "signup": "Rejestracja", - "status": "Stan", - "username": "Nazwa użytkownika" - }, - "accountStatus": { - "active": "Aktywny", - "inactive": "Nieaktywny" - }, - "status": { - "admin": "Administrator", - "regular": "Zwykły użytkownik", - "staff": "Członek administracji" + "code": "Kod", + "link": "Odnośnik do udostępniania" } } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "permission": { - "library": "Biblioteka", - "moderation": "Moderacja", - "settings": "Ustawienia" - }, - "notApplicable": "Niedostępne", - "placeholder": { - "search": "Szukaj za pomocą nazwy, adresu e-mailā€¦" - }, - "pagination": { - "results": "Wyświetlanie jednego wyniku | Wyświetlanie wynikĆ³w od { start } do { end } z { total }" } }, "InvitationsTable": { + "action": { + "delete": "Usuń" + }, + "label": { + "expired": "Wygasłe", + "search": "Szukaj", + "status": "Stan", + "unused": "Nie zużyty", + "used": "Zużyte" + }, "option": { "all": "Wszystkie", "expired": "Wygasłe/zużyte", "open": "Otwarte" }, + "ordering": { + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie jednego wyniku | Wyświetlanie wynikĆ³w od { start } do { end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy, adresu e-mail, koduā€¦" + }, "table": { "invitation": { "header": { @@ -2495,372 +2617,250 @@ "status": "Stan" } } - }, - "action": { - "delete": "Usuń" - }, - "label": { - "expired": "Wygasłe", - "unused": "Nie zużyty", - "search": "Szukaj", - "status": "Stan", - "used": "Zużyte" - }, + } + }, + "UsersTable": { + "notApplicable": "Niedostępne", "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, "label": "Porządkowanie" }, - "placeholder": { - "search": "Szukaj za pomocą nazwy, adresu e-mail, koduā€¦" - }, "pagination": { "results": "Wyświetlanie jednego wyniku | Wyświetlanie wynikĆ³w od { start } do { end } z { total }" - } - }, - "InvitationForm": { - "button": { - "clear": "Wyczyść", - "new": "Uzyskaj nowe zaproszenie" }, - "table": { - "invitation": { - "header": { - "code": "Kod", - "link": "Odnośnik do udostępniania" - } - } - }, - "header": { - "failure": "Wystąpił błąd podczas tworzenia zaproszenia" - }, - "label": { - "invite": "Kod zaproszenia" + "permission": { + "library": "Biblioteka", + "moderation": "Moderacja", + "settings": "Ustawienia" }, "placeholder": { - "invitation": "Pozostaw puste, aby wygenerować kod" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Działania", - "label": "Etykieta pola", - "type": "Typ pola", - "required": "Wymagane" - }, - "type": { - "long": "Długi tekst", - "short": "KrĆ³tki tekst" - }, - "required": { - "false": "Nie", - "true": "Tak" + "search": "Szukaj za pomocą nazwy, adresu e-mailā€¦" + }, + "table": { + "user": { + "accountStatus": { + "active": "Aktywny", + "inactive": "Nieaktywny" + }, + "header": { + "accountStatus": "Stan konta", + "email": "Adres E-mail", + "lastActivity": "Ostatnia aktywność", + "permissions": "Uprawnienia", + "signup": "Rejestracja", + "status": "Stan", + "username": "Nazwa użytkownika" + }, + "status": { + "admin": "Administrator", + "regular": "Zwykły użytkownik", + "staff": "Członek administracji" + } } } - }, - "button": { - "add": "Dodaj nowe pole", - "edit": "Edytuj formularz", - "preview": "Podgląd formularza" - }, - "label": { - "additionalField": "Dodatkowe pole", - "additionalFields": "Dodatkowe pola", - "delete": "Usuń", - "helpText": "Podręcznik pomocy", - "moveDown": "Przesuń w dĆ³Å‚", - "moveUp": "Przesuń w gĆ³rę" - }, - "help": { - "additionalFields": "Dodatkowe pola do wyświetlenia w formularzu rejestracji. Ich zawartość jest widoczna tylko gdy manualna weryfikacja rejestracji jest włączona.", - "helpText": "Opcjonalny tekst, ktĆ³ry będzie widoczny nad formularzem rejestracji." - } - }, - "SettingsGroup": { - "header": { - "image": "Aktualny obraz", - "error": "Wystąpił błąd podczas zapisywania ustawień" - }, - "button": { - "save": "Zapisz" - }, - "message": { - "success": "Pomyślnie zapisano ustawienia." } } }, "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Wszystkie" + "FilterModal": { + "button": { + "cancel": "Anuluj", + "hide": "Ukryj zawartość" }, + "header": { + "failure": "Wystąpił błąd podczas tworzenia filtra", + "modal": "Czy chcesz ukryć zawartość od wykonawcy ā€ž{ name }ā€?" + }, + "help": { + "createFilter": "Możesz zmieniać filtry w ustawieniach swojego konta kiedy tylko chcesz." + }, + "message": { + "success": "Filtr treści został dodany pomyślnie" + }, + "warning": { + "createFilter": { + "listIntro": "Nie będziesz więcej widział utworĆ³w, albumĆ³w oraz aktywności użytkownikĆ³w powiązanej z tym wykonawcą:", + "listItem1": "W ulubionych innych użytkownikĆ³w i historii odtwarzania", + "listItem2": "W panelu ā€žOstatnio dodaneā€", + "listItem3": "W wykazach wykonawcĆ³w i albumĆ³w", + "listItem4": "W sugestiach radiowych" + } + } + }, + "ReportCategoryDropdown": { "label": { "category": "Kategoria" + }, + "option": { + "all": "Wszystkie" } }, "ReportModal": { + "button": { + "cancel": "Anuluj", + "submit": "Prześlij zgłoszenie" + }, + "description": { + "email": "Użyjemy tego adresu e-mail, jeśli zajdzie potrzeba, aby się z Tobą skontaktować odnośnie tego raportu.", + "forwardToDomain": "Przekaż zanonimizowaną kopię raportu do serwera goszczącego ten element.", + "message": "Użyj tego pola, aby przybliżyć kontekst moderatorowi, ktĆ³ry się zajmie się twoim raportem.", + "modal": "Użyj tego formularza, aby przesłać zgłoszenie do zespołu moderującego." + }, "header": { "disabled": "Anonimowe zgłoszenia są wyłączone. Zaloguj się, aby przesłać zgłoszenie.", "modal": "Czy chcesz zgłosić ten obiekt?", "submissionFailure": "Wystąpił błąd podczas przesyłania zgłoszenia" }, - "button": { - "cancel": "Anuluj", - "submit": "Prześlij zgłoszenie" - }, "label": { "email": "Adres E-mail", "forwardToDomain": "Przekaż do { domain }", "message": "Wiadomość" }, - "description": { - "forwardToDomain": "Przekaż zanonimizowaną kopię raportu do serwera goszczącego ten element.", - "message": "Użyj tego pola, aby przybliżyć kontekst moderatorowi, ktĆ³ry się zajmie się twoim raportem.", - "modal": "Użyj tego formularza, aby przesłać zgłoszenie do zespołu moderującego.", - "email": "Użyjemy tego adresu e-mail, jeśli zajdzie potrzeba, aby się z Tobą skontaktować odnośnie tego raportu." - }, "message": { "submissionSuccess": "Zgłoszenie zostało przesłane pomyślnie, dziękujemy" } - }, - "FilterModal": { + } + }, + "notifications": { + "NotificationRow": { "button": { - "cancel": "Anuluj", - "hide": "Ukryj zawartość" + "approve": "ZatwierdÅŗ", + "markRead": "Oznacz jako przeczytane", + "markUnread": "Oznacz jako nieprzeczytane", + "reject": "Odrzuć" }, "message": { - "success": "Filtr treści został dodany pomyślnie" - }, - "header": { - "modal": "Czy chcesz ukryć zawartość od wykonawcy ā€ž{ name }ā€?", - "failure": "Wystąpił błąd podczas tworzenia filtra" - }, - "warning": { - "createFilter": { - "listItem2": "W panelu ā€žOstatnio dodaneā€", - "listItem3": "W wykazach wykonawcĆ³w i albumĆ³w", - "listItem1": "W ulubionych innych użytkownikĆ³w i historii odtwarzania", - "listItem4": "W sugestiach radiowych", - "listIntro": "Nie będziesz więcej widział utworĆ³w, albumĆ³w oraz aktywności użytkownikĆ³w powiązanej z tym wykonawcą:" - } - }, - "help": { - "createFilter": "Możesz zmieniać filtry w ustawieniach swojego konta kiedy tylko chcesz." + "libraryAcceptFollow": "{ username } zaakceptował(-a) twoją prośbę o obserwowanie biblioteki \"{ library }\"", + "libraryFollow": "{ username } zaobserwował twoją bibliotekę \"{ library }\"", + "libraryPendingFollow": "{ username } chciałby obserwować twoją bibliotekę \"{ library }\"" } } }, - "federation": { - "FetchButton": { - "description": { - "failure": "Podczas prĆ³by odświeżenia danych wystąpił błąd:", - "success": "Dane zostały pomyślnie odświeżone ze zdalnego serwera.", - "pending": "Serwer nie obsłużył żądania odświeżenia na czas. Zostanie ono przetworzone pĆ³Åŗniej.", - "skipped": "Zdalny serwer odpowiedział, ale zwrĆ³cił nie wspierane przez Funkwhale dane." + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } utwĆ³r | { n } utwory" + } + }, + "Editor": { + "button": { + "addDuplicate": "Dodaj mimo to", + "clear": "Wyczyść listę odtwarzania", + "copy": "Skopiuj utwory z obecnej kolejki do listy odtwarzania", + "insertFromQueue": "Dodaj z kolejki odtwarzania ({ n } utwĆ³r) | Dodaj z kolejki odtwarzania ({ n } utwory)" + }, + "error": { + "sync": "Podczas zapisywania twoich zmian wystąpił błąd" + }, + "header": { + "editor": "Edytor list odtwarzania" + }, + "help": { + "reorder": "Przeciągnij i upuść aby zmienić kolejność utworĆ³w w liście odtwarzania" + }, + "loading": { + "sync": "Synchronizowanie zmian z serweremā€¦" + }, + "message": { + "sync": "Zsynchronizowano zmiany z serwerem" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania i nie zostać być cofnięte." + }, + "header": "Czy chcesz wyczyścić listę odtwarzania ā€ž{ playlist }ā€?" + } + }, + "warning": { + "duplicate": "Jakieś utwory z Twojej kolejki są już na tej liście odtwarzania:" + } + }, + "Form": { + "button": { + "create": "UtwĆ³rz listę odtwarzania", + "update": "Zapisz listę odtwarzania" + }, + "header": { + "createFailure": "Nie można było utworzyć listy odtwarzania", + "createPlaylist": "UtwĆ³rz nową listę odtwarzania", + "createSuccess": "Utworzono listę odtwarzania", + "updateSuccess": "Zaktualizowano listę odtwarzania" + }, + "label": { + "name": "Nazwa listy odtwarzania", + "visibility": "Widoczność listy odtwarzania" + }, + "placeholder": { + "name": "Moja wspaniała lista odtwarzania" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Dodaj mimo to", + "addToPlaylist": "Dodaj do tej listy odtwarzania", + "addTrack": "Dodaj utwĆ³r", + "cancel": "Anuluj", + "edit": "Edytuj" + }, + "empty": { + "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" + }, + "header": { + "addFailure": "Nie udało się dodać tego utworu do listy odtwarzania", + "addToPlaylist": "Dodaj do listy odtwarzania", + "available": "Dostępne listy odtwarzania", + "manage": "Zarządzaj listami odtwarzania", + "noResults": "Nie ma żadnych wynikĆ³w zgodnych z Twoim filtrem" + }, + "label": { + "filter": "Filtr" + }, + "placeholder": { + "filterPlaylist": "WprowadÅŗ nazwę listy odtwarzania" }, "table": { - "error": { - "value": { - "httpError": "Wystąpił błąd HTTP podczas kontaktowania się ze zdalnym serwerem", - "invalidAttributesError": "Dane zwrĆ³cone przez serwer zdalny miały nieprawidłowe lub brakujące atrybuty", - "connectionError": "Nie można połączyć się ze zdalnym serwerem", - "httpStatus": "Zdalny serwer odpowiedział ze statusem HTTP { status }", - "timeoutError": "Zdalny serwer nie odpowiedział wystarczająco szybko", - "invalidJsonError": "Zdalny serwer zwrĆ³cił dane nie będące poprawnym JSON lub JSON-LD", - "unknownError": "Nieznany błąd" - }, - "label": { - "detail": "SzczegĆ³Å‚y błędu", - "type": "Typ błędu" + "edit": { + "header": { + "edit": "Edytuj", + "lastModification": "Ostatnia modyfikacja", + "name": "Nazwa", + "tracks": "Utwory" } } }, - "button": { - "close": "Zamknij", - "reload": "Zamknij i odśwież stronę" - }, - "header": { - "saveFailure": "Wystąpił błąd podczas zapisywania ustawień", - "failure": "Błąd odswieżania", - "pending": "Odświeżanie w toku", - "success": "Odświeżanie zakończone sukcesem", - "skipped": "Odświeżanie zostało pominięte", - "refresh": "Odświeżanie obiektu z serwera zdalnegoā€¦" - }, - "loader": { - "fetchRequest": "Pobieranieā€¦", - "awaitingResult": "Ładowanie zdalnych wynikĆ³wā€¦" + "warning": { + "duplicate": "{ 0 } jest już w liście odtwarzania { 1 }." } }, - "LibraryWidget": { - "empty": { - "noMatch": "Nie znaleziono pasującej biblioteki." - }, + "TrackPlaylistIcon": { "button": { - "showMore": "Pokaż więcej" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "SkrĆ³ty odtwarzacza", - "clearQueue": "Wyczyść kolejkę odtwarzania", - "decreaseVolume": "Zmniejsz głośność", - "expandQueue": "Rozwiń kolejkę odtwarzania/widok odtwarzacza", - "increaseVolume": "Zwiększ głośność", - "playPause": "Zatrzymaj/odtwarzaj aktualny utwĆ³r", - "playNext": "Następny utwĆ³r", - "playPrevious": "Poprzedni utwĆ³r", - "seekBack30": "Cofnij o 30 sekund", - "seekBack5": "Cofnij o 5 sekund", - "seekForward30": "Pomiń 30 sekund", - "seekForward5": "Pomiń 5 sekund", - "shuffleQueue": "Wymieszaj kolejkę", - "toggleFavorite": "Dodaj lub usuń z ulubionych", - "toggleMute": "Przełącz wyciszenie", - "toggleLoop": "Włącz zapętlenie kolejki" - }, - "general": { - "focus": "Aktywuj pasek wyszukiwania", - "label": "SkrĆ³ty ogĆ³lne", - "show": "Pokaż dostępne skrĆ³ty klawiszowe", - "unfocus": "Dezaktywuj pasek wyszukiwania" + "add": "Dodaj do listy odtwarzaniaā€¦" } }, - "button": { - "close": "Zamknij" - }, - "header": { - "modal": "SkrĆ³ty klawiszowe" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Anuluj", - "submit": "Prześlij" - }, - "header": { - "chooseInstance": "Wybierz instancję", - "failure": "Nie można połączyć się z podanym adresem URL", - "suggestions": "Polecane" - }, - "label": { - "url": "Adres URL instancji" - }, - "help": { - "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", - "serverDown": "Serwer może być niedostępny", - "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do ktĆ³rej chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji." - }, - "message": { - "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" - } - }, - "Queue": { - "button": { - "clear": "Wyczyść", - "close": "Zamknij", - "stopRadio": "Zatrzymaj radio" - }, - "label": { - "duration": "Czas trwania", - "addArtistContentFilter": "Ukryj zawartość od tego wykonawcyā€¦", - "next": "Następny utwĆ³r", - "pause": "Wstrzymaj", - "play": "Odtwarzaj", - "previous": "Poprzedni utwĆ³r", - "queue": "Kolejka odtwarzania", - "remove": "Usuń", - "restart": "OdtwĆ³rz utwĆ³r ponownie" - }, - "message": { - "radio": "Nowe utwory pojawią się tutaj automatycznie.", - "automaticPlay": "Następny utwĆ³r zostanie odtworzony automatycznie w ciągu kilku sekundā€¦" - }, - "header": { - "failure": "Ten utwĆ³r nie mĆ³gł zostać wczytany", - "radio": "Słuchasz stacji radiowej" - }, - "meta": { - "queuePosition": "UtwĆ³r { index } z { length }" - }, - "warning": { - "connectivity": "Możesz mieć problemy z łącznością." - } - }, - "forms": { - "PasswordInput": { + "Widget": { "button": { - "copy": "Kopiuj" + "create": "UtwĆ³rz listę odtwarzania", + "more": "Pokaż więcej" }, - "title": "Pokaż/ukryj hasło", - "message": { - "copy": "Skopiowano tekst do schowka!" + "placeholder": { + "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" } } }, "radios": { + "Button": { + "startRadio": "Odtwarzaj stację radiową", + "stopRadio": "Zatrzymaj radio" + }, "Card": { "button": { "edit": "Edytuj" } - }, - "Button": { - "startRadio": "Odtwarzaj stację radiową", - "stopRadio": "Zatrzymaj radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Wystąpił błąd podczas pobierania obiektu" - }, - "button": { - "fediverse": "Fediverse", - "rss": "Kanał RSS", - "search": "Szukaj" - }, - "label": { - "fediverse": { - "fieldLabel": "Obiekt Fediverse", - "title": "Obserwuj podcast z Fediverse" - }, - "rss": { - "fieldPlaceholder": "https://adres.strony/rss.xml", - "fieldLabel": "Lokalizacja kanału RSS", - "title": "Zasubskrybuj kanał RSS podcastu" - } - }, - "warning": { - "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" - }, - "error": { - "fetchFailed": "Ten obiekt nie mĆ³gł zostać pobrany" - }, - "description": { - "fediverse": "Użyj tego formularza, aby obserwować kanał znajdujący się gdzieś indziej we Fediverse.", - "rss": "Użyj tego formularza, aby obserwować kanał RSS znajdujący się pod danym adresem URL." - } - }, - "PageNotFound": { - "link": { - "home": "PrzejdÅŗ na stronę gÅ‚Ć³wną" - }, - "title": "Nie odnaleziono strony", - "header": { - "pageNotFound": "Nie odnaleziono strony!" - }, - "message": { - "pageNotFound": "Przepraszamy, strona ktĆ³rej szukasz nie istnieje:" - } - }, - "vui": { - "Pagination": { - "next": "Następna strona", - "label": "Stronicowanie", - "previous": "Poprzednia strona" } }, "tags": { @@ -2869,590 +2869,309 @@ "more": "Pokaż { n } kolejny tag | Pokaż { n } kolejne tagi" } } + }, + "vui": { + "Pagination": { + "label": "Stronicowanie", + "next": "Następna strona", + "previous": "Poprzednia strona" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Dodano { n } utwĆ³r do kolejki | Dodano { n } utwory do kolejki" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Muzyka", + "other": "lnne", + "podcast": "Podcast" + }, + "label": "Kategoria treści" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Ten utwĆ³r został przesłany, ale nie został jeszcze wyznaczony do przetwarzania", + "label": "Oczekujący" + }, + "errored": { + "help": "Wystąpił błąd podczas przetwarzania tego utworu, upewnij się że posiada on poprawne metadane", + "label": "Zakończono błędem" + }, + "finished": { + "help": "Zaimportowano", + "label": "Ukończono" + }, + "pending": { + "help": "Ten utwĆ³r został przesłany, ale nie został jeszcze przetworzony przez serwer", + "label": "W toku" + }, + "skipped": { + "help": "Ten utwĆ³r jest już w jednej z bibliotek", + "label": "Pominięto" + } + }, + "label": "Kliknij, aby zobaczyć więcej informacji dotyczących procesu importowania tego pliku" + }, + "privacyLevel": { + "choices": { + "instance": "Każdy na tej instancji", + "private": "Nikt poza mną", + "public": "Każdy na dowolnej instancji" + }, + "help": "Ustal poziom widoczności twojej aktywności", + "label": "Widoczność aktywności", + "shortChoices": { + "instance": "Instancja", + "private": "Prywatne", + "public": "Każdy" + } + }, + "reportType": { + "choices": { + "illegalContent": "Nielegalne treści", + "invalidMetadata": "Nieprawidłowe metadane", + "offensiveContent": "ObraÅŗliwe treści", + "other": "lnna", + "takedownRequest": "Prośba o usunięcie" + }, + "label": "Kategoria" + }, + "summary": { + "label": "O mnie" + } + }, + "filters": { + "accessedDate": "Data dostępu", + "albumTitle": "Nazwa albumu", + "artistName": "Nazwa wykonawcy", + "bitrate": "Szybkość transmisji", + "creationDate": "Data utworzenia", + "dateJoined": "Data rejestracji", + "domain": "Domena", + "duration": "Czas trwania", + "expirationDate": "Data wygaśnięcia", + "firstSeen": "Data widzenia po raz pierwszy", + "followers": "Obserwatorzy", + "itemsCount": "Elementy", + "lastActivity": "Ostatnia aktywność", + "lastSeen": "Data ostatniej aktywności", + "modificationDate": "Data modyfikacji", + "name": "Nazwa", + "receivedMessages": "Otrzymane wiadomości", + "releaseDate": "Data wydania", + "size": "Rozmiar", + "trackTitle": "Tytuł utworu", + "uploads": "Przesłane pliki", + "username": "Nazwa użytkownika", + "users": "Użytkownicy" + }, + "scopes": { + "edits": { + "description": "Dostęp do edycji", + "label": "Edycje" + }, + "favorites": { + "label": "Ulubione" + }, + "filters": { + "description": "Dostęp do filtrĆ³w treści", + "label": "Filtry treści" + }, + "follows": { + "description": "Dostęp do obserwowanych", + "label": "Obserwacje" + }, + "libraries": { + "description": "Dostęp do plikĆ³w audio, bibliotek, wykonawcĆ³w, albumĆ³w i utworĆ³w", + "label": "Biblioteki i przesłane pliki" + }, + "listenings": { + "description": "Dostęp do historii odtwarzania", + "label": "Odsłuchania" + }, + "notifications": { + "description": "Dostęp do powiadomień", + "label": "Powiadomienia" + }, + "playlists": { + "description": "Dostęp do list odtwarzania", + "label": "Listy odtwarzania" + }, + "profile": { + "description": "Dostęp do adresu e-mail, nazwy użytkownika i informacji o profilu", + "label": "Profil" + }, + "radios": { + "description": "Dostęp do stacji radiowych", + "label": "Stacje radiowe" + }, + "reports": { + "description": "Dostęp do zgłoszeń moderacyjnych", + "label": "Zgłoszenia" + }, + "security": { + "description": "Dostęp do ustawień związanych z bezpieczeństwem np. haseł i autoryzacji", + "label": "Bezpieczeństwo" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data wydania", + "title": "Tytuł" + }, + "artist": { + "name": "Nazwa" + }, + "cover": { + "label": "Okładka" + }, + "description": { + "label": "Opis" + }, + "tags": { + "label": "Tagi" + }, + "track": { + "copyright": "Prawa autorskie", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + } + }, + "useReport": { + "account": { + "typeLabel": "Konto" + }, + "album": { + "label": "Zgłoś ten albumā€¦", + "typeLabel": "Album" + }, + "artist": { + "label": "Zgłoś tego wykonawcęā€¦", + "typeLabel": "Wykonawca" + }, + "channel": { + "label": "Zgłoś ten kanałā€¦", + "typeLabel": "Kanał" + }, + "library": { + "label": "Zgłoś tę bibliotekęā€¦", + "typeLabel": "Biblioteka" + }, + "playlist": { + "label": "Zgłoś tę listę odtwarzaniaā€¦", + "typeLabel": "Lista odtwarzania" + }, + "track": { + "label": "Zgłoś ten utwĆ³rā€¦", + "typeLabel": "UtwĆ³r" + } + }, + "useReportConfigs": { + "account": { + "label": "Konto", + "summary": "O mnie" + }, + "album": { + "label": "Album", + "releaseDate": "Data wydania", + "title": "Tytuł" + }, + "artist": { + "label": "Wykonawca" + }, + "channel": { + "label": "Kanał" + }, + "creationDate": { + "label": "Data utworzenia" + }, + "library": { + "description": "Opis", + "label": "Biblioteka" + }, + "musicbrainzId": { + "label": "Identyfikator MusicBrainz" + }, + "name": { + "label": "Nazwa" + }, + "playlist": { + "label": "Lista odtwarzania" + }, + "tags": { + "label": "Tagi" + }, + "track": { + "copyright": "Prawa autorskie", + "label": "UtwĆ³r", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + }, + "visibility": { + "label": "Widoczność" + } + } + }, + "useThemeList": { + "darkTheme": "Ciemny", + "lightTheme": "Jasny" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, sprĆ³buj ponownie za { delay }", + "rateLimitLater": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, sprĆ³buj ponownie pĆ³Åŗniej" + }, + "serviceWorker": { + "actions": { + "later": "PĆ³Å¼niej", + "update": "Aktualizuj" + }, + "newAppVersion": "Dostępna jest nowa wersja aplikacji." } }, "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } epizod | { n } epizody", - "listenings": "{ n } odsłuchanie | { n } odsłuchania", - "subscribers": "{ n } subskrybent | { n } subskrybentĆ³w", - "tracks": "{ n } utwĆ³r | { n } utwory" - }, - "link": { - "channelEpisodes": "Wszystkie odcinki", - "mirrored": "Odzwierciedlane z { domain }", - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "channelOverview": "Przegląd", - "channelTracks": "Utwory", - "domainView": "Zobacz na { domain }" - }, - "header": { - "artistChannel": "Kanał wykonawcy", - "podcastChannel": "Kanał podcastowy" - }, - "button": { - "cancel": "Anuluj", - "confirm": "Usuń", - "delete": "Usuńā€¦", - "edit": "Edytujā€¦", - "embed": "OsadÅŗ", - "play": "Odtwarzaj", - "updateChannel": "Zapisz kanał", - "upload": "Prześlij pliki" - }, - "title": "Kanał", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Wklej następujący adres URL do swojej ulubionej aplikacji do podcastĆ³w:" - }, - "header": "Zasubskrybuj za pomocą RSS" - }, - "fediverse": { - "content": { - "help": "Jeśli używasz Mastodona albo innych aplikacji Fediverse, to możesz zasubskrybować to konto:" - }, - "header": "Obserwuj na Fediverse" - }, - "funkwhale": { - "header": "Obserwuj na Funkwhale" - }, - "header": "Obserwuj ten kanał" - }, - "delete": { - "header": "Usunąć ten kanał?", - "content": { - "warning": "Kanał zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "OsadÅŗ prace tego wykonawcy na swojej stronie internetowej" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Dodaj", - "erroredUploads": "Zobacz pliki, ktĆ³rych import zakończył się błędem", - "skippedUploads": "Zobacz pominięte pliki" - }, - "header": { - "albums": "Albumy", - "latestEpisodes": "Najnowsze odcinki", - "latestTracks": "Najnowsze utwory", - "series": "Seriale", - "uploadsFailure": "Kilka przesłanych plikĆ³w nie mogło zostać opublikowane", - "uploadsProcessing": "Przesłane pliki są przetwarzane", - "uploadsSuccess": "Przesłane pliki zostały opublikowane pomyślnie" - }, - "meta": { - "progress": "Przetworzone pliki:" - }, - "message": { - "processing": "Twoje przesłane pliki są przetwarzane przez Funkwhale i będą wkrĆ³tce dostępne." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Dodaj" - }, - "button": { - "cancel": "Anuluj", - "subscribe": "Obserwuj" - }, - "placeholder": { - "search": "Filtruj po nazwieā€¦" - }, - "title": "Obserwowane kanały", - "modal": { - "subscription": { - "header": "Subskrypcja" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } utwĆ³r | { n } utwory" - }, - "link": { - "details": "SzczegĆ³Å‚y biblioteki" - }, - "label": { - "size": "Łączny rozmiar wszystkich plikĆ³w w tej bibliotece" - }, - "button": { - "upload": "Prześlij pliki" - } - }, - "Quota": { - "label": { - "currentUsage": "Wykorzystano { current } z przydzielonego { max }", - "errored": "Pliki zakończone błędem", - "pending": "Pliki w trakcie przetwarzania", - "skipped": "Pominięte pliki" - }, - "header": { - "currentUsage": "Obecne użycie" - }, - "loading": { - "currentUsage": "Ładowanie danych o użyciuā€¦" - }, - "button": { - "purge": "Wyczyść" - }, - "modal": { - "purgeErrored": { - "header": "Wyczyścić pliki zakończone błędami?", - "content": { - "description": "Ta opcja usunie utwory ktĆ³re zostały przesłane, ale wystąpił błąd podczas ich importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - }, - "purgePending": { - "header": "Wyczyścić pliki w toku?", - "content": { - "description": "Ta opcja usunie utwory ktĆ³re zostały przesłane, ale nie zostały jeszcze przetworzone, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - }, - "purgeSkipped": { - "header": "Wyczyścić pominięte pliki?", - "content": { - "description": "Ta opcja usunie utwory ktĆ³re zostały przesłane, lecz pominięte w procesie importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - } - }, - "link": { - "viewFiles": "Zobacz pliki" - } - }, - "FilesTable": { - "table": { - "file": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "duration": "Czas trwania", - "importStatus": "Stan importu", - "size": "Rozmiar", - "title": "Tytuł", - "uploadDate": "Data przesłania" - } - } - }, - "option": { - "status": { - "all": "Wszystkie", - "draft": "Oczekujący", - "failed": "Zakończony błędem", - "finished": "Ukończono", - "pending": "W toku", - "skipped": "Pominięto" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": "Usuń", - "restartImport": "Uruchom importowanie ponownie" - }, - "label": { - "importStatus": "Stan importu", - "search": "Szukaj" - }, - "notApplicable": "Niedostępne", - "empty": { - "noTracks": "Nie dodano jeszcze żadnych utworĆ³w do tej biblioteki" - }, - "placeholder": { - "search": "Szukaj za pomocą tytułu, wykonawcy, albumuā€¦" - }, - "button": { - "showStatus": "Pokaż więcej informacji dotyczących procesu importowania tego utworu" - }, - "pagination": { - "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" - } - }, - "Home": { - "link": { - "createLibrary": "UtwĆ³rz nową bibliotekę" - }, - "loading": { - "libraries": "Ładowanie bibliotekā€¦" - }, - "empty": { - "noLibrary": "Wygląda na to, że nie masz jeszcze żadnej biblioteki ā€” może to już czas, żeby jakąś utworzyć?" - }, - "header": { - "libraries": "Moje biblioteki" - } - }, - "Form": { - "button": { - "create": "UtwĆ³rz bibliotekę", - "delete": "Usuń", - "confirm": "Usuń bibliotekę", - "update": "Zapisz bibliotekę" - }, - "modal": { - "delete": { - "header": "Usunąć tę bibliotekę?", - "content": { - "warning": "Biblioteka i wszystkie znajdujące się w niej utwory zostaną usunięte. To działanie jest nieodwracalne." - } - } - }, - "label": { - "description": "Opis", - "name": "Nazwa", - "visibility": "Widoczność" - }, - "header": { - "failure": "Błąd" - }, - "description": { - "library": "Biblioteki pomagają organizować i udostępniać kolekcje muzyki. Możesz przesłać własną kolekcję muzyki na Funkwhale i dzielić się nią z rodziną i znajomymi.", - "visibility": "Możesz udostępniać swoją bibliotekę innym, nie zważając na jej widoczność." - }, - "message": { - "libraryCreated": "Utworzono bibliotekę", - "libraryDeleted": "Usunięto bibliotekę", - "libraryUpdated": "Zaktualizowano bibliotekę" - }, - "placeholder": { - "name": "Moja wspaniała biblioteka", - "description": "Ta biblioteka zawiera moją osobistą muzykę, mam nadzieję że Ci się spodoba." - } - } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } utwĆ³r | { n } utwory", - "failedTracks": "Utwory zakończone błędem:", - "lastUpdate": "Ostatnia aktualizacja:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Gdy przestaniesz obserwować tę bibliotekę, stracisz dostęp do jej zawartości." - }, - "header": "Czy chcesz przestać obserwować tę bibliotekę?" - } - }, - "button": { - "cancel": "Cofnij prośbę o obserwowanie", - "follow": "Obserwuj", - "pending": "Obserwowanie oczekuje na zatwierdzenie", - "unfollow": "Przestań obserwować" - }, - "link": { - "scanDetails": "SzczegĆ³Å‚y", - "scan": "Skanuj teraz" - }, - "label": { - "scanFailure": "Problem podczas skanowania", - "scanPending": "Skanowanie w toku", - "scanSuccess": "Przeskanowano", - "scanPartialSuccess": "Przeskanowano z błędami", - "scanProgress": "Skanowanieā€¦ ({ progress }%)", - "sharingLink": "Odnośnik do udostępnienia" - }, - "message": { - "scanLaunched": "Uruchomiono skanowanie", - "scanSkipped": "Skanowanie pominięte (poprzednie skanowanie odbyło się zbyt niedawno)" - }, - "tooltip": { - "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", - "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" - } - }, - "ScanForm": { - "header": { - "failure": "Wystąpił błąd podczas pobierania zdalnej biblioteki" - }, - "placeholder": { - "url": "WprowadÅŗ adres URL biblioteki" - }, - "label": { - "search": "Wyszukaj w zdalnej bibliotece" - }, - "button": { - "submit": "ZatwierdÅŗ wyszukiwanie" - } - }, - "Home": { - "header": { - "knownLibraries": "Znane biblioteki", - "remoteLibraries": "Zdalne biblioteki" - }, - "loading": { - "remoteLibraries": "Ładowanie zdalnych bibliotekā€¦" - }, - "button": { - "refresh": "Odśwież" - }, - "description": { - "remoteLibraries": "Zdalne biblioteki należą do użytkownikĆ³w innych instancji. Możesz uzyskać do nich dostęp jeżeli został Ci on przyznany lub jeżeli są publiczne." - } - } - }, - "Home": { - "title": "Dodaj lub zarządzaj zawartością", - "description": { - "follow": "Możesz zaobserwować biblioteki innych użytkownikĆ³w, aby uzyskać dostęp do nowej muzyki. Publiczne biblioteki mogą być zaobserwowane natychmiast, a do zaobserwowania prywatnej biblioteki będziesz potrzebował zgody jej właściciela.", - "channel": { - "1": "Jeżeli jesteś muzykiem lub tworzysz podcasty, kanały są stworzone dla Ciebie!", - "2": "Udostępnij twoje utwory publicznie i zdobądÅŗ obserwatorĆ³w na Funkwhale, Fediverse albo jakiejkolwiek aplikacji do podcastĆ³w." - }, - "upload": "Prześlij swoją osobistą muzykę do Funkwhale, aby czerpać z niej przyjemność w każdym miejscu oraz dzielić się nią z przyjaciĆ³Å‚mi i rodziną." - }, - "header": { - "follow": "Obserwuj zdalne biblioteki", - "channel": "Publikuj swoje prace na kanale", - "upload": "Prześlij do biblioteki treści innych wykonawcĆ³w" - }, - "button": { - "start": "Rozpocznij" - }, - "help": { - "uploadQuota": "Ta instancja oferuje {quota} przestrzeni dla każdego użytkownika." - } - }, - "Base": { - "title": "Dodaj zawartość", - "link": { - "libraries": "Biblioteki", - "tracks": "Utwory" - }, - "menu": { - "secondary": "Podmenu" - } - } - }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } utwĆ³r | { n } utwory" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "owner": "Należy do { username }", - "tracks": "Utwory", - "domain": "Zobacz na { domain }" - }, - "button": { - "edit": "Edytuj", - "upload": "Prześlij pliki" - }, - "title": "Biblioteka", - "label": { - "private": "Prywatne", - "public": "Publiczne", - "instance": "Ograniczona", - "sharingLink": "Odnośnik do udostępnienia" - }, - "description": { - "sharingLink": "Podziel się tym odnośnikiem z innymi użytkownikami, aby mogli poprosić o dostęp do Twojej biblioteki poprzez wklejenie go w pole wyszukiwania." - }, - "tooltip": { - "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", - "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości", - "instance": "Dostęp do tej biblioteki jest ograniczony tylko do użytkownikĆ³w tej instancji" - } - }, - "Edit": { - "button": { - "accept": "Zaakceptuj", - "reject": "Odrzuć" - }, - "table": { - "action": { - "status": { - "accepted": "Zaakceptowano", - "pending": "Oczekuje na przyjęcie", - "rejected": "Odrzucono" - }, - "header": { - "action": "Działanie", - "date": "Data", - "status": "Stan", - "user": "Użytkownik" - } - } - }, - "header": { - "followers": "Obserwatorzy", - "libraryContents": "Zawartość biblioteki" - }, - "loading": { - "followers": "Ładowanie obserwującychā€¦" - }, - "empty": { - "noFollowers": "Nikt nie obserwuje tej biblioteki" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - }, - "DetailOverview": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - }, - "DetailTracks": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Profil { username }", - "link": { - "activity": "Aktywność", - "moderation": "OtwĆ³rz w interfejsie moderacyjnym", - "overview": "Przegląd", - "domainView": "Zobacz na { domain }" - }, - "label": { - "self": "To Ty!" - } - }, - "PasswordReset": { - "label": { - "email": "Adres e-mail" - }, - "button": { - "requestReset": "Poproś o zresetowanie hasła" - }, - "link": { - "back": "WrĆ³Ä‡ do logowania" - }, - "placeholder": { - "email": "WprowadÅŗ adres e-mail powiązany z twoim kontem" - }, - "header": { - "failure": "Wystąpił błąd podczas prĆ³by zresetowania hasła", - "reset": "Zresetuj hasło" - }, - "title": "Zresetuj hasło", - "help": { - "form": "Użyj tego formularza, aby poprosić o zresetowanie hasła. Otrzymasz wiadomość z instrukcjami resetowania hasła na podany adres e-mail." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Dodaj" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Kanał wykonawcy" - }, - "header": "UtwĆ³rz kanał", - "podcast": { - "header": "Kanał podcastowy" - } - } - }, - "button": { - "cancel": "Anuluj", - "createChannel": "UtwĆ³rz kanał", - "next": "Następny krok", - "previous": "Poprzedni krok" - }, - "header": { - "channels": "Kanały", - "sharedLibraries": "Ten użytkownik udostępnił następujące biblioteki", - "libraries": "Biblioteki" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "WrĆ³Ä‡ do logowania", - "login": "PrzejdÅŗ do logowania" - }, - "title": "Zmień swoje hasło", - "header": { - "failure": "Wystąpił błąd podczas zmieniania Twojego hasła", - "success": "Pomyślnie zaktualizowano hasło" - }, - "message": { - "requestSent": "Jeżeli adres e-mail podany w poprzednim kroku jest prawidłowy i przypisany do konta użytkownika, powinieneś otrzymać wiadomość e-mail z instrukcjami resetowania hasła w przeciągu kilku minut.", - "success": "Twoje hasło zostało pomyślnie zmienione." - }, - "label": { - "newPassword": "Nowe hasło" - }, - "button": { - "update": "Aktualizuj swoje hasło" - } - }, - "EmailConfirm": { - "title": "PotwierdÅŗ swĆ³j adres e-mail", - "label": { - "confirmationCode": "Kod potwierdzenia" - }, - "header": { - "failure": "Nie można potwierdzić twojego adresu e-mail", - "success": "Potwierdzono adres e-mail" - }, - "link": { - "login": "PrzejdÅŗ do logowania", - "back": "WrĆ³Ä‡ do logowania" - }, - "message": { - "success": "TwĆ³j adres e-mail został potwierdzony, możesz teraz korzystać bez ograniczeń." - } - }, - "Signup": { - "header": { - "createAccount": "UtwĆ³rz konto Funkwhale" - }, - "title": "Rejestracja" - }, - "Login": { - "title": "Zaloguj się", - "header": { - "login": "Zaloguj się na swoje konto Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Logowanieā€¦" - } - }, - "Plugins": { - "title": "Zarządzaj rozszerzeniami" - }, - "ProfileActivity": { - "header": { - "playlists": "Listy odtwarzania", - "recentlyFavorited": "Ostatnio polubione", - "recentlyListened": "Ostatnio odsłuchane" - } - } - }, "Notifications": { + "button": { + "read": "Oznacz wszystko jako przeczytane", + "submit": "Zrozumiano!" + }, + "empty": { + "notifications": "Brak powiadomień do pokazania." + }, + "header": { + "funkwhaleSupport": "Czy lubisz Funkwhale?", + "instanceSupport": "Wspieraj tę instancję Funkwhale", + "messages": "Twoje wiadomości", + "notifications": "Twoje powiadomienia" + }, + "label": { + "reminder": "Przypomnij mi za:", + "showRead": "Pokaż odczytane powiadomienia" + }, + "link": { + "donate": "Wesprzyj", + "help": "Poznaj inne sposoby pomocy" + }, + "loading": { + "notifications": "Ładowanie powiadomieńā€¦" + }, + "message": { + "funkwhaleSupport": "Zauważyliśmy, że jesteś tu już przez pewien czas. Jeśli Funkwhale jest dla ciebie użyteczny, moglibyśmy skorzystać z twojej pomocy, aby jeszcze bardziej go ulepszyć!" + }, "option": { "delay": { "30": "30 dni", @@ -3461,584 +3180,63 @@ "never": "Nigdy" } }, - "link": { - "help": "Poznaj inne sposoby pomocy", - "donate": "Wesprzyj" + "title": "Powiadomienia" + }, + "Search": { + "button": { + "submit": "ZatwierdÅŗ wyszukiwanie" }, "header": { - "funkwhaleSupport": "Czy lubisz Funkwhale?", - "instanceSupport": "Wspieraj tę instancję Funkwhale", - "messages": "Twoje wiadomości", - "notifications": "Twoje powiadomienia" + "remote": "Wyszukaj zdalnego obiektu", + "rss": "Zasubskrybuj kanał RSS podcastu", + "search": "Szukaj" }, - "button": { - "submit": "Zrozumiano!", - "read": "Oznacz wszystko jako przeczytane" - }, - "loading": { - "notifications": "Ładowanie powiadomieńā€¦" - }, - "empty": { - "notifications": "Brak powiadomień do pokazania." - }, - "title": "Powiadomienia", "label": { - "reminder": "Przypomnij mi za:", - "showRead": "Pokaż odczytane powiadomienia" - }, - "message": { - "funkwhaleSupport": "Zauważyliśmy, że jesteś tu już przez pewien czas. Jeśli Funkwhale jest dla ciebie użyteczny, moglibyśmy skorzystać z twojej pomocy, aby jeszcze bardziej go ulepszyć!" + "albums": "Albumy", + "artists": "Artyści", + "playlists": "Listy odtwarzania", + "podcasts": "Podcasty", + "radios": "Stacje radiowe", + "series": "Seriale", + "tags": "Tagi", + "tracks": "Utwory" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nazwa użytkownika", - "loginStatus": { - "disabled": "Wyłączony", - "enabled": "Włączone", - "label": "Możliwość logowania" - }, - "displayName": "Wyświetlana nazwa", - "email": "Adres e-mail", - "lastActivity": "Ostatnia aktywność", - "lastChecked": "Ostatnio sprawdzano", - "permissions": "Uprawnienia", - "signupDate": "Data rejestracji", - "userType": "Rodzaj" - }, - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "megabyte": "MB", - "totalSize": "Całkowity rozmiar", - "uploadQuota": "Limit przestrzeni" - }, - "activity": { - "emittedFollows": "Wychodzące obserwacje bibliotek", - "emittedMessages": "Wychodzące wiadomości", - "firstSeen": "Widziany po raz pierwszy", - "receivedFollows": "Otrzymane obserwacje biblioteki" - } - }, - "header": { - "accountData": "Dane konta", - "activity": "Aktywność", - "audioContent": "Zawartość", - "localAccount": "Konto lokalne", - "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", - "noPolicy": "Nie masz żadnych reguł dla tego konta." - }, - "button": { - "addPolicy": "Dodaj politykę moderacji" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "domain": "Domena", - "libraries": "Biblioteki", - "linkedReports": "Powiązane zgłoszenia", - "openProfile": "OtwĆ³rz profil", - "remoteProfile": "OtwĆ³rz profil zdalny", - "requests": "Aplikacje o rejestrację", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "tooltip": { - "uploadQuota": "Określ, jak dużo zawartości może przesłać użytkownik. Pozostaw puste, aby użyć domyślnej wartości instancji." - }, - "option": { - "permission": { - "library": "Biblioteka", - "moderation": "Moderacja", - "settings": "Ustawienia" - } - }, - "description": { - "policy": "Polityki moderacji pomagają kontrolować sposĆ³b interakcji instancji z daną domeną lub kontem." - }, - "notApplicable": "Niedostępne", - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "Base": { - "link": { - "accounts": "Konta", - "domains": "Domeny", - "reports": "Zgłoszenia", - "userRequests": "Aplikacje o rejestrację" - }, - "title": "Moderacja", - "menu": { - "secondary": "Podmenu" - } - }, - "DomainsDetail": { - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "instanceData": "Dane instancji", - "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", - "noPolicy": "Nie masz żadnych reguł dla tej domeny." - }, - "button": { - "addPolicy": "Dodaj politykę moderacji", - "addToAllowList": "Dodaj do listy zezwoleń", - "refreshNodeInfo": "Odśwież informacje o węÅŗle", - "removeFromAllowList": "Usuń z listy zezwoleń" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "knownAccounts": "Znane konta", - "libraries": "Biblioteki", - "website": "OtwĆ³rz stronę internetową", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "activity": { - "emittedFollows": "Wychodzące obserwacje bibliotek", - "emittedMessages": "Wychodzące wiadomości", - "firstSeen": "Widziany po raz pierwszy", - "receivedFollows": "Otrzymane obserwacje biblioteki" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Wystąpił błąd podczas pobierania informacji o węÅŗle", - "label": "Stan" - }, - "inAllowList": { - "label": "Jest obecny na liście zezwoleń", - "false": "Nie", - "true": "Tak" - }, - "lastChecked": "Ostatnio sprawdzano", - "domainName": "Nazwa", - "software": { - "label": "Oprogramowanie" - }, - "totalUsers": "Wszyscy użytkownicy" - } - }, - "description": { - "policy": "Polityki moderacji pomagają kontrolować sposĆ³b interakcji instancji z daną domeną lub kontem." - }, - "notApplicable": "Niedostępne", - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "DomainsList": { - "button": { - "add": "Dodaj" - }, - "label": { - "addDomain": "Dodaj domenę", - "addToAllowList": "Dodaj do listy zezwoleń" - }, - "title": "Domeny", - "header": { - "domains": "Domeny", - "failure": "Wystąpił błąd podczas tworzenia domeny" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Wszystkie", - "resolved": "Rozwiązane", - "unresolved": "Nierozstrzygnięte" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "title": "Zgłoszenia", - "header": { - "reports": "Zgłoszenia" - }, - "label": { - "search": "Szukaj", - "status": "Stan" - }, - "placeholder": { - "search": "Szukaj za pomocą konta, podsumowania, domenyā€¦" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Wszystkie", - "approved": "Zatwierdzono", - "pending": "W toku", - "refused": "Odrzucone" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "label": { - "search": "Szukaj", - "status": "Stan" - }, - "placeholder": { - "search": "Szukaj za pomocą nazwy użytkownikaā€¦" - }, - "title": "Aplikacje o rejestrację", - "header": { - "userRequests": "Aplikacje o rejestrację" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data dostępu", - "firstSeen": "Widziany po raz pierwszy" - }, - "audioContent": { - "bitrate": { - "label": "Szybkość transmisji" - }, - "cachedSize": "Rozmiar w pamięci podręcznej", - "duration": "Czas trwania", - "size": "Rozmiar", - "track": "UtwĆ³r" - }, - "upload": { - "name": "Nazwa" - } - }, - "link": { - "account": "Konto", - "domain": "Domena", - "importStatus": "Stan importu", - "library": "Biblioteka", - "remoteProfile": "OtwĆ³rz profil zdalny", - "type": "Rodzaj", - "django": "Zobacz w panelu administracyjnym Django", - "visibility": "Widoczność" - }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "local": "Lokalne", - "uploadData": "Data przesłania" - }, - "button": { - "delete": "Usuń", - "download": "Pobierz" - }, - "modal": { - "delete": { - "header": "Usunąć ten przesłany plik?", - "content": { - "warning": "Ten plik zostanie usunięty. To działanie jest nieodwracalne." - } - } - }, - "notApplicable": "Niedostępne" - }, - "LibraryDetail": { - "link": { - "account": "Konto", - "albums": "Albumy", - "artists": "Artyści", - "domain": "Domena", - "reports": "Powiązane zgłoszenia", - "remoteProfile": "OtwĆ³rz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django", - "visibility": "Widoczność" - }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "libraryData": "Dane biblioteki", - "local": "Lokalne" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "library": { - "description": "Opis", - "name": "Nazwa" - }, - "activity": { - "firstSeen": "Widziany po raz pierwszy", - "followers": "Obserwatorzy" - } - }, - "button": { - "delete": "Usuń" - }, - "modal": { - "delete": { - "header": "Usunąć tę bibliotekę?", - "content": { - "warning": "Biblioteka zostanie usunięta razem z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "AlbumDetail": { - "header": { - "activity": "Aktywność", - "albumData": "Dane albumu", - "audioContent": "Zawartość", - "local": "Lokalne" - }, - "link": { - "artist": "Wykonawca", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "OtwĆ³rz profil lokalny", - "musicbrainz": "OtwĆ³rz na MusicBrainz", - "remoteProfile": "OtwĆ³rz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "album": { - "description": "Opis", - "title": "Tytuł" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten album?", - "content": { - "warning": "Ten album będzie usunięty wraz z plikami, utworami, ulubionymi oraz historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "ArtistDetail": { - "header": { - "activity": "Aktywność", - "artistData": "Dane wykonawcy", - "audioContent": "Zawartość", - "local": "Lokalne" - }, - "link": { - "albums": "Albumy", - "category": "Kategoria", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "OtwĆ³rz profil lokalny", - "musicbrainz": "OtwĆ³rz na MusicBrainz", - "remoteProfile": "OtwĆ³rz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "artist": { - "description": "Opis", - "name": "Nazwa" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć tego wykonawcę?", - "content": { - "warning": "Wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "TagDetail": { - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "tagData": "Dane taga" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "localProfile": "OtwĆ³rz profil lokalny", - "tracks": "Utwory", - "django": "Zobacz w panelu administracyjnym Django" - }, - "button": { - "delete": "Usuń" - }, - "modal": { - "delete": { - "header": "Usunąć ten tag?", - "content": { - "warning": "Tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." - } - } - }, - "table": { - "activity": { - "firstSeen": "Widziany po raz pierwszy" - }, - "tag": { - "name": "Nazwa" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Aktywność", - "local": "Lokalne", - "trackData": "Dane utworu" - }, - "link": { - "album": "Album", - "albumArtist": "Wykonawca albumu", - "artist": "Wykonawca", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "OtwĆ³rz profil lokalny", - "musicbrainz": "OtwĆ³rz na MusicBrainz", - "remoteProfile": "OtwĆ³rz profil zdalny", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "trackData": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "track": { - "copyright": "Prawa autorskie", - "description": "Opis", - "discNumber": "Numer płyty", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten utwĆ³r?", - "content": { - "warning": "UtwĆ³r zostanie usunięty wraz z powiązanymi plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "Base": { - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "edits": "Edycje", - "libraries": "Biblioteki", - "tags": "Tagi", - "tracks": "Utwory", - "uploads": "Przesłane pliki" - }, - "title": "Zarządzaj biblioteką", - "menu": { - "secondary": "Podmenu" - } - }, - "EditsList": { - "title": "Edycje", - "header": { - "edits": "Edycje biblioteki" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Usuń", + "openRemote": "OtwĆ³rz profil zdalny", + "refresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "channelData": "Dane kanału" + }, + "label": { + "local": "Lokalne" + }, + "link": { + "django": "Zobacz w panelu administracyjnym Django", + "localProfile": "OtwĆ³rz profil lokalny" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanał zostanie usunięty wraz z plikami, utworami i albumami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten kanał?" + } + }, "table": { - "channelData": { - "account": "Konto", - "category": "Kategoria", - "description": "Opis", - "domain": "Domena", - "name": "Nazwa", - "rss": "Kanał RSS", - "url": "Adres URL" + "activity": { + "edits": "Edycje", + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "linkedReports": "Powiązane zgłoszenia", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" }, "audioContent": { "albums": "Albumy", @@ -4047,40 +3245,16 @@ "tracks": "Utwory", "uploads": "Przesłane pliki" }, - "activity": { - "edits": "Edycje", - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "linkedReports": "Powiązane zgłoszenia", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" + "channelData": { + "account": "Konto", + "category": "Kategoria", + "description": "Opis", + "domain": "Domena", + "name": "Nazwa", + "rss": "Kanał RSS", + "url": "Adres URL" } }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "channelData": "Dane kanału" - }, - "button": { - "delete": "Usuń", - "openRemote": "OtwĆ³rz profil zdalny", - "refresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten kanał?", - "content": { - "warning": "Kanał zostanie usunięty wraz z plikami, utworami i albumami. To działanie jest nieodwracalne." - } - } - }, - "label": { - "local": "Lokalne" - }, - "link": { - "localProfile": "OtwĆ³rz profil lokalny", - "django": "Zobacz w panelu administracyjnym Django" - }, "warning": { "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" } @@ -4104,53 +3278,1198 @@ "channels": "Kanały", "federation": "Federacja", "instanceInfo": "Informacje o instancji", - "settings": "Ustawienia instancji", "moderation": "Moderacja", "music": "Muzyka", "playlists": "Listy odtwarzania", "sections": "Sekcje", "security": "Bezpieczeństwo", + "settings": "Ustawienia instancji", "signups": "Rejestracje", "stats": "Statystyki", "subsonic": "Subsonic", "ui": "Interfejs użytkownika" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "albumData": "Dane albumu", + "audioContent": "Zawartość", + "local": "Lokalne" + }, + "link": { + "artist": "Wykonawca", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "OtwĆ³rz profil lokalny", + "musicbrainz": "OtwĆ³rz na MusicBrainz", + "remoteProfile": "OtwĆ³rz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten album będzie usunięty wraz z plikami, utworami, ulubionymi oraz historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten album?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "album": { + "description": "Opis", + "title": "Tytuł" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "ArtistDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "artistData": "Dane wykonawcy", + "audioContent": "Zawartość", + "local": "Lokalne" + }, + "link": { + "albums": "Albumy", + "category": "Kategoria", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "OtwĆ³rz profil lokalny", + "musicbrainz": "OtwĆ³rz na MusicBrainz", + "remoteProfile": "OtwĆ³rz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć tego wykonawcę?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "artist": { + "description": "Opis", + "name": "Nazwa" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "Base": { + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "edits": "Edycje", + "libraries": "Biblioteki", + "tags": "Tagi", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Zarządzaj biblioteką" + }, + "EditsList": { + "header": { + "edits": "Edycje biblioteki" + }, + "title": "Edycje" + }, + "LibraryDetail": { + "button": { + "delete": "Usuń" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "libraryData": "Dane biblioteki", + "local": "Lokalne" + }, + "link": { + "account": "Konto", + "albums": "Albumy", + "artists": "Artyści", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "remoteProfile": "OtwĆ³rz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki", + "visibility": "Widoczność" + }, + "modal": { + "delete": { + "content": { + "warning": "Biblioteka zostanie usunięta razem z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć tę bibliotekę?" + } + }, + "table": { + "activity": { + "firstSeen": "Widziany po raz pierwszy", + "followers": "Obserwatorzy" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + }, + "library": { + "description": "Opis", + "name": "Nazwa" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "TagDetail": { + "button": { + "delete": "Usuń" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "tagData": "Dane taga" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "django": "Zobacz w panelu administracyjnym Django", + "localProfile": "OtwĆ³rz profil lokalny", + "tracks": "Utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten tag?" + } + }, + "table": { + "activity": { + "firstSeen": "Widziany po raz pierwszy" + }, + "tag": { + "name": "Nazwa" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "local": "Lokalne", + "trackData": "Dane utworu" + }, + "link": { + "album": "Album", + "albumArtist": "Wykonawca albumu", + "artist": "Wykonawca", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "OtwĆ³rz profil lokalny", + "musicbrainz": "OtwĆ³rz na MusicBrainz", + "remoteProfile": "OtwĆ³rz profil zdalny", + "reports": "Powiązane zgłoszenia", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "UtwĆ³r zostanie usunięty wraz z powiązanymi plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten utwĆ³r?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "track": { + "copyright": "Prawa autorskie", + "description": "Opis", + "discNumber": "Numer płyty", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + }, + "trackData": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "UploadDetail": { + "button": { + "delete": "Usuń", + "download": "Pobierz" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "local": "Lokalne", + "uploadData": "Data przesłania" + }, + "link": { + "account": "Konto", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "importStatus": "Stan importu", + "library": "Biblioteka", + "remoteProfile": "OtwĆ³rz profil zdalny", + "type": "Rodzaj", + "visibility": "Widoczność" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten plik zostanie usunięty. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten przesłany plik?" + } + }, + "notApplicable": "Niedostępne", + "table": { + "activity": { + "accessedDate": "Data dostępu", + "firstSeen": "Widziany po raz pierwszy" + }, + "audioContent": { + "bitrate": { + "label": "Szybkość transmisji" + }, + "cachedSize": "Rozmiar w pamięci podręcznej", + "duration": "Czas trwania", + "size": "Rozmiar", + "track": "UtwĆ³r" + }, + "upload": { + "name": "Nazwa" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Dodaj politykę moderacji" + }, + "description": { + "policy": "Polityki moderacji pomagają kontrolować sposĆ³b interakcji instancji z daną domeną lub kontem." + }, + "header": { + "accountData": "Dane konta", + "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", + "activity": "Aktywność", + "audioContent": "Zawartość", + "localAccount": "Konto lokalne", + "noPolicy": "Nie masz żadnych reguł dla tego konta." + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "libraries": "Biblioteki", + "linkedReports": "Powiązane zgłoszenia", + "openProfile": "OtwĆ³rz profil", + "remoteProfile": "OtwĆ³rz profil zdalny", + "requests": "Aplikacje o rejestrację", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "notApplicable": "Niedostępne", + "option": { + "permission": { + "library": "Biblioteka", + "moderation": "Moderacja", + "settings": "Ustawienia" + } + }, + "table": { + "accountData": { + "displayName": "Wyświetlana nazwa", + "email": "Adres e-mail", + "lastActivity": "Ostatnia aktywność", + "lastChecked": "Ostatnio sprawdzano", + "loginStatus": { + "disabled": "Wyłączony", + "enabled": "Włączone", + "label": "Możliwość logowania" + }, + "permissions": "Uprawnienia", + "signupDate": "Data rejestracji", + "userType": "Rodzaj", + "username": "Nazwa użytkownika" + }, + "activity": { + "emittedFollows": "Wychodzące obserwacje bibliotek", + "emittedMessages": "Wychodzące wiadomości", + "firstSeen": "Widziany po raz pierwszy", + "receivedFollows": "Otrzymane obserwacje biblioteki" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "megabyte": "MB", + "totalSize": "Całkowity rozmiar", + "uploadQuota": "Limit przestrzeni" + } + }, + "tooltip": { + "uploadQuota": "Określ, jak dużo zawartości może przesłać użytkownik. Pozostaw puste, aby użyć domyślnej wartości instancji." + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "Base": { + "link": { + "accounts": "Konta", + "domains": "Domeny", + "reports": "Zgłoszenia", + "userRequests": "Aplikacje o rejestrację" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Moderacja" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Dodaj politykę moderacji", + "addToAllowList": "Dodaj do listy zezwoleń", + "refreshNodeInfo": "Odśwież informacje o węÅŗle", + "removeFromAllowList": "Usuń z listy zezwoleń" + }, + "description": { + "policy": "Polityki moderacji pomagają kontrolować sposĆ³b interakcji instancji z daną domeną lub kontem." + }, + "header": { + "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", + "activity": "Aktywność", + "audioContent": "Zawartość", + "instanceData": "Dane instancji", + "noPolicy": "Nie masz żadnych reguł dla tej domeny." + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "django": "Zobacz w panelu administracyjnym Django", + "knownAccounts": "Znane konta", + "libraries": "Biblioteki", + "tracks": "Utwory", + "uploads": "Przesłane pliki", + "website": "OtwĆ³rz stronę internetową" + }, + "notApplicable": "Niedostępne", + "table": { + "activity": { + "emittedFollows": "Wychodzące obserwacje bibliotek", + "emittedMessages": "Wychodzące wiadomości", + "firstSeen": "Widziany po raz pierwszy", + "receivedFollows": "Otrzymane obserwacje biblioteki" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + }, + "instanceData": { + "domainName": "Nazwa", + "inAllowList": { + "false": "Nie", + "label": "Jest obecny na liście zezwoleń", + "true": "Tak" + }, + "lastChecked": "Ostatnio sprawdzano", + "nodeInfoStatus": { + "label": "Stan", + "value": "Wystąpił błąd podczas pobierania informacji o węÅŗle" + }, + "software": { + "label": "Oprogramowanie" + }, + "totalUsers": "Wszyscy użytkownicy" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "DomainsList": { + "button": { + "add": "Dodaj" + }, + "header": { + "domains": "Domeny", + "failure": "Wystąpił błąd podczas tworzenia domeny" + }, + "label": { + "addDomain": "Dodaj domenę", + "addToAllowList": "Dodaj do listy zezwoleń" + }, + "title": "Domeny" + }, + "ReportsList": { + "header": { + "reports": "Zgłoszenia" + }, + "label": { + "search": "Szukaj", + "status": "Stan" + }, + "option": { + "status": { + "all": "Wszystkie", + "resolved": "Rozwiązane", + "unresolved": "Nierozstrzygnięte" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "placeholder": { + "search": "Szukaj za pomocą konta, podsumowania, domenyā€¦" + }, + "title": "Zgłoszenia" + }, + "RequestsList": { + "header": { + "userRequests": "Aplikacje o rejestrację" + }, + "label": { + "search": "Szukaj", + "status": "Stan" + }, + "option": { + "status": { + "all": "Wszystkie", + "approved": "Zatwierdzono", + "pending": "W toku", + "refused": "Odrzucone" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy użytkownikaā€¦" + }, + "title": "Aplikacje o rejestrację" + } + }, "users": { "Base": { "link": { "invitations": "Zaproszenia", "users": "Użytkownicy" }, - "title": "Zarządzaj użytkownikami", "menu": { "secondary": "Podmenu" + }, + "title": "Zarządzaj użytkownikami" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Logowanieā€¦" + } + }, + "EmailConfirm": { + "header": { + "failure": "Nie można potwierdzić twojego adresu e-mail", + "success": "Potwierdzono adres e-mail" + }, + "label": { + "confirmationCode": "Kod potwierdzenia" + }, + "link": { + "back": "WrĆ³Ä‡ do logowania", + "login": "PrzejdÅŗ do logowania" + }, + "message": { + "success": "TwĆ³j adres e-mail został potwierdzony, możesz teraz korzystać bez ograniczeń." + }, + "title": "PotwierdÅŗ swĆ³j adres e-mail" + }, + "Login": { + "header": { + "login": "Zaloguj się na swoje konto Funkwhale" + }, + "title": "Zaloguj się" + }, + "PasswordReset": { + "button": { + "requestReset": "Poproś o zresetowanie hasła" + }, + "header": { + "failure": "Wystąpił błąd podczas prĆ³by zresetowania hasła", + "reset": "Zresetuj hasło" + }, + "help": { + "form": "Użyj tego formularza, aby poprosić o zresetowanie hasła. Otrzymasz wiadomość z instrukcjami resetowania hasła na podany adres e-mail." + }, + "label": { + "email": "Adres e-mail" + }, + "link": { + "back": "WrĆ³Ä‡ do logowania" + }, + "placeholder": { + "email": "WprowadÅŗ adres e-mail powiązany z twoim kontem" + }, + "title": "Zresetuj hasło" + }, + "PasswordResetConfirm": { + "button": { + "update": "Aktualizuj swoje hasło" + }, + "header": { + "failure": "Wystąpił błąd podczas zmieniania Twojego hasła", + "success": "Pomyślnie zaktualizowano hasło" + }, + "label": { + "newPassword": "Nowe hasło" + }, + "link": { + "back": "WrĆ³Ä‡ do logowania", + "login": "PrzejdÅŗ do logowania" + }, + "message": { + "requestSent": "Jeżeli adres e-mail podany w poprzednim kroku jest prawidłowy i przypisany do konta użytkownika, powinieneś otrzymać wiadomość e-mail z instrukcjami resetowania hasła w przeciągu kilku minut.", + "success": "Twoje hasło zostało pomyślnie zmienione." + }, + "title": "Zmień swoje hasło" + }, + "Plugins": { + "title": "Zarządzaj rozszerzeniami" + }, + "ProfileActivity": { + "header": { + "playlists": "Listy odtwarzania", + "recentlyFavorited": "Ostatnio polubione", + "recentlyListened": "Ostatnio odsłuchane" + } + }, + "ProfileBase": { + "label": { + "self": "To Ty!" + }, + "link": { + "activity": "Aktywność", + "domainView": "Zobacz na { domain }", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym", + "overview": "Przegląd" + }, + "title": "Profil { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Anuluj", + "createChannel": "UtwĆ³rz kanał", + "next": "Następny krok", + "previous": "Poprzedni krok" + }, + "header": { + "channels": "Kanały", + "libraries": "Biblioteki", + "sharedLibraries": "Ten użytkownik udostępnił następujące biblioteki" + }, + "link": { + "addNew": "Dodaj" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Kanał wykonawcy" + }, + "header": "UtwĆ³rz kanał", + "podcast": { + "header": "Kanał podcastowy" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "UtwĆ³rz konto Funkwhale" + }, + "title": "Rejestracja" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń", + "delete": "Usuńā€¦", + "edit": "Edytujā€¦", + "embed": "OsadÅŗ", + "play": "Odtwarzaj", + "updateChannel": "Zapisz kanał", + "upload": "Prześlij pliki" + }, + "header": { + "artistChannel": "Kanał wykonawcy", + "podcastChannel": "Kanał podcastowy" + }, + "link": { + "channelEpisodes": "Wszystkie odcinki", + "channelOverview": "Przegląd", + "channelTracks": "Utwory", + "domainView": "Zobacz na { domain }", + "mirrored": "Odzwierciedlane z { domain }", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym" + }, + "meta": { + "episodes": "{ n } epizod | { n } epizody", + "listenings": "{ n } odsłuchanie | { n } odsłuchania", + "subscribers": "{ n } subskrybent | { n } subskrybentĆ³w", + "tracks": "{ n } utwĆ³r | { n } utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanał zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten kanał?" + }, + "embed": { + "header": "OsadÅŗ prace tego wykonawcy na swojej stronie internetowej" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Jeśli używasz Mastodona albo innych aplikacji Fediverse, to możesz zasubskrybować to konto:" + }, + "header": "Obserwuj na Fediverse" + }, + "funkwhale": { + "header": "Obserwuj na Funkwhale" + }, + "header": "Obserwuj ten kanał", + "rss": { + "content": { + "help": "Wklej następujący adres URL do swojej ulubionej aplikacji do podcastĆ³w:" + }, + "header": "Zasubskrybuj za pomocą RSS" + } + } + }, + "title": "Kanał" + }, + "DetailOverview": { + "header": { + "albums": "Albumy", + "latestEpisodes": "Najnowsze odcinki", + "latestTracks": "Najnowsze utwory", + "series": "Seriale", + "uploadsFailure": "Kilka przesłanych plikĆ³w nie mogło zostać opublikowane", + "uploadsProcessing": "Przesłane pliki są przetwarzane", + "uploadsSuccess": "Przesłane pliki zostały opublikowane pomyślnie" + }, + "link": { + "addAlbum": "Dodaj", + "erroredUploads": "Zobacz pliki, ktĆ³rych import zakończył się błędem", + "skippedUploads": "Zobacz pominięte pliki" + }, + "message": { + "processing": "Twoje przesłane pliki są przetwarzane przez Funkwhale i będą wkrĆ³tce dostępne." + }, + "meta": { + "progress": "Przetworzone pliki:" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Anuluj", + "subscribe": "Obserwuj" + }, + "link": { + "addNew": "Dodaj" + }, + "modal": { + "subscription": { + "header": "Subskrypcja" + } + }, + "placeholder": { + "search": "Filtruj po nazwieā€¦" + }, + "title": "Obserwowane kanały" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Biblioteki", + "tracks": "Utwory" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Dodaj zawartość" + }, + "Home": { + "button": { + "start": "Rozpocznij" + }, + "description": { + "channel": { + "1": "Jeżeli jesteś muzykiem lub tworzysz podcasty, kanały są stworzone dla Ciebie!", + "2": "Udostępnij twoje utwory publicznie i zdobądÅŗ obserwatorĆ³w na Funkwhale, Fediverse albo jakiejkolwiek aplikacji do podcastĆ³w." + }, + "follow": "Możesz zaobserwować biblioteki innych użytkownikĆ³w, aby uzyskać dostęp do nowej muzyki. Publiczne biblioteki mogą być zaobserwowane natychmiast, a do zaobserwowania prywatnej biblioteki będziesz potrzebował zgody jej właściciela.", + "upload": "Prześlij swoją osobistą muzykę do Funkwhale, aby czerpać z niej przyjemność w każdym miejscu oraz dzielić się nią z przyjaciĆ³Å‚mi i rodziną." + }, + "header": { + "channel": "Publikuj swoje prace na kanale", + "follow": "Obserwuj zdalne biblioteki", + "upload": "Prześlij do biblioteki treści innych wykonawcĆ³w" + }, + "help": { + "uploadQuota": "Ta instancja oferuje {quota} przestrzeni dla każdego użytkownika." + }, + "title": "Dodaj lub zarządzaj zawartością" + }, + "libraries": { + "Card": { + "button": { + "upload": "Prześlij pliki" + }, + "label": { + "size": "Łączny rozmiar wszystkich plikĆ³w w tej bibliotece" + }, + "link": { + "details": "SzczegĆ³Å‚y biblioteki" + }, + "meta": { + "tracks": "{ n } utwĆ³r | { n } utwory" + } + }, + "FilesTable": { + "action": { + "delete": "Usuń", + "restartImport": "Uruchom importowanie ponownie" + }, + "button": { + "showStatus": "Pokaż więcej informacji dotyczących procesu importowania tego utworu" + }, + "empty": { + "noTracks": "Nie dodano jeszcze żadnych utworĆ³w do tej biblioteki" + }, + "label": { + "importStatus": "Stan importu", + "search": "Szukaj" + }, + "notApplicable": "Niedostępne", + "option": { + "status": { + "all": "Wszystkie", + "draft": "Oczekujący", + "failed": "Zakończony błędem", + "finished": "Ukończono", + "pending": "W toku", + "skipped": "Pominięto" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wynikĆ³w { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą tytułu, wykonawcy, albumuā€¦" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "duration": "Czas trwania", + "importStatus": "Stan importu", + "size": "Rozmiar", + "title": "Tytuł", + "uploadDate": "Data przesłania" + } + } + } + }, + "Form": { + "button": { + "confirm": "Usuń bibliotekę", + "create": "UtwĆ³rz bibliotekę", + "delete": "Usuń", + "update": "Zapisz bibliotekę" + }, + "description": { + "library": "Biblioteki pomagają organizować i udostępniać kolekcje muzyki. Możesz przesłać własną kolekcję muzyki na Funkwhale i dzielić się nią z rodziną i znajomymi.", + "visibility": "Możesz udostępniać swoją bibliotekę innym, nie zważając na jej widoczność." + }, + "header": { + "failure": "Błąd" + }, + "label": { + "description": "Opis", + "name": "Nazwa", + "visibility": "Widoczność" + }, + "message": { + "libraryCreated": "Utworzono bibliotekę", + "libraryDeleted": "Usunięto bibliotekę", + "libraryUpdated": "Zaktualizowano bibliotekę" + }, + "modal": { + "delete": { + "content": { + "warning": "Biblioteka i wszystkie znajdujące się w niej utwory zostaną usunięte. To działanie jest nieodwracalne." + }, + "header": "Usunąć tę bibliotekę?" + } + }, + "placeholder": { + "description": "Ta biblioteka zawiera moją osobistą muzykę, mam nadzieję że Ci się spodoba.", + "name": "Moja wspaniała biblioteka" + } + }, + "Home": { + "empty": { + "noLibrary": "Wygląda na to, że nie masz jeszcze żadnej biblioteki ā€” może to już czas, żeby jakąś utworzyć?" + }, + "header": { + "libraries": "Moje biblioteki" + }, + "link": { + "createLibrary": "UtwĆ³rz nową bibliotekę" + }, + "loading": { + "libraries": "Ładowanie bibliotekā€¦" + } + }, + "Quota": { + "button": { + "purge": "Wyczyść" + }, + "header": { + "currentUsage": "Obecne użycie" + }, + "label": { + "currentUsage": "Wykorzystano { current } z przydzielonego { max }", + "errored": "Pliki zakończone błędem", + "pending": "Pliki w trakcie przetwarzania", + "skipped": "Pominięte pliki" + }, + "link": { + "viewFiles": "Zobacz pliki" + }, + "loading": { + "currentUsage": "Ładowanie danych o użyciuā€¦" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Ta opcja usunie utwory ktĆ³re zostały przesłane, ale wystąpił błąd podczas ich importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pliki zakończone błędami?" + }, + "purgePending": { + "content": { + "description": "Ta opcja usunie utwory ktĆ³re zostały przesłane, ale nie zostały jeszcze przetworzone, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pliki w toku?" + }, + "purgeSkipped": { + "content": { + "description": "Ta opcja usunie utwory ktĆ³re zostały przesłane, lecz pominięte w procesie importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pominięte pliki?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cofnij prośbę o obserwowanie", + "follow": "Obserwuj", + "pending": "Obserwowanie oczekuje na zatwierdzenie", + "unfollow": "Przestań obserwować" + }, + "label": { + "scanFailure": "Problem podczas skanowania", + "scanPartialSuccess": "Przeskanowano z błędami", + "scanPending": "Skanowanie w toku", + "scanProgress": "Skanowanieā€¦ ({ progress }%)", + "scanSuccess": "Przeskanowano", + "sharingLink": "Odnośnik do udostępnienia" + }, + "link": { + "scan": "Skanuj teraz", + "scanDetails": "SzczegĆ³Å‚y" + }, + "message": { + "scanLaunched": "Uruchomiono skanowanie", + "scanSkipped": "Skanowanie pominięte (poprzednie skanowanie odbyło się zbyt niedawno)" + }, + "meta": { + "failedTracks": "Utwory zakończone błędem:", + "lastUpdate": "Ostatnia aktualizacja:", + "tracks": "{ n } utwĆ³r | { n } utwory" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Gdy przestaniesz obserwować tę bibliotekę, stracisz dostęp do jej zawartości." + }, + "header": "Czy chcesz przestać obserwować tę bibliotekę?" + } + }, + "tooltip": { + "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", + "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" + } + }, + "Home": { + "button": { + "refresh": "Odśwież" + }, + "description": { + "remoteLibraries": "Zdalne biblioteki należą do użytkownikĆ³w innych instancji. Możesz uzyskać do nich dostęp jeżeli został Ci on przyznany lub jeżeli są publiczne." + }, + "header": { + "knownLibraries": "Znane biblioteki", + "remoteLibraries": "Zdalne biblioteki" + }, + "loading": { + "remoteLibraries": "Ładowanie zdalnych bibliotekā€¦" + } + }, + "ScanForm": { + "button": { + "submit": "ZatwierdÅŗ wyszukiwanie" + }, + "header": { + "failure": "Wystąpił błąd podczas pobierania zdalnej biblioteki" + }, + "label": { + "search": "Wyszukaj w zdalnej bibliotece" + }, + "placeholder": { + "url": "WprowadÅŗ adres URL biblioteki" } } } }, - "Search": { - "label": { - "albums": "Albumy", - "artists": "Artyści", - "playlists": "Listy odtwarzania", - "podcasts": "Podcasty", - "radios": "Stacje radiowe", - "series": "Seriale", - "tags": "Tagi", - "tracks": "Utwory" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } }, - "header": { - "search": "Szukaj", - "remote": "Wyszukaj zdalnego obiektu", - "rss": "Zasubskrybuj kanał RSS podcastu" + "DetailOverview": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } }, - "button": { - "submit": "ZatwierdÅŗ wyszukiwanie" + "DetailTracks": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } + }, + "Edit": { + "button": { + "accept": "Zaakceptuj", + "reject": "Odrzuć" + }, + "empty": { + "noFollowers": "Nikt nie obserwuje tej biblioteki" + }, + "header": { + "followers": "Obserwatorzy", + "libraryContents": "Zawartość biblioteki" + }, + "loading": { + "followers": "Ładowanie obserwującychā€¦" + }, + "table": { + "action": { + "header": { + "action": "Działanie", + "date": "Data", + "status": "Stan", + "user": "Użytkownik" + }, + "status": { + "accepted": "Zaakceptowano", + "pending": "Oczekuje na przyjęcie", + "rejected": "Odrzucono" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Edytuj", + "upload": "Prześlij pliki" + }, + "description": { + "sharingLink": "Podziel się tym odnośnikiem z innymi użytkownikami, aby mogli poprosić o dostęp do Twojej biblioteki poprzez wklejenie go w pole wyszukiwania." + }, + "label": { + "instance": "Ograniczona", + "private": "Prywatne", + "public": "Publiczne", + "sharingLink": "Odnośnik do udostępnienia" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "domain": "Zobacz na { domain }", + "moderation": "OtwĆ³rz w interfejsie moderacyjnym", + "owner": "Należy do { username }", + "tracks": "Utwory" + }, + "meta": { + "tracks": "{ n } utwĆ³r | { n } utwory" + }, + "title": "Biblioteka", + "tooltip": { + "instance": "Dostęp do tej biblioteki jest ograniczony tylko do użytkownikĆ³w tej instancji", + "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", + "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń listę odtwarzania", + "delete": "Usuń", + "edit": "Edytuj", + "embed": "OsadÅŗ", + "playAll": "Odtwarzaj wszystkie", + "stopEdit": "Przestań edytować" + }, + "empty": { + "noTracks": "Nie ma jeszcze utworĆ³w na tej liście odtwarzania" + }, + "header": { + "tracks": "Utwory" + }, + "meta": { + "tracks": "Lista odtwarzania stworzona przez { username } zawierająca { n } utwĆ³r | Lista odtwarzania stworzona przez { username } zawierająca { n } utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Spowoduje to bezpowrotne usunięcie listy odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Czy chcesz usunąć listę odtwarzania ā€ž{ playlist }ā€?" + }, + "embed": { + "header": "OsadÅŗ tę listę odtwarzania na swojej stronie internetowej" + } + }, + "title": "Lista odtwarzania" + }, "List": { + "button": { + "create": "UtwĆ³rz listę odtwarzania", + "manage": "Zarządzaj swoimi listami odtwarzania", + "search": "Szukaj" + }, + "empty": { + "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj listy odtwarzania", + "playlists": "Listy odtwarzania" + }, + "label": { + "search": "Szukaj" + }, "ordering": { "direction": { "ascending": "Rosnąco", @@ -4159,58 +4478,11 @@ }, "label": "Porządkowanie" }, - "header": { - "browse": "Przeglądaj listy odtwarzania", - "playlists": "Listy odtwarzania" - }, - "button": { - "create": "UtwĆ³rz listę odtwarzania", - "manage": "Zarządzaj swoimi listami odtwarzania", - "search": "Szukaj" - }, - "placeholder": { - "search": "WprowadÅŗ nazwę listy odtwarzaniaā€¦" - }, - "empty": { - "noResults": "Nie znaleziono wynikĆ³w pasujących do Twojego zapytania" - }, "pagination": { "results": "Wyniki na stronie" }, - "label": { - "search": "Szukaj" - } - }, - "Detail": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń", - "confirm": "Usuń listę odtwarzania", - "edit": "Edytuj", - "embed": "OsadÅŗ", - "playAll": "Odtwarzaj wszystkie", - "stopEdit": "Przestań edytować" - }, - "modal": { - "delete": { - "header": "Czy chcesz usunąć listę odtwarzania ā€ž{ playlist }ā€?", - "content": { - "warning": "Spowoduje to bezpowrotne usunięcie listy odtwarzania. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "OsadÅŗ tę listę odtwarzania na swojej stronie internetowej" - } - }, - "title": "Lista odtwarzania", - "meta": { - "tracks": "Lista odtwarzania stworzona przez { username } zawierająca { n } utwĆ³r | Lista odtwarzania stworzona przez { username } zawierająca { n } utwory" - }, - "empty": { - "noTracks": "Nie ma jeszcze utworĆ³w na tej liście odtwarzania" - }, - "header": { - "tracks": "Utwory" + "placeholder": { + "search": "WprowadÅŗ nazwę listy odtwarzaniaā€¦" } } }, @@ -4220,287 +4492,22 @@ "confirm": "Usuń stację radiową", "edit": "Edytujā€¦" }, - "modal": { - "delete": { - "header": "Czy chcesz usunąć stację radiową ā€ž{ radio }ā€?", - "content": { - "warning": "Spowoduje to bezpowrotne usunięcie stacji radiowej. To działanie jest nieodwracalne." - } - } - }, "empty": { "noTracks": "Nie dodano jeszcze żadnych utworĆ³w do tej stacji radiowej" }, - "title": "Stacja radiowa", "header": { "tracks": "Utwory" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Dodano { n } utwĆ³r do kolejki | Dodano { n } utwory do kolejki" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Dostęp do plikĆ³w audio, bibliotek, wykonawcĆ³w, albumĆ³w i utworĆ³w", - "label": "Biblioteki i przesłane pliki" - }, - "filters": { - "description": "Dostęp do filtrĆ³w treści", - "label": "Filtry treści" - }, - "profile": { - "description": "Dostęp do adresu e-mail, nazwy użytkownika i informacji o profilu", - "label": "Profil" - }, - "edits": { - "description": "Dostęp do edycji", - "label": "Edycje" - }, - "follows": { - "description": "Dostęp do obserwowanych", - "label": "Obserwacje" - }, - "listenings": { - "description": "Dostęp do historii odtwarzania", - "label": "Odsłuchania" - }, - "reports": { - "description": "Dostęp do zgłoszeń moderacyjnych", - "label": "Zgłoszenia" - }, - "notifications": { - "description": "Dostęp do powiadomień", - "label": "Powiadomienia" - }, - "playlists": { - "description": "Dostęp do list odtwarzania", - "label": "Listy odtwarzania" - }, - "radios": { - "description": "Dostęp do stacji radiowych", - "label": "Stacje radiowe" - }, - "security": { - "description": "Dostęp do ustawień związanych z bezpieczeństwem np. haseł i autoryzacji", - "label": "Bezpieczeństwo" - }, - "favorites": { - "label": "Ulubione" - } }, - "filters": { - "accessedDate": "Data dostępu", - "albumTitle": "Nazwa albumu", - "artistName": "Nazwa wykonawcy", - "bitrate": "Szybkość transmisji", - "creationDate": "Data utworzenia", - "domain": "Domena", - "duration": "Czas trwania", - "expirationDate": "Data wygaśnięcia", - "firstSeen": "Data widzenia po raz pierwszy", - "followers": "Obserwatorzy", - "itemsCount": "Elementy", - "lastActivity": "Ostatnia aktywność", - "lastSeen": "Data ostatniej aktywności", - "modificationDate": "Data modyfikacji", - "name": "Nazwa", - "receivedMessages": "Otrzymane wiadomości", - "releaseDate": "Data wydania", - "dateJoined": "Data rejestracji", - "size": "Rozmiar", - "trackTitle": "Tytuł utworu", - "uploads": "Przesłane pliki", - "username": "Nazwa użytkownika", - "users": "Użytkownicy" - }, - "fields": { - "privacyLevel": { - "label": "Widoczność aktywności", - "help": "Ustal poziom widoczności twojej aktywności", - "shortChoices": { - "public": "Każdy", - "instance": "Instancja", - "private": "Prywatne" + "modal": { + "delete": { + "content": { + "warning": "Spowoduje to bezpowrotne usunięcie stacji radiowej. To działanie jest nieodwracalne." }, - "choices": { - "instance": "Każdy na tej instancji", - "public": "Każdy na dowolnej instancji", - "private": "Nikt poza mną" - } - }, - "summary": { - "label": "O mnie" - }, - "reportType": { - "label": "Kategoria", - "choices": { - "illegalContent": "Nielegalne treści", - "invalidMetadata": "Nieprawidłowe metadane", - "offensiveContent": "ObraÅŗliwe treści", - "other": "lnna", - "takedownRequest": "Prośba o usunięcie" - } - }, - "importStatus": { - "label": "Kliknij, aby zobaczyć więcej informacji dotyczących procesu importowania tego pliku", - "choices": { - "draft": { - "label": "Oczekujący", - "help": "Ten utwĆ³r został przesłany, ale nie został jeszcze wyznaczony do przetwarzania" - }, - "errored": { - "label": "Zakończono błędem", - "help": "Wystąpił błąd podczas przetwarzania tego utworu, upewnij się że posiada on poprawne metadane" - }, - "finished": { - "label": "Ukończono", - "help": "Zaimportowano" - }, - "pending": { - "label": "W toku", - "help": "Ten utwĆ³r został przesłany, ale nie został jeszcze przetworzony przez serwer" - }, - "skipped": { - "label": "Pominięto", - "help": "Ten utwĆ³r jest już w jednej z bibliotek" - } - } - }, - "contentCategory": { - "label": "Kategoria treści", - "choices": { - "music": "Muzyka", - "other": "lnne", - "podcast": "Podcast" - } + "header": "Czy chcesz usunąć stację radiową ā€ž{ radio }ā€?" } - } + }, + "title": "Stacja radiowa" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Konto" - }, - "album": { - "typeLabel": "Album", - "label": "Zgłoś ten albumā€¦" - }, - "artist": { - "typeLabel": "Wykonawca", - "label": "Zgłoś tego wykonawcęā€¦" - }, - "channel": { - "typeLabel": "Kanał", - "label": "Zgłoś ten kanałā€¦" - }, - "library": { - "typeLabel": "Biblioteka", - "label": "Zgłoś tę bibliotekęā€¦" - }, - "playlist": { - "typeLabel": "Lista odtwarzania", - "label": "Zgłoś tę listę odtwarzaniaā€¦" - }, - "track": { - "label": "Zgłoś ten utwĆ³rā€¦", - "typeLabel": "UtwĆ³r" - } - }, - "useReportConfigs": { - "account": { - "label": "Konto", - "summary": "O mnie" - }, - "album": { - "label": "Album", - "releaseDate": "Data wydania", - "title": "Tytuł" - }, - "artist": { - "label": "Wykonawca" - }, - "channel": { - "label": "Kanał" - }, - "track": { - "copyright": "Prawa autorskie", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł", - "label": "UtwĆ³r" - }, - "creationDate": { - "label": "Data utworzenia" - }, - "library": { - "description": "Opis", - "label": "Biblioteka" - }, - "musicbrainzId": { - "label": "Identyfikator MusicBrainz" - }, - "name": { - "label": "Nazwa" - }, - "playlist": { - "label": "Lista odtwarzania" - }, - "tags": { - "label": "Tagi" - }, - "visibility": { - "label": "Widoczność" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Prawa autorskie", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł" - }, - "cover": { - "label": "Okładka" - }, - "description": { - "label": "Opis" - }, - "artist": { - "name": "Nazwa" - }, - "album": { - "releaseDate": "Data wydania", - "title": "Tytuł" - }, - "tags": { - "label": "Tagi" - } - } - }, - "useThemeList": { - "darkTheme": "Ciemny", - "lightTheme": "Jasny" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Dostępna jest nowa wersja aplikacji.", - "actions": { - "later": "PĆ³Å¼niej", - "update": "Aktualizuj" - } - }, - "axios": { - "rateLimitDelay": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, sprĆ³buj ponownie za { delay }", - "rateLimitLater": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, sprĆ³buj ponownie pĆ³Åŗniej" } } } From b00daa189d08eacb8caf4288ef294d082b5f818c Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 09:20:29 +0000 Subject: [PATCH 208/371] Translated using Weblate (Chinese (Simplified)) Currently translated at 95.8% (2091 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/zh_Hans/ --- front/src/locales/zh_Hans.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/front/src/locales/zh_Hans.json b/front/src/locales/zh_Hans.json index 05f53ab02..16604ba75 100644 --- a/front/src/locales/zh_Hans.json +++ b/front/src/locales/zh_Hans.json @@ -1,6 +1,6 @@ { "App": { - "loading": "åŠ č½½äø­..." + "loading": "åŠ č½½äø­ā€¦" }, "components": { "About": { @@ -109,6 +109,9 @@ "statistics": "ē»Ÿč®”", "welcome": "ę¬¢čæŽę„到 { podName }ļ¼" }, + "help": { + "registrationsClosed": "ęœ¬å®žä¾‹å·²å…³é—­ę³Øå†Œć€‚ę‚ØåÆ仄ä½æē”Ø仄äø‹é“¾ęŽ„åœØ其他实例ę³Øå†Œć€‚" + }, "link": { "findOtherPod": "ęŸ„ēœ‹å…¶ä»–实例", "funkwhale": "č®æ问 funkwhale.audio", @@ -157,6 +160,7 @@ }, "header": { "failure": "ę­¤ę­Œę›²ę— ę³•åŠ č½½", + "noSources": "čƄ音č½Øę²”ęœ‰åÆē”Ø音ęŗć€‚", "radio": "ę‚Ø꜉äø€äøŖē”µå°ę­£åœØę’­ę”¾" }, "label": { @@ -168,10 +172,13 @@ "next": "äø‹äø€é¦–", "pause": "ęš‚åœ", "play": "ę’­ę”¾", + "populatingRadio": "čæ·äŗŗēš„å¹æę’­ę›²ē›®ā€¦", "previous": "äøŠäø€é¦–", "queue": "ę’­ę”¾é˜Ÿåˆ—", "remove": "删除", - "restart": "从夓开始" + "restart": "从夓开始", + "selectTrack": "选ꋩč½Ø道", + "showCoverArt": "节ē›®å°é¢č®¾č®”" }, "message": { "automaticPlay": "äø‹äø€é¦–ę­Œę›²å°†åœØ几ē§’钟后č‡ŖåŠØę’­ę”¾ā€¦", From da010704557667c5438e5068ceeec7066f0163d3 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 8 Dec 2023 13:46:32 +0000 Subject: [PATCH 209/371] fix(nginx): Do not cache all requests for a day in the reverse proxy Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2673> --- changes/changelog.d/2258.bugfix | 1 + deploy/docker.proxy.template | 1 - templates/nginx.conf.j2 | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/2258.bugfix diff --git a/changes/changelog.d/2258.bugfix b/changes/changelog.d/2258.bugfix new file mode 100644 index 000000000..43c899612 --- /dev/null +++ b/changes/changelog.d/2258.bugfix @@ -0,0 +1 @@ +Do not cache all requests to avoid missing updates #2258 diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index 1d470b1b9..ff9d5e4fe 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -78,7 +78,6 @@ server { # end of compression settings location / { - expires 1d; include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://fw; } diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 index 6dca6c1f4..503d7abcb 100644 --- a/templates/nginx.conf.j2 +++ b/templates/nginx.conf.j2 @@ -159,7 +159,9 @@ server { {% endif %} location / { +{% if not config.reverse_proxy %} expires 1d; +{% endif %} include /etc/nginx/funkwhale_proxy.conf; {% if config.proxy_frontend and not config.reverse_proxy %} proxy_pass http://funkwhale-front; From 09facc553d32f844aaf6352f759b9cd686a0b05e Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 11 Dec 2023 13:11:56 +0000 Subject: [PATCH 210/371] Translated using Weblate (French) Currently translated at 100.0% (4 of 4 strings) Translation: Documentation/user-reports-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-reports-index/fr/ --- .../fr/LC_MESSAGES/user/reports/index.po | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/reports/index.po b/docs/locales/fr/LC_MESSAGES/user/reports/index.po index d74591206..1a2d16de7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/reports/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/reports/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-11 21:34+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-reports-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/reports/index.md:9 msgid "Submit reports" -msgstr "" +msgstr "Envoyer des rapports" #: ../../user_documentation/reports/index.md:1 msgid "Reporting" -msgstr "" +msgstr "Rapports" #: ../../user_documentation/reports/index.md:4 msgid "" @@ -32,6 +35,11 @@ msgid "" "send reports. If you cannot send reports anonymously, contact the pod " "admin." msgstr "" +"Les administrateurĀ·ices et modĆ©rateurĀ·ices de {term}`Pod <Pod>` sont " +"responsables de la gestion des rapports. Les administrateurĀ·ices peuvent " +"choisir dā€™autoriser les utilisateurs anonymes (dĆ©connectĆ©s) dā€™envoyer des " +"rapports. Si vous ne pouvez pas envoyer de rapports de maniĆØre anonyme, " +"contactez votre administrateur de pod." #: ../../user_documentation/reports/index.md:7 msgid "" @@ -40,4 +48,7 @@ msgid "" "stolen content. Check out the guides in this section to see how to send a" " report." msgstr "" - +"Funkwhale fournit des outils pour rapporter tout le contenu et les comptes. " +"Vous pouvez rapporter le contenu pour ĆŖtre rĆ©prĆ©hensible et illĆ©gal. Vous " +"pouvez aussi rapporter du contenu volĆ©. Consultez les guides dans cette " +"section pour voir comment envoyer un rapport." From da71fb640d3145749ef85547e385b80de1040dd9 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 11 Dec 2023 13:14:54 +0000 Subject: [PATCH 211/371] Translated using Weblate (French) Currently translated at 22.2% (2 of 9 strings) Translation: Documentation/user-radios-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-radios-index/fr/ --- docs/locales/fr/LC_MESSAGES/user/radios/index.po | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/index.po b/docs/locales/fr/LC_MESSAGES/user/radios/index.po index 89f766018..ba802a916 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-11 21:34+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/radios/index.md:13 msgid "Manage your radios" -msgstr "" +msgstr "GĆ©rer vos radios" #: ../../user_documentation/radios/index.md:1 msgid "Radios" -msgstr "" +msgstr "Radios" #: ../../user_documentation/radios/index.md:3 msgid "" @@ -66,4 +69,3 @@ msgid "" "**Less listened** ā€“ check out tracks you've not heard, or things you " "haven't given as much attention." msgstr "" - From 59687b2f325a2e7410932db2ba2b9c36340ebf31 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 12 Dec 2023 13:26:16 +0100 Subject: [PATCH 212/371] Version bump and changelog for 1.4.0 --- CHANGELOG.md | 96 ++++++++++++++++--- api/pyproject.toml | 2 +- changes/changelog.d/1288.feature | 3 - changes/changelog.d/1538.enhancement | 1 - changes/changelog.d/1803.bugfix | 1 - changes/changelog.d/1861.feature | 1 - changes/changelog.d/1939.bugfix | 1 - changes/changelog.d/2067.misc | 1 - changes/changelog.d/2083.feature | 1 - changes/changelog.d/2085.feature | 1 - changes/changelog.d/2102.bugfix | 1 - changes/changelog.d/2104.enhancement | 1 - changes/changelog.d/2123.feature | 1 - changes/changelog.d/2135.feature | 1 - changes/changelog.d/2156.feature | 2 - changes/changelog.d/2159.bugfix | 1 - changes/changelog.d/2163.bugfix | 1 - changes/changelog.d/2193.enhancement | 1 - changes/changelog.d/2196.bugfix | 1 - changes/changelog.d/2208.bugfix | 1 - changes/changelog.d/2215.enhancement | 1 - changes/changelog.d/2231.bugfix | 1 - changes/changelog.d/2235.bugfix | 1 - changes/changelog.d/2248.bugfix | 1 - changes/changelog.d/2252.bugfix | 1 - changes/changelog.d/2256.bugfix | 1 - changes/changelog.d/2258.bugfix | 1 - .../add-build-metadata-script.misc | 1 - .../api-replace-pytz-zoneinfo.enhancement | 1 - changes/changelog.d/archive-changelog.doc | 1 - changes/changelog.d/atom10.feature | 1 - changes/changelog.d/ci-fix-deploy-docs.misc | 1 - .../ci-fix-workflow-branch-regex.misc | 1 - changes/changelog.d/ci-rework.misc | 1 - .../ci-speedup-linting.enhancement | 1 - .../ci-use-buildx-bake-in-docker-job.misc | 1 - changes/changelog.d/coc-nodeinfo.doc | 1 - changes/changelog.d/collections.doc | 1 - changes/changelog.d/copybutton.bugfix | 1 - changes/changelog.d/cypress.feature | 1 - changes/changelog.d/debian10.removal | 2 - ...scriptive-service-worker-error.enhancement | 1 - changes/changelog.d/develop-patch-96a1.bugfix | 1 - changes/changelog.d/development-docs.bugfix | 1 - changes/changelog.d/drop-python3.7.removal | 1 - changes/changelog.d/embed-regex.bugfix | 1 - changes/changelog.d/follow.doc | 1 - .../changelog.d/format-api-dockerfile.misc | 1 - .../front-split-large-bundles.enhancement | 1 - .../funkwhale-manage_scripts.bugfix | 1 - .../get-api-version-from-package.enhancement | 1 - changes/changelog.d/has_mbid.doc | 1 - .../changelog.d/lint-api-using-pylint.misc | 1 - ...ntain-api-version-using-poetry.enhancement | 1 - .../maloja-extend-submission.enhancement | 1 - .../changelog.d/meta-tags-embed-player.bugfix | 1 - .../changelog.d/moderation-languages.feature | 1 - changes/changelog.d/multi-artist.doc | 1 - changes/changelog.d/multiarch.bugfix | 1 - changes/changelog.d/nginxtemplates.feature | 1 - changes/changelog.d/nodeinfo-usage.doc | 1 - changes/changelog.d/nodeinfo.doc | 1 - changes/changelog.d/nodeinfo2-update.doc | 1 - .../plugins-boolean-field.enhancement | 1 - changes/changelog.d/python-312.feature | 1 - changes/changelog.d/renovate-python.misc | 1 - .../replace-docs-scripts-with-makefile.misc | 1 - changes/changelog.d/server-location.feature | 1 - changes/changelog.d/ui-lib.feature | 1 - changes/changelog.d/ujson.bugfix | 1 - changes/changelog.d/websocket.bugfix | 1 - 71 files changed, 82 insertions(+), 89 deletions(-) delete mode 100644 changes/changelog.d/1288.feature delete mode 100644 changes/changelog.d/1538.enhancement delete mode 100644 changes/changelog.d/1803.bugfix delete mode 100644 changes/changelog.d/1861.feature delete mode 100644 changes/changelog.d/1939.bugfix delete mode 100644 changes/changelog.d/2067.misc delete mode 100644 changes/changelog.d/2083.feature delete mode 100644 changes/changelog.d/2085.feature delete mode 100644 changes/changelog.d/2102.bugfix delete mode 100644 changes/changelog.d/2104.enhancement delete mode 100644 changes/changelog.d/2123.feature delete mode 100644 changes/changelog.d/2135.feature delete mode 100644 changes/changelog.d/2156.feature delete mode 100644 changes/changelog.d/2159.bugfix delete mode 100644 changes/changelog.d/2163.bugfix delete mode 100644 changes/changelog.d/2193.enhancement delete mode 100644 changes/changelog.d/2196.bugfix delete mode 100644 changes/changelog.d/2208.bugfix delete mode 100644 changes/changelog.d/2215.enhancement delete mode 100644 changes/changelog.d/2231.bugfix delete mode 100644 changes/changelog.d/2235.bugfix delete mode 100644 changes/changelog.d/2248.bugfix delete mode 100644 changes/changelog.d/2252.bugfix delete mode 100644 changes/changelog.d/2256.bugfix delete mode 100644 changes/changelog.d/2258.bugfix delete mode 100644 changes/changelog.d/add-build-metadata-script.misc delete mode 100644 changes/changelog.d/api-replace-pytz-zoneinfo.enhancement delete mode 100644 changes/changelog.d/archive-changelog.doc delete mode 100644 changes/changelog.d/atom10.feature delete mode 100644 changes/changelog.d/ci-fix-deploy-docs.misc delete mode 100644 changes/changelog.d/ci-fix-workflow-branch-regex.misc delete mode 100644 changes/changelog.d/ci-rework.misc delete mode 100644 changes/changelog.d/ci-speedup-linting.enhancement delete mode 100644 changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc delete mode 100644 changes/changelog.d/coc-nodeinfo.doc delete mode 100644 changes/changelog.d/collections.doc delete mode 100644 changes/changelog.d/copybutton.bugfix delete mode 100644 changes/changelog.d/cypress.feature delete mode 100644 changes/changelog.d/debian10.removal delete mode 100644 changes/changelog.d/descriptive-service-worker-error.enhancement delete mode 100644 changes/changelog.d/develop-patch-96a1.bugfix delete mode 100644 changes/changelog.d/development-docs.bugfix delete mode 100644 changes/changelog.d/drop-python3.7.removal delete mode 100644 changes/changelog.d/embed-regex.bugfix delete mode 100644 changes/changelog.d/follow.doc delete mode 100644 changes/changelog.d/format-api-dockerfile.misc delete mode 100644 changes/changelog.d/front-split-large-bundles.enhancement delete mode 100644 changes/changelog.d/funkwhale-manage_scripts.bugfix delete mode 100644 changes/changelog.d/get-api-version-from-package.enhancement delete mode 100644 changes/changelog.d/has_mbid.doc delete mode 100644 changes/changelog.d/lint-api-using-pylint.misc delete mode 100644 changes/changelog.d/maintain-api-version-using-poetry.enhancement delete mode 100644 changes/changelog.d/maloja-extend-submission.enhancement delete mode 100644 changes/changelog.d/meta-tags-embed-player.bugfix delete mode 100644 changes/changelog.d/moderation-languages.feature delete mode 100644 changes/changelog.d/multi-artist.doc delete mode 100644 changes/changelog.d/multiarch.bugfix delete mode 100644 changes/changelog.d/nginxtemplates.feature delete mode 100644 changes/changelog.d/nodeinfo-usage.doc delete mode 100644 changes/changelog.d/nodeinfo.doc delete mode 100644 changes/changelog.d/nodeinfo2-update.doc delete mode 100644 changes/changelog.d/plugins-boolean-field.enhancement delete mode 100644 changes/changelog.d/python-312.feature delete mode 100644 changes/changelog.d/renovate-python.misc delete mode 100644 changes/changelog.d/replace-docs-scripts-with-makefile.misc delete mode 100644 changes/changelog.d/server-location.feature delete mode 100644 changes/changelog.d/ui-lib.feature delete mode 100644 changes/changelog.d/ujson.bugfix delete mode 100644 changes/changelog.d/websocket.bugfix diff --git a/CHANGELOG.md b/CHANGELOG.md index 4542edff5..530210158 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,23 +9,13 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog. <!-- towncrier --> -## 1.4.0-rc2 (2023-11-30) - -Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Changes since 1.4.0-rc1: - -Bugfixes: - -- Fix broken nginx templates for docker setup (#2252) -- Fix docker builds in CI by using correct flag to disable cache - -## 1.4.0-rc1 (2023-11-28) +## 1.4.0 (2023-12-12) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html Features: +- Add a management command to generate dummy notifications for testing - Add atom1.0 to node info services (#2085) - Add basic cypress testing - Add NodeInfo 2.1 (#2085) @@ -36,14 +26,14 @@ Features: - Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135) - Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861) - Generate all nginx configurations from one template -- New management command to update Uploads which have been imported using --in-place and are now stored in s3 (#2156) -- Add option to only allow MusicBrainz tagged file on a pod (#2083) +- New management command to update Uploads which have been imported using --in-place and are now + stored in s3 (#2156) +- Only allow MusicBrainz tagged file on a pod (#2083) - Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288) Enhancements: -- Add a management command to generate dummy notifications for testing - Add custom logging functionality (#2155) - Adding typesense container and api client (2104) - Cache pip package in api docker builds (#2193) @@ -61,9 +51,12 @@ Bugfixes: - `postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command. - Avoid troi radio to give duplicates (#2231) +- Do not cache all requests to avoid missing updates #2258 +- Fix broken nginx templates for docker setup (#2252) - Fix help messages for running scripts using funkwhale-manage - Fix missing og meta tags (#2208) - Fix multiarch docker builds #2211 +- Fix regression that prevent static files from being served in non-docker-deployments (#2256) - Fixed an issue where the copy button didn't copy the Embed code in the embed modal. - Fixed an issue with the nginx templates that caused issues when connecting to websockets. - Fixed development docker setup (2102) @@ -107,6 +100,79 @@ Other: Removal: - Drop support for python3.7 +- This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend + updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended. + +Contributors to our Issues: + +- AMoonRabbit +- Alexandra Parker +- ChengChung +- CiarĆ”n Ainsworth +- Georg Krause +- Ghost User +- Johann Queuniet +- JuniorJPDJ +- Kasper Seweryn +- Kay Borowski +- Marcos PeƱa +- Mathieu Jourdan +- Nicolas Derive +- Virgile Robles +- jooola +- petitminion +- theit8514 + +Contributors to our Merge Requests: + +- AMoonRabbit +- Alexander Dunkel +- Alexander Torre +- CiarĆ”n Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Kay Borowski +- Marcos PeƱa +- Mathieu Jourdan +- Philipp Wolfer +- Virgile Robles +- interfect +- jooola +- petitminion + +Committers: + +- Aitor +- Alexander Dunkel +- alextprog +- Aznƶrth Niryn +- CiarĆ”n Ainsworth +- dignny +- drakonicguy +- Fun.k.whale Trad +- Georg krause +- Georg Krause +- JĆ©rĆ©mie Lorente +- jo +- jooola +- josĆ© m +- Julian-Samuel GebĆ¼hr +- JuniorJPDJ +- Kasper Seweryn +- Marcos PeƱa +- Mathieu Jourdan +- Matteo Piovanelli +- MatyĆ”Å” Caras +- MhP +- omarmaciasmolina +- petitminion +- Philipp Wolfer +- ppom +- Quentin PAGƈS +- rinenweb +- Thomas +- Transcriber allium ## 1.3.4 (2023-11-16) diff --git a/api/pyproject.toml b/api/pyproject.toml index 334579703..4bbe45018 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "funkwhale-api" -version = "1.4.0-rc2" +version = "1.4.0" description = "Funkwhale API" authors = ["Funkwhale Collective"] diff --git a/changes/changelog.d/1288.feature b/changes/changelog.d/1288.feature deleted file mode 100644 index d4deefedc..000000000 --- a/changes/changelog.d/1288.feature +++ /dev/null @@ -1,3 +0,0 @@ - -Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI -entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288) diff --git a/changes/changelog.d/1538.enhancement b/changes/changelog.d/1538.enhancement deleted file mode 100644 index 9d990b069..000000000 --- a/changes/changelog.d/1538.enhancement +++ /dev/null @@ -1 +0,0 @@ -Connect loglevel and debug mode (#1538) diff --git a/changes/changelog.d/1803.bugfix b/changes/changelog.d/1803.bugfix deleted file mode 100644 index db04a4fb9..000000000 --- a/changes/changelog.d/1803.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make Artist ordering by name case insensitive diff --git a/changes/changelog.d/1861.feature b/changes/changelog.d/1861.feature deleted file mode 100644 index 762f3fb10..000000000 --- a/changes/changelog.d/1861.feature +++ /dev/null @@ -1 +0,0 @@ -Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861) diff --git a/changes/changelog.d/1939.bugfix b/changes/changelog.d/1939.bugfix deleted file mode 100644 index bdc1b19dc..000000000 --- a/changes/changelog.d/1939.bugfix +++ /dev/null @@ -1 +0,0 @@ -Merge nginx configs for docker production and development setups (#1939) diff --git a/changes/changelog.d/2067.misc b/changes/changelog.d/2067.misc deleted file mode 100644 index e14811359..000000000 --- a/changes/changelog.d/2067.misc +++ /dev/null @@ -1 +0,0 @@ -Rename CHANGELOG to CHANGELOG.md diff --git a/changes/changelog.d/2083.feature b/changes/changelog.d/2083.feature deleted file mode 100644 index 25046e60e..000000000 --- a/changes/changelog.d/2083.feature +++ /dev/null @@ -1 +0,0 @@ -Only allow MusicBrainz tagged file on a pod (#2083) diff --git a/changes/changelog.d/2085.feature b/changes/changelog.d/2085.feature deleted file mode 100644 index aa9b3e308..000000000 --- a/changes/changelog.d/2085.feature +++ /dev/null @@ -1 +0,0 @@ -Add NodeInfo 2.1 (#2085) diff --git a/changes/changelog.d/2102.bugfix b/changes/changelog.d/2102.bugfix deleted file mode 100644 index 170279565..000000000 --- a/changes/changelog.d/2102.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed development docker setup (2102) diff --git a/changes/changelog.d/2104.enhancement b/changes/changelog.d/2104.enhancement deleted file mode 100644 index 0d15120f7..000000000 --- a/changes/changelog.d/2104.enhancement +++ /dev/null @@ -1 +0,0 @@ -Adding typesense container and api client (2104) diff --git a/changes/changelog.d/2123.feature b/changes/changelog.d/2123.feature deleted file mode 100644 index 902a96177..000000000 --- a/changes/changelog.d/2123.feature +++ /dev/null @@ -1 +0,0 @@ -Add a management command to generate dummy notifications for testing diff --git a/changes/changelog.d/2135.feature b/changes/changelog.d/2135.feature deleted file mode 100644 index d099eeb56..000000000 --- a/changes/changelog.d/2135.feature +++ /dev/null @@ -1 +0,0 @@ -Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135) diff --git a/changes/changelog.d/2156.feature b/changes/changelog.d/2156.feature deleted file mode 100644 index 98d0e437d..000000000 --- a/changes/changelog.d/2156.feature +++ /dev/null @@ -1,2 +0,0 @@ -New management command to update Uploads which have been imported using --in-place and are now -stored in s3 (#2156) diff --git a/changes/changelog.d/2159.bugfix b/changes/changelog.d/2159.bugfix deleted file mode 100644 index fca0c9dfb..000000000 --- a/changes/changelog.d/2159.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure embed codes generated before 1.3.0 are still working diff --git a/changes/changelog.d/2163.bugfix b/changes/changelog.d/2163.bugfix deleted file mode 100644 index f352d8bb6..000000000 --- a/changes/changelog.d/2163.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed embedded player crash when API returns relative listen URL. (#2163) diff --git a/changes/changelog.d/2193.enhancement b/changes/changelog.d/2193.enhancement deleted file mode 100644 index 770b8b675..000000000 --- a/changes/changelog.d/2193.enhancement +++ /dev/null @@ -1 +0,0 @@ -Cache pip package in api docker builds (#2193) diff --git a/changes/changelog.d/2196.bugfix b/changes/changelog.d/2196.bugfix deleted file mode 100644 index e8400f7d0..000000000 --- a/changes/changelog.d/2196.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed development docker setup (2196) diff --git a/changes/changelog.d/2208.bugfix b/changes/changelog.d/2208.bugfix deleted file mode 100644 index 23b64f62f..000000000 --- a/changes/changelog.d/2208.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix missing og meta tags (#2208) diff --git a/changes/changelog.d/2215.enhancement b/changes/changelog.d/2215.enhancement deleted file mode 100644 index 7e0e89871..000000000 --- a/changes/changelog.d/2215.enhancement +++ /dev/null @@ -1 +0,0 @@ -Add custom logging functionality (#2155) diff --git a/changes/changelog.d/2231.bugfix b/changes/changelog.d/2231.bugfix deleted file mode 100644 index e114bd9d1..000000000 --- a/changes/changelog.d/2231.bugfix +++ /dev/null @@ -1 +0,0 @@ -Avoid troi radio to give duplicates (#2231) diff --git a/changes/changelog.d/2235.bugfix b/changes/changelog.d/2235.bugfix deleted file mode 100644 index 72c265822..000000000 --- a/changes/changelog.d/2235.bugfix +++ /dev/null @@ -1 +0,0 @@ -Updated links to the Funkwhale website in the UI. (#2235) diff --git a/changes/changelog.d/2248.bugfix b/changes/changelog.d/2248.bugfix deleted file mode 100644 index f724dc7fc..000000000 --- a/changes/changelog.d/2248.bugfix +++ /dev/null @@ -1 +0,0 @@ -Use correct data field for rate limiting identity field (#2248) diff --git a/changes/changelog.d/2252.bugfix b/changes/changelog.d/2252.bugfix deleted file mode 100644 index 0430f4dde..000000000 --- a/changes/changelog.d/2252.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix broken nginx templates for docker setup (#2252) diff --git a/changes/changelog.d/2256.bugfix b/changes/changelog.d/2256.bugfix deleted file mode 100644 index 9d9d2c5ea..000000000 --- a/changes/changelog.d/2256.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix regression that prevent static files from being served in non-docker-deployments (#2256) diff --git a/changes/changelog.d/2258.bugfix b/changes/changelog.d/2258.bugfix deleted file mode 100644 index 43c899612..000000000 --- a/changes/changelog.d/2258.bugfix +++ /dev/null @@ -1 +0,0 @@ -Do not cache all requests to avoid missing updates #2258 diff --git a/changes/changelog.d/add-build-metadata-script.misc b/changes/changelog.d/add-build-metadata-script.misc deleted file mode 100644 index 863865ef3..000000000 --- a/changes/changelog.d/add-build-metadata-script.misc +++ /dev/null @@ -1 +0,0 @@ -Add build metadata script diff --git a/changes/changelog.d/api-replace-pytz-zoneinfo.enhancement b/changes/changelog.d/api-replace-pytz-zoneinfo.enhancement deleted file mode 100644 index 1a02d809f..000000000 --- a/changes/changelog.d/api-replace-pytz-zoneinfo.enhancement +++ /dev/null @@ -1 +0,0 @@ -Replace pytz with zoneinfo in the API diff --git a/changes/changelog.d/archive-changelog.doc b/changes/changelog.d/archive-changelog.doc deleted file mode 100644 index 875bf98bc..000000000 --- a/changes/changelog.d/archive-changelog.doc +++ /dev/null @@ -1 +0,0 @@ -Archived the pre-1.0 changelog diff --git a/changes/changelog.d/atom10.feature b/changes/changelog.d/atom10.feature deleted file mode 100644 index 2a8376cdc..000000000 --- a/changes/changelog.d/atom10.feature +++ /dev/null @@ -1 +0,0 @@ -Add atom1.0 to node info services (#2085) diff --git a/changes/changelog.d/ci-fix-deploy-docs.misc b/changes/changelog.d/ci-fix-deploy-docs.misc deleted file mode 100644 index dd980f183..000000000 --- a/changes/changelog.d/ci-fix-deploy-docs.misc +++ /dev/null @@ -1 +0,0 @@ -Fix CI deploy docs job after stable branch merge diff --git a/changes/changelog.d/ci-fix-workflow-branch-regex.misc b/changes/changelog.d/ci-fix-workflow-branch-regex.misc deleted file mode 100644 index ba662eeee..000000000 --- a/changes/changelog.d/ci-fix-workflow-branch-regex.misc +++ /dev/null @@ -1 +0,0 @@ -Don't run CI on branch containing stable or develop diff --git a/changes/changelog.d/ci-rework.misc b/changes/changelog.d/ci-rework.misc deleted file mode 100644 index fe9451a0a..000000000 --- a/changes/changelog.d/ci-rework.misc +++ /dev/null @@ -1 +0,0 @@ -Rework the CI pipeline diff --git a/changes/changelog.d/ci-speedup-linting.enhancement b/changes/changelog.d/ci-speedup-linting.enhancement deleted file mode 100644 index 4406a1910..000000000 --- a/changes/changelog.d/ci-speedup-linting.enhancement +++ /dev/null @@ -1 +0,0 @@ -Speed up linting and type-checking by using cache diff --git a/changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc b/changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc deleted file mode 100644 index 8901bed00..000000000 --- a/changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc +++ /dev/null @@ -1 +0,0 @@ -Use buildx bake in docker job diff --git a/changes/changelog.d/coc-nodeinfo.doc b/changes/changelog.d/coc-nodeinfo.doc deleted file mode 100644 index 7f0174675..000000000 --- a/changes/changelog.d/coc-nodeinfo.doc +++ /dev/null @@ -1 +0,0 @@ -Added CoC link to nodeinfo endpoint spec. diff --git a/changes/changelog.d/collections.doc b/changes/changelog.d/collections.doc deleted file mode 100644 index 47ec8846f..000000000 --- a/changes/changelog.d/collections.doc +++ /dev/null @@ -1 +0,0 @@ -Added new collections spec. diff --git a/changes/changelog.d/copybutton.bugfix b/changes/changelog.d/copybutton.bugfix deleted file mode 100644 index 091b15f5a..000000000 --- a/changes/changelog.d/copybutton.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed an issue where the copy button didn't copy the Embed code in the embed modal. diff --git a/changes/changelog.d/cypress.feature b/changes/changelog.d/cypress.feature deleted file mode 100644 index 00b66d6cd..000000000 --- a/changes/changelog.d/cypress.feature +++ /dev/null @@ -1 +0,0 @@ -Add basic cypress testing diff --git a/changes/changelog.d/debian10.removal b/changes/changelog.d/debian10.removal deleted file mode 100644 index 6e0ca73dc..000000000 --- a/changes/changelog.d/debian10.removal +++ /dev/null @@ -1,2 +0,0 @@ -This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend -updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended. diff --git a/changes/changelog.d/descriptive-service-worker-error.enhancement b/changes/changelog.d/descriptive-service-worker-error.enhancement deleted file mode 100644 index fc3d84224..000000000 --- a/changes/changelog.d/descriptive-service-worker-error.enhancement +++ /dev/null @@ -1 +0,0 @@ -Log service worker registration error and add a warning about Firefox SW incompatibility in development mode diff --git a/changes/changelog.d/develop-patch-96a1.bugfix b/changes/changelog.d/develop-patch-96a1.bugfix deleted file mode 100644 index cfe79949d..000000000 --- a/changes/changelog.d/develop-patch-96a1.bugfix +++ /dev/null @@ -1 +0,0 @@ -`postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command. diff --git a/changes/changelog.d/development-docs.bugfix b/changes/changelog.d/development-docs.bugfix deleted file mode 100644 index fd74f653f..000000000 --- a/changes/changelog.d/development-docs.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure funkwhale_api package and metadata are available for docs diff --git a/changes/changelog.d/drop-python3.7.removal b/changes/changelog.d/drop-python3.7.removal deleted file mode 100644 index 936f7f0fc..000000000 --- a/changes/changelog.d/drop-python3.7.removal +++ /dev/null @@ -1 +0,0 @@ -Drop support for python3.7 diff --git a/changes/changelog.d/embed-regex.bugfix b/changes/changelog.d/embed-regex.bugfix deleted file mode 100644 index 83e033937..000000000 --- a/changes/changelog.d/embed-regex.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed issue with regular expression in embed. diff --git a/changes/changelog.d/follow.doc b/changes/changelog.d/follow.doc deleted file mode 100644 index db91ce854..000000000 --- a/changes/changelog.d/follow.doc +++ /dev/null @@ -1 +0,0 @@ -Add spec for user following. diff --git a/changes/changelog.d/format-api-dockerfile.misc b/changes/changelog.d/format-api-dockerfile.misc deleted file mode 100644 index 4fb0d59d0..000000000 --- a/changes/changelog.d/format-api-dockerfile.misc +++ /dev/null @@ -1 +0,0 @@ -Format api container file diff --git a/changes/changelog.d/front-split-large-bundles.enhancement b/changes/changelog.d/front-split-large-bundles.enhancement deleted file mode 100644 index cb53791b5..000000000 --- a/changes/changelog.d/front-split-large-bundles.enhancement +++ /dev/null @@ -1 +0,0 @@ -Split front large bundles into smaller chunks diff --git a/changes/changelog.d/funkwhale-manage_scripts.bugfix b/changes/changelog.d/funkwhale-manage_scripts.bugfix deleted file mode 100644 index de23db89f..000000000 --- a/changes/changelog.d/funkwhale-manage_scripts.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix help messages for running scripts using funkwhale-manage diff --git a/changes/changelog.d/get-api-version-from-package.enhancement b/changes/changelog.d/get-api-version-from-package.enhancement deleted file mode 100644 index 307b14c07..000000000 --- a/changes/changelog.d/get-api-version-from-package.enhancement +++ /dev/null @@ -1 +0,0 @@ -Get api version from python package diff --git a/changes/changelog.d/has_mbid.doc b/changes/changelog.d/has_mbid.doc deleted file mode 100644 index b68acf0d7..000000000 --- a/changes/changelog.d/has_mbid.doc +++ /dev/null @@ -1 +0,0 @@ -Add missing `has_mbid` requirement to quality filter spec. diff --git a/changes/changelog.d/lint-api-using-pylint.misc b/changes/changelog.d/lint-api-using-pylint.misc deleted file mode 100644 index 75da99123..000000000 --- a/changes/changelog.d/lint-api-using-pylint.misc +++ /dev/null @@ -1 +0,0 @@ -Lint api code using pylint diff --git a/changes/changelog.d/maintain-api-version-using-poetry.enhancement b/changes/changelog.d/maintain-api-version-using-poetry.enhancement deleted file mode 100644 index 339241f43..000000000 --- a/changes/changelog.d/maintain-api-version-using-poetry.enhancement +++ /dev/null @@ -1 +0,0 @@ -Maintain api version using poetry diff --git a/changes/changelog.d/maloja-extend-submission.enhancement b/changes/changelog.d/maloja-extend-submission.enhancement deleted file mode 100644 index 52fe7cd7b..000000000 --- a/changes/changelog.d/maloja-extend-submission.enhancement +++ /dev/null @@ -1 +0,0 @@ -Maloja: Submit album artists and duration and allow to disable server side metadata fixing diff --git a/changes/changelog.d/meta-tags-embed-player.bugfix b/changes/changelog.d/meta-tags-embed-player.bugfix deleted file mode 100644 index 45c485195..000000000 --- a/changes/changelog.d/meta-tags-embed-player.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure meta tags link to embedded player correctly diff --git a/changes/changelog.d/moderation-languages.feature b/changes/changelog.d/moderation-languages.feature deleted file mode 100644 index 2adca49fe..000000000 --- a/changes/changelog.d/moderation-languages.feature +++ /dev/null @@ -1 +0,0 @@ -Allow moderators to set moderation languages (#2085) diff --git a/changes/changelog.d/multi-artist.doc b/changes/changelog.d/multi-artist.doc deleted file mode 100644 index be904c08f..000000000 --- a/changes/changelog.d/multi-artist.doc +++ /dev/null @@ -1 +0,0 @@ -Added multi-artist support spec. diff --git a/changes/changelog.d/multiarch.bugfix b/changes/changelog.d/multiarch.bugfix deleted file mode 100644 index 1c770c463..000000000 --- a/changes/changelog.d/multiarch.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix multiarch docker builds #2211 diff --git a/changes/changelog.d/nginxtemplates.feature b/changes/changelog.d/nginxtemplates.feature deleted file mode 100644 index 69755d4ed..000000000 --- a/changes/changelog.d/nginxtemplates.feature +++ /dev/null @@ -1 +0,0 @@ -Generate all nginx configurations from one template diff --git a/changes/changelog.d/nodeinfo-usage.doc b/changes/changelog.d/nodeinfo-usage.doc deleted file mode 100644 index 8b26cfd1e..000000000 --- a/changes/changelog.d/nodeinfo-usage.doc +++ /dev/null @@ -1 +0,0 @@ -Updated nodeinfo spec to include usage statistics. diff --git a/changes/changelog.d/nodeinfo.doc b/changes/changelog.d/nodeinfo.doc deleted file mode 100644 index de897bfc3..000000000 --- a/changes/changelog.d/nodeinfo.doc +++ /dev/null @@ -1 +0,0 @@ -Added NodeInfo 2.1 specification diff --git a/changes/changelog.d/nodeinfo2-update.doc b/changes/changelog.d/nodeinfo2-update.doc deleted file mode 100644 index 78b7de84b..000000000 --- a/changes/changelog.d/nodeinfo2-update.doc +++ /dev/null @@ -1 +0,0 @@ -Updated the Nodeinfo 2 spec to address feedback from implementation. diff --git a/changes/changelog.d/plugins-boolean-field.enhancement b/changes/changelog.d/plugins-boolean-field.enhancement deleted file mode 100644 index c12def20c..000000000 --- a/changes/changelog.d/plugins-boolean-field.enhancement +++ /dev/null @@ -1 +0,0 @@ -Support boolean config fields in plugins diff --git a/changes/changelog.d/python-312.feature b/changes/changelog.d/python-312.feature deleted file mode 100644 index 045006abd..000000000 --- a/changes/changelog.d/python-312.feature +++ /dev/null @@ -1 +0,0 @@ -Add support for Python 3.12 diff --git a/changes/changelog.d/renovate-python.misc b/changes/changelog.d/renovate-python.misc deleted file mode 100644 index c0fb4584e..000000000 --- a/changes/changelog.d/renovate-python.misc +++ /dev/null @@ -1 +0,0 @@ -Make renovate not pinning the python version to the latest one diff --git a/changes/changelog.d/replace-docs-scripts-with-makefile.misc b/changes/changelog.d/replace-docs-scripts-with-makefile.misc deleted file mode 100644 index b27beaf8a..000000000 --- a/changes/changelog.d/replace-docs-scripts-with-makefile.misc +++ /dev/null @@ -1 +0,0 @@ -Replace docs scripts with make diff --git a/changes/changelog.d/server-location.feature b/changes/changelog.d/server-location.feature deleted file mode 100644 index f1c3a1922..000000000 --- a/changes/changelog.d/server-location.feature +++ /dev/null @@ -1 +0,0 @@ -Allow to set the instances server location (#2085) diff --git a/changes/changelog.d/ui-lib.feature b/changes/changelog.d/ui-lib.feature deleted file mode 100644 index 5c453ccff..000000000 --- a/changes/changelog.d/ui-lib.feature +++ /dev/null @@ -1 +0,0 @@ -Add support for Funkwhale UI library. diff --git a/changes/changelog.d/ujson.bugfix b/changes/changelog.d/ujson.bugfix deleted file mode 100644 index 0952ae5cf..000000000 --- a/changes/changelog.d/ujson.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure build requirements for ujson are met diff --git a/changes/changelog.d/websocket.bugfix b/changes/changelog.d/websocket.bugfix deleted file mode 100644 index ebafa81a0..000000000 --- a/changes/changelog.d/websocket.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed an issue with the nginx templates that caused issues when connecting to websockets. From 038b696e7555405de0f5bdc87c00fb8a10ac1df4 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:35:58 +0000 Subject: [PATCH 213/371] Translated using Weblate (English) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/en/ --- front/src/locales/en_US.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index fdfa2e6a0..ecd451e53 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -4392,7 +4392,7 @@ }, "meta": { "failedTracks": "Failed tracks: {tracks}", - "lastUpdate": "Last update: ", + "lastUpdate": "Last update:", "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { From 20cfaa8dc94f4511a21de6e4a6c76df701980fbc Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:35:08 +0000 Subject: [PATCH 214/371] Translated using Weblate (German) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/de/ --- front/src/locales/de.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/front/src/locales/de.json b/front/src/locales/de.json index 98ee1ae79..47f229f22 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -4391,20 +4391,20 @@ "scanSkipped": "Scan ausgelassen (der letzte Scan fand kurz zuvor statt)" }, "meta": { - "failedTracks": "Fehlgeschlagene Titel:", + "failedTracks": "Fehlgeschlagene Titel: {tracks}", "lastUpdate": "Letzte Aktualisierung:", - "tracks": "{ n } Titel | { n } Titel" + "tracks": "Keine Titel | { n } Titel | { n } Titel" }, "modal": { "unfollow": { "content": { "warning": "Wenn du diese Mediathek nicht mehr folgst, verlierst du den Zugriff auf alle ihre Inhalte." }, - "header": "Das Abonnement an dieser Mediathek beenden?" + "header": "Mƶchtest du das Abonnement dieser Mediathek beenden?" } }, "tooltip": { - "private": "Diese Mediathek ist privat. Der Zugriff bedarf der Genehmigung des EigentĆ¼mers / der EigentĆ¼merin", + "private": "Diese Mediathek ist privat. Der Zugriff bedarf der Genehmigung der EigentĆ¼mer*in", "public": "Diese Mediathek ist ƶffentlich. Du kannst auf den Inhalt ohne EinschrƤnkung zugreifen" } }, From b1f3a62faeba4fad576fb9788464d3959dd43c18 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:34:45 +0000 Subject: [PATCH 215/371] Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/en_GB/ --- front/src/locales/en_GB.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/locales/en_GB.json b/front/src/locales/en_GB.json index 7dfb9d60f..7c2711f0c 100644 --- a/front/src/locales/en_GB.json +++ b/front/src/locales/en_GB.json @@ -4383,7 +4383,7 @@ "sharingLink": "Sharing link" }, "link": { - "scan": "Scan now ", + "scan": "Scan now", "scanDetails": "Details" }, "message": { @@ -4392,7 +4392,7 @@ }, "meta": { "failedTracks": "Failed tracks: {tracks}", - "lastUpdate": "Last update: ", + "lastUpdate": "Last update:", "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { From d8c734d3cd9c26975960d9f520ce88146280aa5d Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:41:26 +0000 Subject: [PATCH 216/371] Translated using Weblate (Basque) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/eu/ --- front/src/locales/eu.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/locales/eu.json b/front/src/locales/eu.json index 3600f4b25..61d973157 100644 --- a/front/src/locales/eu.json +++ b/front/src/locales/eu.json @@ -4383,7 +4383,7 @@ "sharingLink": "Esteka partekatzen" }, "link": { - "scan": "Eskaneatu orain ", + "scan": "Eskaneatu orain", "scanDetails": "Xehetasunak" }, "message": { @@ -4392,7 +4392,7 @@ }, "meta": { "failedTracks": "Huts egin duten pistak: {tracks}", - "lastUpdate": "Azken eguneraketa: ", + "lastUpdate": "Azken eguneraketa:", "tracks": "Pista { n } | { n } pista" }, "modal": { From 21ff5f65da4f2db10beaa419da368e67059b1df6 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 14:42:29 +0000 Subject: [PATCH 217/371] Translated using Weblate (French) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index d21766622..be940ba5b 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -4383,7 +4383,7 @@ "sharingLink": "Lien de partage" }, "link": { - "scan": "Analyser maintenant ", + "scan": "Analyser maintenant", "scanDetails": "DĆ©tails" }, "message": { @@ -4392,7 +4392,7 @@ }, "meta": { "failedTracks": "Pistes Ć©chouĆ©esā€Æ: {tracks}", - "lastUpdate": "DerniĆØre mise Ć  jourā€Æ: ", + "lastUpdate": "DerniĆØre mise Ć  jourā€Æ:", "tracks": "{ n } piste | { n } pistes" }, "modal": { From 5b022d94d14c0ea9beac6ced7738c2bb3301dfd2 Mon Sep 17 00:00:00 2001 From: Matteo Piovanelli <thebovaz@gmail.com> Date: Mon, 11 Dec 2023 14:37:58 +0000 Subject: [PATCH 218/371] Translated using Weblate (Italian) Currently translated at 97.1% (2120 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/it/ --- front/src/locales/it.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/front/src/locales/it.json b/front/src/locales/it.json index 8a0064725..a268fbace 100644 --- a/front/src/locales/it.json +++ b/front/src/locales/it.json @@ -1,4 +1,7 @@ { + "App": { + "loading": "Caricandoā€¦" + }, "components": { "About": { "description": { @@ -15,6 +18,9 @@ "publicContent": "Naviga tra i contenuti pubblici", "signup": "Registrati" }, + "help": { + "closedRegistrations": "Le iscrizioni sono chiuse su questo pod. Ti puoi registrare su un altro pod usando il link seguente." + }, "link": { "findOtherPod": "Trova un altro pod", "learnMore": "Scopri di piĆ¹" @@ -3642,7 +3648,8 @@ }, "audioContent": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{bitrate}/s" }, "cachedSize": "Dimensione in cache", "duration": "Durata", @@ -3794,7 +3801,8 @@ "value": "Errore durante il recupero delle informazioni del nodo" }, "software": { - "label": "Software" + "label": "Software", + "value": "{name} ({version})" }, "totalUsers": "Utenti totali" } @@ -4537,6 +4545,7 @@ "Detail": { "button": { "confirm": "Elimina radio", + "delete": "Elimina", "edit": "Modificaā€¦" }, "empty": { From 65728c81c404d0dc0bccae827bee181a70c3cbbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Wed, 15 Nov 2023 13:52:29 +0100 Subject: [PATCH 219/371] feat(docs): Add initial user deletion spec Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2630> --- docs/index.md | 1 + docs/specs/user-deletion/index.md | 163 ++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 docs/specs/user-deletion/index.md diff --git a/docs/index.md b/docs/index.md index cff692516..9e540f0c6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -107,6 +107,7 @@ specs/offline-mode/index specs/quality-filter/index specs/multi-artist/index specs/user-follow/index +specs/user-deletion/index ``` diff --git a/docs/specs/user-deletion/index.md b/docs/specs/user-deletion/index.md new file mode 100644 index 000000000..6295929f7 --- /dev/null +++ b/docs/specs/user-deletion/index.md @@ -0,0 +1,163 @@ +# User deletion spec + +## Terminology + +The following terminology is used throughout this document: + +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object acting on behalf of another object across federated services. See the [ActivityPub specification][actor] for more details. + +Tombstone +: A status that marks an object as deleted but leaves some metadata intact to prevent reuse. + +## The issue + +Funkwhale users broadcast activities such as Listenings and Favorites both locally and over federation. Users require the ability to fully delete their presence from local and federated servers to comply with their request. + +## The solution + +User deletions must be actioned as _cascading_ deletions both locally and across federation. Any action associated with a user's actor should be deleted, and the actor itself must be marked as `Tombstoned` to prevent another user from claiming the actor in future. + +When a user deletes their account, the following must happen: + +1. The local server must remove all Favorites, Listenings, Collections, and Uploads owned by the actor + +:::{info} +If the user owns any joint Channels or Playlists, these should only be deleted if the user is the **only** user with access to the object. +::: + +3. The local server must delete the user's actor and mark it as `Tombstoned` +4. The local server must delete the actor of any Channels owned solely by the user and mark them as `Tombstoned` +5. The local server's **Service actor** must broadcast the deletion to the **Service actors** of all servers known to it +6. Remote servers should delete all data associated with the deleted actor, including cached content belonging to the actor + +```{mermaid} +sequenceDiagram + User ->> API : Delete account + API -->> User : Acknowledge + par cascade deletion in the background + API ->> Database : Cascade delete local content + activate Database + API ->> Service actor : Broadcast deletion + Service actor ->> Remote servers : Broadcast deletion + Remote servers -->> Service actor : Cascade delete + end +``` + +### API behavior + +The Funkwhale client API is responsible for handling deletion requests and actioning the resulting cascade deletion. Users should request a deletion using a `DELETE` request: + +```http +DELETE /api/v2/users/{id} +``` + +:::{danger} +Users must only be able to delete their own account. Unauthorized deletion requests must return a `401: Unauthorized` response. + +Admins and moderators with sufficient privilege to remove accounts should be able to remove local accounts using this endpoint. +::: + +On receipt of a deletion request, the API must return a `202: Accepted` response to inform the user that the deletion process has been received. + +If the server admin has enabled email notifications, the server should send an email notifying the user that their account has been successfully started and all of their information will be deleted. + +After this, the server must handle the following: + +1. Deleting any Uploads owned by the user +2. Deleting any Favorites associated with the user +3. Deleting any Listenings associated with the actor +4. Deleting any Playlists associated with the actor +5. Deleting any Collections owned by the user +6. Deleting any Channels owned solely by the user + +The user's account information (such as name, email address, signup date, last login) must be removed and their federation actor `Tombstoned` to prevent reuse of their handle. Since Channels and Collections are federation actors with their own collection of followers, these must also be `Tombstoned` and their identifying information removed. + +If a request is sent to the API for a `Tombstoned` actor, it must respond with `410: Gone`. + +### ActivityPub behavior + +Funkwhale must broadcast any deletion requests to ActivityPub servers with which it has previously interacted by posting a [`Delete` activity][delete] targeting the user's [actor] to the Service Actor's [outbox]. The Service actor should broadcast the following: + +1. A [`Delete` activity][delete] for the user's [actor] +2. A [`Delete` activity][delete] for the actor of any Collections owned by the user +3. A [`Delete` activity][delete] for the actor of any Channels owned solely by the user +4. A [`Delete` activity][delete] for the actor of any Channel owner owned solely by the user + +```{mermaid} +flowchart TD + delete([The user sends a DELETE request]) --> outbox(The deletion is added to\nthe Service actor's outbox) + outbox --> collections{Does the user own\nany collections?} + collections -->|yes| tscollection(The collection is tombstoned and the deletion\nis added to the Service actor's outbox) + tscollection --> virtual{Does the user solely own any\nvirtual actors?} + virtual -->|yes| tsvirtual(The virtual actor is tombstoned and the deletion\nis added to the Service actor's outbox) + tsvirtual --> channel{Does the virtual actor own any\nChannels?} + channel -->|yes| tschannel(The Channel is tombstoned and the deletion\nis added to the Service actor's outbox) + outbox & tscollection & tsvirtual & tschannel --> serviceactor([The Service actor broadcasts\nall deletions to known servers]) +``` + +On receipt of a [`Delete` activity][delete], the server should cascade delete any content owned by the targeted actor. + +### Web app behavior + +The Funkwhale web app must present users with a dangerous button to action an account deletion request. This button must be prefaced with clear prose that outlines precisely the impact that deleting an account has. + +To ensure that users don't delete their account by mistake, they must verify their request twice and input their password to prevent abuse of the feature. The user experience flow for deleting an account goes as follows: + +1. The user navigates to their account settings page +2. The user locates the "Delete account" button that is clearly and visually separated from other actions on the page +3. The user reads the warnings about the deletion process and selects the button to begin the deletion process +4. A modal appears asking the user to authenticate by typing in the name of the targeted object (for example: their username) +5. If the object name is entered correctly, the user is presented with a final warning that informs them that the deletion process can't be reversed +6. If the user chooses to proceed, the app logs the user out and informs them that the deletion process has begun + +```{mermaid} +flowchart TD + settings([The user navigates to\nthe settings menu]) --> delete(The user selects the\nDelete account button) + delete --> password(A password input appears) + password --> correctpass{Did the user enter their\npassword correctly?} + correctpass -->|yes| warning(A final warning appears informing\nthe user that the deletion process\nis destructive and irreversible) + warning --> confirm{Did the user confirm the\naccount deletion?} + confirm -->|yes| logout(The user is logged out and a notification\nconfirms their account is gone) + logout --> email([The server sends the user an email to\nconfirm the deletion]) + correctpass & confirm -->|no| cancel([The account deletion process is\ncancelled]) +``` + +## Availability + +- [x] App frontend +- [x] CLI + +## Responsible parties + +The following working groups are responsible for implementing this feature: + +- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic +- The **Frontend group** is responsible for creating the interface for in-app account deletion using Funkwhale UI components +- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users + +## Minimum viable product + +The MVP for this feature is to implement the backend logic to enable Funkwhale users to fully delete their accounts and their content. Since users don't currently share content over ActivityPub, only local deletion needs to be achieved for the MVP. + +Since **Channels** currently implement ActivityPub behavior, we need to confirm that: + +- Channel deletions broadcast the object deletion to remote servers +- Remote servers remove all associated data when a deletion broadcast is received + +### Next steps + +At each stage of development, we need to consider how account deletion factors into features. Each ActivityPub-enabled feature must have deletion logic as part of its structure. + +[outbox]: https://www.w3.org/TR/activitypub/#outbox +[actor]: https://www.w3.org/TR/activitypub/#actors +[delete]: https://www.w3.org/TR/activitypub/#delete-activity-outbox From cb65ee69e1722fc7a047e920f490efa13ecd1c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Wed, 15 Nov 2023 12:56:47 +0000 Subject: [PATCH 220/371] fix(docs): update heading and lexer Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2630> --- docs/specs/user-deletion/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/specs/user-deletion/index.md b/docs/specs/user-deletion/index.md index 6295929f7..0924eb219 100644 --- a/docs/specs/user-deletion/index.md +++ b/docs/specs/user-deletion/index.md @@ -1,4 +1,4 @@ -# User deletion spec +# User deletion ## Terminology @@ -57,7 +57,7 @@ sequenceDiagram The Funkwhale client API is responsible for handling deletion requests and actioning the resulting cascade deletion. Users should request a deletion using a `DELETE` request: -```http +```text DELETE /api/v2/users/{id} ``` From ba53d03ac5931bdf3d352b267e5c41adaca05814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Wed, 15 Nov 2023 13:08:50 +0000 Subject: [PATCH 221/371] Add changelog for user deletion spec Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2630> --- changes/changelog.d/user-deletion.doc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/user-deletion.doc diff --git a/changes/changelog.d/user-deletion.doc b/changes/changelog.d/user-deletion.doc new file mode 100644 index 000000000..e4ebbc56c --- /dev/null +++ b/changes/changelog.d/user-deletion.doc @@ -0,0 +1 @@ +Added user deletion spec From 65f13a379f121ff9ee9937a7d954a5522d24019d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Tue, 12 Dec 2023 16:26:39 +0100 Subject: [PATCH 222/371] Use glossary and clarify deletion process Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2630> --- docs/glossary.md | 73 ++++++++++++++++++------------- docs/specs/user-deletion/index.md | 38 ++++------------ 2 files changed, 52 insertions(+), 59 deletions(-) diff --git a/docs/glossary.md b/docs/glossary.md index b19921863..68375ae55 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -2,59 +2,72 @@ ## Funkwhale glossary -```{glossary} - +{.glossary} Pod - A pod is an instance of Funkwhale running on a server. Pods can communicate with one another across the {term}`Fediverse`. +: A pod is an instance of Funkwhale running on a server. Pods can communicate with one another across the {term}`Fediverse`. Authenticated - Users who have an account on a Funkwhale pod. These users provide their authentication information when accessing content. +: Users who have an account on a Funkwhale pod. These users provide their authentication information when accessing content. Anonymous - Users who do not have an account on a Funkwhale pod. These users don't provide any authentication when accessing content. +: Users who do not have an account on a Funkwhale pod. These users don't provide any authentication when accessing content. Permissions - Additional rights that an administrator/moderator can grant to a user. Permissions grant access to menus and actions in Funkwhale. +: Additional rights that an administrator/moderator can grant to a user. Permissions grant access to menus and actions in Funkwhale. - Available permissions: +Available permissions: - - {guilabel}`Moderation` ā€“ Grants access to the {guilabel}`Moderation` menu. Enables the user to moderate users, domains, and the allow-list. - - {guilabel}`Manage library` ā€“ Grants access to the {guilabel}`Library` menu. Enables the user to make changes to library content. This includes deleting local objects and handling edit suggestions. - - {guilabel}`Manage instance-level settings` ā€“ Grants access to the {guilabel}`Settings` menu. Enables the user to make changes to pod-level settings such as security settings and API behavior. +- {guilabel}`Moderation` ā€“ Grants access to the {guilabel}`Moderation` menu. Enables the user to moderate users, domains, and the allow-list. +- {guilabel}`Manage library` ā€“ Grants access to the {guilabel}`Library` menu. Enables the user to make changes to library content. This includes deleting local objects and handling edit suggestions. +- {guilabel}`Manage instance-level settings` ā€“ Grants access to the {guilabel}`Settings` menu. Enables the user to make changes to pod-level settings such as security settings and API behavior. +{.glossary} Report categories - The different types of report a person can submit to your pod. +: The different types of report a person can submit to your pod. - Available categories: +Available categories: - - {guilabel}`Takedown request` ā€“ allow users to request content be removed from your pod. - - {guilabel}`Invalid metadata` ā€“ allow users to inform moderators about incorrect metadata on content. - - {guilabel}`Illegal content` ā€“ allow users to flag content as illegal. - - {guilabel}`Offensive content` ā€“ allow users to flag offensive or hurtful content to moderators. - - {guilabel}`Other` ā€“ allow users to submit reports that don't fit into the above categories. - -``` +- {guilabel}`Takedown request` ā€“ allow users to request content be removed from your pod. +- {guilabel}`Invalid metadata` ā€“ allow users to inform moderators about incorrect metadata on content. +- {guilabel}`Illegal content` ā€“ allow users to flag content as illegal. +- {guilabel}`Offensive content` ā€“ allow users to flag offensive or hurtful content to moderators. +- {guilabel}`Other` ā€“ allow users to submit reports that don't fit into the above categories. ## Channel glossary -```{glossary} - +{.glossary} Fediverse - A term used to refer to a collection of federated (interconnected) servers. These servers run software that enables users to publish and host their own content. +: A term used to refer to a collection of federated (interconnected) servers. These servers run software that enables users to publish and host their own content. Podcatcher - A podcatcher is a piece of software that can read podcast feeds. Podcatchers enable listeners to follow and listen to podcast content. - -``` +: A podcatcher is a piece of software that can read podcast feeds. Podcatchers enable listeners to follow and listen to podcast content. ## Plugin glossary -```{glossary} - +{.glossary} Plugin - A plugin is a piece of software that extends the functionality of another piece of software. +: A plugin is a piece of software that extends the functionality of another piece of software. Scrobbling - Scrobbling is the act of recording listen data. Services use this information to keep track of listening preferences and recommend music. +: Scrobbling is the act of recording listen data. Services use this information to keep track of listening preferences and recommend music. -``` +## ActivityPub glossary + +{.glossary} +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object acting on behalf of another object across federated services. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#actors) for more details. + +Service actor +: A special actor that represents a Funkwhale pod. ActivityPub actors can [follow this actor](https://www.w3.org/TR/activitypub/#follow-activity-outbox) to receive updates to public content stored on the pod. + +Tombstone +: A status that marks an object as deleted but leaves some metadata intact to prevent reuse. diff --git a/docs/specs/user-deletion/index.md b/docs/specs/user-deletion/index.md index 0924eb219..c7132757a 100644 --- a/docs/specs/user-deletion/index.md +++ b/docs/specs/user-deletion/index.md @@ -1,44 +1,24 @@ # User deletion -## Terminology - -The following terminology is used throughout this document: - -User -: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. - -Object -: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. - -Activity -: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. - -Actor -: An ActivityPub object acting on behalf of another object across federated services. See the [ActivityPub specification][actor] for more details. - -Tombstone -: A status that marks an object as deleted but leaves some metadata intact to prevent reuse. - ## The issue Funkwhale users broadcast activities such as Listenings and Favorites both locally and over federation. Users require the ability to fully delete their presence from local and federated servers to comply with their request. ## The solution -User deletions must be actioned as _cascading_ deletions both locally and across federation. Any action associated with a user's actor should be deleted, and the actor itself must be marked as `Tombstoned` to prevent another user from claiming the actor in future. +User deletions must be actioned as _cascading_ deletions both locally and across federation. Any action or information associated with a user's {term}`actor <Actor>` should be deleted, and the actor itself must be marked as {term}`Tombstoned <Tombstone>` to prevent another user from claiming the actor in future. + +:::{important} +If the user owns any joint Channels or Playlists, these should only be deleted if the user is the **only** user with access to the {term}`object <Object>`. +::: When a user deletes their account, the following must happen: 1. The local server must remove all Favorites, Listenings, Collections, and Uploads owned by the actor - -:::{info} -If the user owns any joint Channels or Playlists, these should only be deleted if the user is the **only** user with access to the object. -::: - -3. The local server must delete the user's actor and mark it as `Tombstoned` -4. The local server must delete the actor of any Channels owned solely by the user and mark them as `Tombstoned` -5. The local server's **Service actor** must broadcast the deletion to the **Service actors** of all servers known to it -6. Remote servers should delete all data associated with the deleted actor, including cached content belonging to the actor +2. The local server must delete the user's profile and mark their actor as `Tombstoned` +3. The local server must delete the profile of any Channels owned solely by the user and mark their actor as `Tombstoned` +4. The local server's {term}`Service actor` must broadcast the deletion {term}`activity <Activity>` to the **Service actors** of all servers known to it +5. Remote servers should delete all data associated with the deleted actor, including cached content belonging to the actor ```{mermaid} sequenceDiagram From 349610bbeb4f35df0ae5ae3271ca424276364193 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 24 Nov 2023 13:04:44 +0000 Subject: [PATCH 223/371] chore: Use make install everywhere instead of poetry install Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2646> --- .gitlab-ci.yml | 4 ++-- .gitpod.yml | 2 +- api/Makefile | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b97e36e95..f8000b475 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -248,7 +248,7 @@ test_api: CACHE_URL: "redis://redis:6379/0" before_script: - cd api - - poetry install --all-extras + - make install script: - > poetry run pytest @@ -351,7 +351,7 @@ build_api_schema: API_TYPE: "v1" before_script: - cd api - - poetry install --all-extras + - make install - poetry run funkwhale-manage migrate script: - poetry run funkwhale-manage spectacular --file ../docs/schema.yml diff --git a/.gitpod.yml b/.gitpod.yml index 29f893054..993afaf10 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -14,7 +14,7 @@ tasks: docker-compose up -d poetry env use python - poetry install + make install gp ports await 5432 diff --git a/api/Makefile b/api/Makefile index a31857fad..f946180cc 100644 --- a/api/Makefile +++ b/api/Makefile @@ -4,7 +4,7 @@ CPU_CORES := $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) .PHONY: install lint install: - poetry install + poetry install --all-extras lint: poetry run pylint \ From b8978021c0f24825c24c06fb52f4d7cc6cd56430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Wed, 15 Nov 2023 13:07:26 +0000 Subject: [PATCH 224/371] feat(docs): Add new upload process spec Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2631> --- changes/changelog.d/upload-process.doc | 1 + docs/index.md | 1 + docs/specs/upload-process/index.md | 110 +++++++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 changes/changelog.d/upload-process.doc create mode 100644 docs/specs/upload-process/index.md diff --git a/changes/changelog.d/upload-process.doc b/changes/changelog.d/upload-process.doc new file mode 100644 index 000000000..a623e6ec7 --- /dev/null +++ b/changes/changelog.d/upload-process.doc @@ -0,0 +1 @@ +Added new upload process spec diff --git a/docs/index.md b/docs/index.md index 9e540f0c6..fe714b36a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -108,6 +108,7 @@ specs/quality-filter/index specs/multi-artist/index specs/user-follow/index specs/user-deletion/index +specs/upload-process/index ``` diff --git a/docs/specs/upload-process/index.md b/docs/specs/upload-process/index.md new file mode 100644 index 000000000..ef86c2140 --- /dev/null +++ b/docs/specs/upload-process/index.md @@ -0,0 +1,110 @@ +# New upload process spec + +## The issue + +Our current upload process is quite cumbersome and can be confusing for new users. Essentially, users have to know exactly where they want to put content before they've even uploaded it, and once it's uploaded it's hard to move. + +There are currently 2 upload flows: + +### Upload to library + +Uploading to a content library is the oldest upload mechanism in Funkwhale. The flow goes like this: + +1. The user clicks on the upload button +2. The user selects "Upload third-party content in a library" +3. The user chooses which library they want to upload to and clicks "Upload" +4. The user selects content or drags and drops it to complete the upload + +### Upload to a channel + +Channels are a newer feature, but the upload process is largely the same: + +1. The user clicks on the upload button +2. The user selects "Publish your work in a channel" +3. The user selects the channel they want to upload to +4. The user selects "Upload" +5. The user enters some metadata about the entry +6. The user selects content or drags and drops it to complete the upload +7. The user inputs relevant details about each track + +## Proposed solution + +To simplify this flow, the upload process should have a single entrypoint which then guides the user to the correct upload context. Rather than needing to go through a series of steps to upload each item. The proposed solution is to create a single modal for uploads that doesn't require the user to navigate to upload content to different locations. + +## Feature behavior + +The new feature will present an upload menu that gives users all upload options as a selectable radio menu: + +1. Library (later Collections) +2. Music channel +3. Podcast channel + +Once the user selects an option, they can select the target from a dropdown and start uploading straight away. + +### Frontend + +The new workflow goes as follows: + +1. The user selects the upload button. An upload modal opens +2. The user selects their upload target: + - Their music library/collections(s) + - A music channel + - A podcast channel +3. The modal displays all items in a selected category as a dropdown list. For example: + - A list of libraries/collections owned by the user + - A list of music channels owned by the user + - A list of podcast channels owned by the user +4. The user selects the location to which they want to upload their content +5. The user selects the files they want to upload from a file picker, or by dragging and dropping files onto the modal +6. The user can select a "Upload in background" button which dismisses the modal but _continues the upload_ +7. Funkwhale assesses if all files have the correct metadata and highlights any issues for the user to fix _with a meaningful message_ + +```{mermaid} +flowchart TD + + upload([User selects the upload button]) --> modal(An upload modal opens) + modal --> select{The user selects their upload target} + select --> |Library/Collection| library(The modal displays a list of libraries/collections) + select --> |Music channel| music(The modal displays the user's music channels) + select --> |Podcast channel| podcast(The modal displays the user's podcast channels) + library & music & podcast --> choose(The user chooses the upload location) + choose --> files[The user drags files to upload\nor selects files in a file picker] + files --> wait(The user waits for the upload to complete) & close(The user closes the modal) + wait & close --> process(Funkwhale processes the uploads\nand verifies metadata) + process --> message([Funkwhale returns status messages for all uploads\nand notifies the user the the upload is complete]) + +``` + +#### UX considerations + +To prevent disrupted uploads, the following UX should be implemented + +- If the user dismisses the modal with the escape key, by clicking outside the modal, or by moving back to the previous page, _the user should be warned and given the option to cancel their upload or continue it in the background_ +- The user should have the option to cancel an upload at any time +- If an upload is sent to the background, it should notify the user in some way when the upload is complete + +> See the [interactive prototype](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=d9f9f4d0-1a7b-11ed-8551-a35b3c702efa§ion=interactions&index=0) for an overview of the behavior. [name=Sporiff] + +### Backend behavior + +The upload process remains the same on the backend. However, the error checking needs to be more descriptive. For example: + +- Failed metadata checks should be explicit about what issues were found in the metadata and should return this in a readable way for the user to fix +- If an upload fails partway, this should be made clear so that the user can attempt a reupload +- The backend should return a meaningful status message reflecting the file processing state + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- **Design group**: mockups and interface designs +- **Frontend group**: building the UI to the design spec +- **Backend group**: develop metadata checks + +## Minimum viable product + +The MVP for this product should be able to replicate the functionality of the current v1 upload process with the improved workflow outlined above. From 587bbc1118b9704f8181f56a6526b0794248cd62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Wed, 15 Nov 2023 13:08:04 +0000 Subject: [PATCH 225/371] fix(docs): use callout Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2631> --- docs/specs/upload-process/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/specs/upload-process/index.md b/docs/specs/upload-process/index.md index ef86c2140..bffacc9ad 100644 --- a/docs/specs/upload-process/index.md +++ b/docs/specs/upload-process/index.md @@ -83,7 +83,9 @@ To prevent disrupted uploads, the following UX should be implemented - The user should have the option to cancel an upload at any time - If an upload is sent to the background, it should notify the user in some way when the upload is complete -> See the [interactive prototype](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=d9f9f4d0-1a7b-11ed-8551-a35b3c702efa§ion=interactions&index=0) for an overview of the behavior. [name=Sporiff] +:::{seealso} +See the [interactive prototype](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=d9f9f4d0-1a7b-11ed-8551-a35b3c702efa§ion=interactions&index=0) for an overview of the behavior. +::: ### Backend behavior From ab0efa3edf6a693ca5e19c66f700ea915e6e5e29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <ciaranainsworth@proton.me> Date: Thu, 7 Dec 2023 19:00:32 +0100 Subject: [PATCH 226/371] Update behavior spec Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2631> --- docs/specs/upload-process/index.md | 112 +++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 14 deletions(-) diff --git a/docs/specs/upload-process/index.md b/docs/specs/upload-process/index.md index bffacc9ad..2739fbc89 100644 --- a/docs/specs/upload-process/index.md +++ b/docs/specs/upload-process/index.md @@ -1,4 +1,4 @@ -# New upload process spec +# Upload process ## The issue @@ -57,24 +57,29 @@ The new workflow goes as follows: 4. The user selects the location to which they want to upload their content 5. The user selects the files they want to upload from a file picker, or by dragging and dropping files onto the modal 6. The user can select a "Upload in background" button which dismisses the modal but _continues the upload_ -7. Funkwhale assesses if all files have the correct metadata and highlights any issues for the user to fix _with a meaningful message_ +7. Funkwhale assesses if all files have the correct metadata and highlights any issues for the user to fix _with a meaningful message_. The frontend keep the connection open until the API sends a response ```{mermaid} flowchart TD - - upload([User selects the upload button]) --> modal(An upload modal opens) - modal --> select{The user selects their upload target} - select --> |Library/Collection| library(The modal displays a list of libraries/collections) - select --> |Music channel| music(The modal displays the user's music channels) - select --> |Podcast channel| podcast(The modal displays the user's podcast channels) - library & music & podcast --> choose(The user chooses the upload location) - choose --> files[The user drags files to upload\nor selects files in a file picker] - files --> wait(The user waits for the upload to complete) & close(The user closes the modal) - wait & close --> process(Funkwhale processes the uploads\nand verifies metadata) - process --> message([Funkwhale returns status messages for all uploads\nand notifies the user the the upload is complete]) - + upload([User selects the upload button]) --> modal(An upload modal opens) + modal --> select{The user selects their upload target} + select --> |Library/Collection| library(The modal displays a list of libraries/collections) + select --> |Music channel| music(The modal displays the user's music channels) + select --> |Podcast channel| podcast(The modal displays the user's podcast channels) + library & music & podcast --> choose(The user chooses the upload location) + choose --> files[The user drags files to upload\nor selects files in a file picker] + files --> wait(The user waits for the upload to complete) & close(The user closes the modal) + wait & close --> process(Funkwhale processes the uploads\nand verifies metadata) + process --> message([Funkwhale returns status messages for all uploads\nand notifies the user the the upload is complete]) ``` +The frontend should reflect the **status** of the upload to inform the user how the upload is progressing: + +- `Failed`: The file is improperly tagged **or** the API has responded with an error +- `Uploading`: The file is being sent to the server +- `Processing`: The server is processing the file and no success response has been returned yet +- `Success`: The API has responded with a `200: Success` response and passed back information about the upload. + #### UX considerations To prevent disrupted uploads, the following UX should be implemented @@ -95,6 +100,85 @@ The upload process remains the same on the backend. However, the error checking - If an upload fails partway, this should be made clear so that the user can attempt a reupload - The backend should return a meaningful status message reflecting the file processing state +#### Response structure (V2 only) + +If the upload succeeds, the API should respond with a `200: Success` message and return a payload containing the following information: + +- The upload `guid` +- The `title` of the uploaded file +- The `createdDate` of the upload +- The `fileType` of the upload +- The associated `recording` +- The associated `release` +- The `owner` (actor) of the upload + +```json +{ + "guid": "18c455d8-9840-4000-804d-c53e92d85d01", + "title": "string", + "createdDate": "1970-01-01T00:00:00.000Z", + "fileType": "flac", + "recording": { + "guid": "18c455d8-9840-4000-82af-67024a9e2018", + "fid": "http://example.com", + "name": "string", + "playable": false, + "local": false, + "artistCredit": [ + { + "name": "string", + "guid": "18c455d8-9840-4000-8271-2731b97a2c01", + "mbid": "18c455d8-9840-4000-8f04-1f9dd7f16201", + "joinPhrase": "string" + } + ], + "cover": { + "guid": "18c455d8-9840-4000-85af-4178e969db01", + "mimetype": "string", + "size": 0, + "creationDate": "1970-01-01T00:00:00.000Z", + "urls": { + "source": "http://example.com", + "original": "http://example.com" + } + } + }, + "release": { + "guid": "18c455d8-9840-4000-81e9-3cc3a7567201", + "fid": "http://example.com", + "mbid": "18c455d8-9840-4000-8b86-dd1e40a7bb80", + "name": "string", + "artistCredit": [ + { + "name": "string", + "guid": "18c455d8-9840-4000-88dc-fd4cf3957201", + "mbid": "18c455d8-9840-4000-8e40-35019dd11180", + "joinPhrase": "string" + } + ], + "playable": false, + "cover": { + "guid": "18c455d8-9840-4000-831e-ea8add02c380", + "mimetype": "string", + "size": 0, + "creationDate": "1970-01-01T00:00:00.000Z", + "urls": { + "source": "http://example.com", + "original": "http://example.com" + } + } + }, + "owner": { + "fid": "http://example.com", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": false + } +} +``` + ## Availability - [ ] Admin panel From 295b0dcc3aa591e3f838043cf9fc8ce0164f9943 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 12 Dec 2023 13:28:55 +0000 Subject: [PATCH 227/371] chore(renovate): Prioritize major over minor over patch updates in develop Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2690> --- .gitlab/renovate.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitlab/renovate.json b/.gitlab/renovate.json index 9b453909a..a4e7ec774 100644 --- a/.gitlab/renovate.json +++ b/.gitlab/renovate.json @@ -25,6 +25,16 @@ "branchConcurrentLimit": 0, "prConcurrentLimit": 0 }, + { + "matchBaseBranches": ["develop"], + "matchUpdateTypes": ["major"], + "prPriority": 2 + }, + { + "matchBaseBranches": ["develop"], + "matchUpdateTypes": ["minor"], + "prPriority": 1 + }, { "matchUpdateTypes": ["major", "minor"], "matchBaseBranches": ["stable"], From 2ac4e25fcec57f8625a15fa4a051b9ea87f280a2 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Tue, 12 Dec 2023 15:07:11 +0000 Subject: [PATCH 228/371] chore(api): update dependency ipython to v8 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2693> --- api/poetry.lock | 94 +++++++++++++++++++++++++++++++++++++++------- api/pyproject.toml | 2 +- 2 files changed, 82 insertions(+), 14 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index c4f7b3498..9fa867c77 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -232,6 +232,24 @@ wrapt = [ {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -1395,6 +1413,20 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "factory-boy" version = "3.2.1" @@ -1780,13 +1812,13 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < [[package]] name = "ipython" -version = "7.34.0" +version = "8.12.3" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, + {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, + {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, ] [package.dependencies] @@ -1798,21 +1830,24 @@ jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] name = "isort" @@ -2692,6 +2727,20 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "pyasn1" version = "0.5.1" @@ -3686,6 +3735,25 @@ dev = ["build", "flake8"] doc = ["sphinx"] test = ["pytest", "pytest-cov"] +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "termcolor" version = "2.3.0" @@ -4560,4 +4628,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.12" -content-hash = "fb841fc0c0b0259bb81716fb1fde9c2c8a3822e2a13b8d7e8c1bae65e47b7ace" +content-hash = "87128042054475796861e3bad1cca050063de064ad8d42e9e8f5852530c959b3" diff --git a/api/pyproject.toml b/api/pyproject.toml index 4bbe45018..eccb4870d 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -93,7 +93,7 @@ pycountry = "22.3.5" typesense = { version = "==0.15.1", optional = true } # Dependencies pinning -ipython = "==7.34.0" +ipython = "==8.12.3" pluralizer = "==1.2.0" service-identity = "==21.1.0" unicode-slugify = "==0.1.5" From 4f9280bd2c460ff82463be9d809ca3a9d4ce2cfb Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 1 Dec 2023 20:34:10 +0100 Subject: [PATCH 229/371] ci: Run tests against python 3.12 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2660> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f8000b475..f8e14f8b1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -231,7 +231,7 @@ test_api: image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION parallel: matrix: - - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11"] + - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12"] services: - name: postgres:15-alpine command: From 0eec47e493b8158a3c8678566ebbb5d63335c982 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 1 Dec 2023 20:35:31 +0100 Subject: [PATCH 230/371] feat(api): Add support for Python 3.12 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2660> --- api/poetry.lock | 674 +++++++++++++------------- api/pyproject.toml | 2 +- changes/changelog.d/python312.feature | 1 + 3 files changed, 338 insertions(+), 339 deletions(-) create mode 100644 changes/changelog.d/python312.feature diff --git a/api/poetry.lock b/api/poetry.lock index 9fa867c77..c466613e5 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1491,48 +1491,48 @@ pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "frozendict" -version = "2.3.8" +version = "2.3.10" description = "A simple immutable dictionary" optional = false python-versions = ">=3.6" files = [ - {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, - {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, - {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, - {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, - {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, - {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, - {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, - {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, - {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, - {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, - {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, - {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, - {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, + {file = "frozendict-2.3.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df2d2afa5af41bfa09dc9d5a8e6d73ae39b677a8572200c65a5ea353387ffccd"}, + {file = "frozendict-2.3.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b10df7f5d8637b1af319434f99dc25ca6f5537e28b293e4c405ebfb4bf9581fa"}, + {file = "frozendict-2.3.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da22a3e873f365f97445c49afc1e6d5198ed6d172f3efaf0e9fde0edcca3cea1"}, + {file = "frozendict-2.3.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89218738e2122b50bf8a0444083dbe2de280402e9c2ef0929c0db0f93ff11271"}, + {file = "frozendict-2.3.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aa11add43a71fd47523fbd011be5cc011df79e25ec0b0339fc0d728623aaa7ec"}, + {file = "frozendict-2.3.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:af267bd6d98cbc10580105dc76f28f7156856fa48a5bbcadd40edb85f93657ae"}, + {file = "frozendict-2.3.10-cp310-cp310-win_amd64.whl", hash = "sha256:c112024df64b8926a315d7e36b860967fcad8aae0c592b9f117589391373e893"}, + {file = "frozendict-2.3.10-cp310-cp310-win_arm64.whl", hash = "sha256:a0065db2bc76628853dd620bd08c1ca44ad0b711e92e89b4156493153add6f9d"}, + {file = "frozendict-2.3.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:93634af5a6d71762aebc7d78bdce92890b7e612588faf887c9eaf752dc7ccdb1"}, + {file = "frozendict-2.3.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b4d05e231dc1a2ec874f847fd7348cbee469555468efb875a89994ecde31a81"}, + {file = "frozendict-2.3.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d40d0644f19365fc6cc428db31c0f113fa550bd15920262f9d77ccf6556d87b"}, + {file = "frozendict-2.3.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:12b40526219f9583b30690011288bca4d6cce8724cda96b3c3ab08b67c5a7f09"}, + {file = "frozendict-2.3.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6b552fffeba8e41b43ce10cc0fc467e048a7c9a71ae3241057510342132555b9"}, + {file = "frozendict-2.3.10-cp36-cp36m-win_amd64.whl", hash = "sha256:07208e4718cb70aa259ac886c19b96a4aad1cf00e9199f211746f738951bbf7c"}, + {file = "frozendict-2.3.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e8bec6d11f7254e405290cb1b081caffa0c18b6aa779130da9a546349c56be83"}, + {file = "frozendict-2.3.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b089c7e8c95d8b043e82e7da26e165f4220d7310efaad5e94445db7e3bc8321e"}, + {file = "frozendict-2.3.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08a5829d708657c9d5ad58f4a7e4baa73a3d57290f9613bdd909d481fc203a3a"}, + {file = "frozendict-2.3.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c015852dacf144dbeadf203673d8c714f788fcc2b810a36504994b3c4f5a436"}, + {file = "frozendict-2.3.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bb9f15a5ed924be2b1cb3654b7ea3b7bae265ff39e2b5784d42bd4a6e1353e45"}, + {file = "frozendict-2.3.10-cp37-cp37m-win_amd64.whl", hash = "sha256:809bb9c6c657bded925710a309bb2a2350bdbfdc9371df427f1a93cb8ab7ec3e"}, + {file = "frozendict-2.3.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ff7a9cca3a3a1e584349e859d028388bd96a5475f76721471b73797472c6db17"}, + {file = "frozendict-2.3.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cdd496933ddb428f3854bea9ffdce0245bb27c27909f663ad396409fb4dffb5"}, + {file = "frozendict-2.3.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9df392b655fadaa0174c1923e6205b30ad1ccca248e8e146e63a8147a355ee01"}, + {file = "frozendict-2.3.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7901828700f36fe12486705afe7afc5583434390c8f69b5419de1b6c566fb00d"}, + {file = "frozendict-2.3.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c9aa28ce48d848ee520409533fd0254de4caf025c5cf1b9f27c98c1dd8cf90aa"}, + {file = "frozendict-2.3.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0856af4f5b4288b2270e0b74078fad5cbaf4f799326b82183865f6f367008b2c"}, + {file = "frozendict-2.3.10-cp38-cp38-win_amd64.whl", hash = "sha256:ac41c671ff33cbefc0f06c4b2a630d18ab59f5256f45f57d5632252ae4a8c07a"}, + {file = "frozendict-2.3.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:893205dc5a4e5c4b24e5822ceb21ef14fed8ca4afae7ac688e2fc24294c85225"}, + {file = "frozendict-2.3.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e78c5ac5d71f3b73f07ff9d9e3cc32dfbf7954f2c57c2d0e1fe8f1600e980b40"}, + {file = "frozendict-2.3.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c4ca4cc42bc30b20476616411d4b49aae6084760b99251f1cbdfed879ae53ea"}, + {file = "frozendict-2.3.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c865962216f7cfd6dac8693f4de431a9d98a7225185ff23613ecd10c42423adc"}, + {file = "frozendict-2.3.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99b2f47b292cc4d68f6679918e8e9e6dc5e816924d8369d07018be56b93fb20f"}, + {file = "frozendict-2.3.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e7abf4539b73c8e5680dd2fdbd19ca4fc3e2b2f3666f80f022217839bb859fd"}, + {file = "frozendict-2.3.10-cp39-cp39-win_amd64.whl", hash = "sha256:901e774629fc63f84d24b5e46b59de1eed22392ee98b7f92e694a127d541edac"}, + {file = "frozendict-2.3.10-cp39-cp39-win_arm64.whl", hash = "sha256:6f8681c0ffe92be9aba40c9b9960c48f0ae7f6ea585af2b93fc9542cc3865969"}, + {file = "frozendict-2.3.10-py3-none-any.whl", hash = "sha256:66cded65f144393b4226bda9fe9ac2f42451d2d603e8a486015744bb566a7008"}, + {file = "frozendict-2.3.10.tar.gz", hash = "sha256:aadc83510ce82751a0bb3575231f778bc37cbb373f5f05a52b888e26cbb92f79"}, ] [[package]] @@ -1711,31 +1711,31 @@ idna = ">=2.5" [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, + {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] @@ -1851,21 +1851,15 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa [[package]] name = "isort" -version = "5.12.0" +version = "5.13.1" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.1-py3-none-any.whl", hash = "sha256:56a51732c25f94ca96f6721be206dd96a95f42950502eb26c1015d333bc6edb7"}, + {file = "isort-5.13.1.tar.gz", hash = "sha256:aaed790b463e8703fb1eddb831dfa8e8616bacde2c083bd557ef73c8189b7263"}, ] -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - [[package]] name = "jedi" version = "0.19.1" @@ -1921,13 +1915,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.11.1" +version = "2023.11.2" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.11.1-py3-none-any.whl", hash = "sha256:f596778ab612b3fd29f72ea0d990393d0540a5aab18bf0407a46632eab540779"}, - {file = "jsonschema_specifications-2023.11.1.tar.gz", hash = "sha256:c9b234904ffe02f079bf91b14d79987faa685fd4b39c377a0996954c0090b9ca"}, + {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, + {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, ] [package.dependencies] @@ -2428,13 +2422,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] @@ -2450,13 +2444,13 @@ files = [ [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -2560,13 +2554,13 @@ files = [ [[package]] name = "platformdirs" -version = "4.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] [package.extras] @@ -3276,13 +3270,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "referencing" -version = "0.31.0" +version = "0.32.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.31.0-py3-none-any.whl", hash = "sha256:381b11e53dd93babb55696c71cf42aef2d36b8a150c49bf0bc301e36d536c882"}, - {file = "referencing-0.31.0.tar.gz", hash = "sha256:cc28f2c88fbe7b961a7817a0abc034c09a1e36358f82fedb4ffdf29a25398863"}, + {file = "referencing-0.32.0-py3-none-any.whl", hash = "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99"}, + {file = "referencing-0.32.0.tar.gz", hash = "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161"}, ] [package.dependencies] @@ -3461,110 +3455,110 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rpds-py" -version = "0.13.1" +version = "0.13.2" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.13.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:83feb0f682d75a09ddc11aa37ba5c07dd9b824b22915207f6176ea458474ff75"}, - {file = "rpds_py-0.13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa84bbe22ffa108f91631935c28a623001e335d66e393438258501e618fb0dde"}, - {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e04f8c76b8d5c70695b4e8f1d0b391d8ef91df00ef488c6c1ffb910176459bc6"}, - {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:032c242a595629aacace44128f9795110513ad27217b091e834edec2fb09e800"}, - {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91276caef95556faeb4b8f09fe4439670d3d6206fee78d47ddb6e6de837f0b4d"}, - {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d22f2cb82e0b40e427a74a93c9a4231335bbc548aed79955dde0b64ea7f88146"}, - {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c9e2794329ef070844ff9bfc012004aeddc0468dc26970953709723f76c8a5"}, - {file = "rpds_py-0.13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c797ea56f36c6f248656f0223b11307fdf4a1886f3555eba371f34152b07677f"}, - {file = "rpds_py-0.13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:82dbcd6463e580bcfb7561cece35046aaabeac5a9ddb775020160b14e6c58a5d"}, - {file = "rpds_py-0.13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:736817dbbbd030a69a1faf5413a319976c9c8ba8cdcfa98c022d3b6b2e01eca6"}, - {file = "rpds_py-0.13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f36a1e80ef4ed1996445698fd91e0d3e54738bf597c9995118b92da537d7a28"}, - {file = "rpds_py-0.13.1-cp310-none-win32.whl", hash = "sha256:4f13d3f6585bd07657a603780e99beda96a36c86acaba841f131e81393958336"}, - {file = "rpds_py-0.13.1-cp310-none-win_amd64.whl", hash = "sha256:545e94c84575057d3d5c62634611858dac859702b1519b6ffc58eca7fb1adfcf"}, - {file = "rpds_py-0.13.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6bfe72b249264cc1ff2f3629be240d7d2fdc778d9d298087cdec8524c91cd11f"}, - {file = "rpds_py-0.13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edc91c50e17f5cd945d821f0f1af830522dba0c10267c3aab186dc3dbaab8def"}, - {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2eca04a365be380ca1f8fa48b334462e19e3382c0bb7386444d8ca43aa01c481"}, - {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e3ac5b602fea378243f993d8b707189f9061e55ebb4e56cb9fdef8166060f28"}, - {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfb5d2ab183c0efe5e7b8917e4eaa2e837aacafad8a69b89aa6bc81550eed857"}, - {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d9793d46d3e6522ae58e9321032827c9c0df1e56cbe5d3de965facb311aed6aa"}, - {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cd935c0220d012a27c20135c140f9cdcbc6249d5954345c81bfb714071b985c"}, - {file = "rpds_py-0.13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37b08df45f02ff1866043b95096cbe91ac99de05936dd09d6611987a82a3306a"}, - {file = "rpds_py-0.13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad666a904212aa9a6c77da7dce9d5170008cda76b7776e6731928b3f8a0d40fa"}, - {file = "rpds_py-0.13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8a6ad8429340e0a4de89353447c6441329def3632e7b2293a7d6e873217d3c2b"}, - {file = "rpds_py-0.13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7c40851b659d958c5245c1236e34f0d065cc53dca8d978b49a032c8e0adfda6e"}, - {file = "rpds_py-0.13.1-cp311-none-win32.whl", hash = "sha256:4145172ab59b6c27695db6d78d040795f635cba732cead19c78cede74800949a"}, - {file = "rpds_py-0.13.1-cp311-none-win_amd64.whl", hash = "sha256:46a07a258bda12270de02b34c4884f200f864bba3dcd6e3a37fef36a168b859d"}, - {file = "rpds_py-0.13.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:ba4432301ad7eeb1b00848cf46fae0e5fecfd18a8cb5fdcf856c67985f79ecc7"}, - {file = "rpds_py-0.13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d22e0660de24bd8e9ac82f4230a22a5fe4e397265709289d61d5fb333839ba50"}, - {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76a8374b294e4ccb39ccaf11d39a0537ed107534139c00b4393ca3b542cc66e5"}, - {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d152ec7bb431040af2500e01436c9aa0d993f243346f0594a15755016bf0be1"}, - {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74a2044b870df7c9360bb3ce7e12f9ddf8e72e49cd3a353a1528cbf166ad2383"}, - {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:960e7e460fda2d0af18c75585bbe0c99f90b8f09963844618a621b804f8c3abe"}, - {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37f79f4f1f06cc96151f4a187528c3fd4a7e1065538a4af9eb68c642365957f7"}, - {file = "rpds_py-0.13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd4ea56c9542ad0091dfdef3e8572ae7a746e1e91eb56c9e08b8d0808b40f1d1"}, - {file = "rpds_py-0.13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0290712eb5603a725769b5d857f7cf15cf6ca93dda3128065bbafe6fdb709beb"}, - {file = "rpds_py-0.13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0b70c1f800059c92479dc94dda41288fd6607f741f9b1b8f89a21a86428f6383"}, - {file = "rpds_py-0.13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3dd5fb7737224e1497c886fb3ca681c15d9c00c76171f53b3c3cc8d16ccfa7fb"}, - {file = "rpds_py-0.13.1-cp312-none-win32.whl", hash = "sha256:74be3b215a5695690a0f1a9f68b1d1c93f8caad52e23242fcb8ba56aaf060281"}, - {file = "rpds_py-0.13.1-cp312-none-win_amd64.whl", hash = "sha256:f47eef55297799956464efc00c74ae55c48a7b68236856d56183fe1ddf866205"}, - {file = "rpds_py-0.13.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e4a45ba34f904062c63049a760790c6a2fa7a4cc4bd160d8af243b12371aaa05"}, - {file = "rpds_py-0.13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:20147996376be452cd82cd6c17701daba69a849dc143270fa10fe067bb34562a"}, - {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b9535aa22ab023704cfc6533e968f7e420affe802d85e956d8a7b4c0b0b5ea"}, - {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d4fa1eeb9bea6d9b64ac91ec51ee94cc4fc744955df5be393e1c923c920db2b0"}, - {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b2415d5a7b7ee96aa3a54d4775c1fec140476a17ee12353806297e900eaeddc"}, - {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:577d40a72550eac1386b77b43836151cb61ff6700adacda2ad4d883ca5a0b6f2"}, - {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af2d1648eb625a460eee07d3e1ea3a4a6e84a1fb3a107f6a8e95ac19f7dcce67"}, - {file = "rpds_py-0.13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b769396eb358d6b55dbf78f3f7ca631ca1b2fe02136faad5af74f0111b4b6b7"}, - {file = "rpds_py-0.13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:249c8e0055ca597707d71c5ad85fd2a1c8fdb99386a8c6c257e1b47b67a9bec1"}, - {file = "rpds_py-0.13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:fe30ef31172bdcf946502a945faad110e8fff88c32c4bec9a593df0280e64d8a"}, - {file = "rpds_py-0.13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2647192facf63be9ed2d7a49ceb07efe01dc6cfb083bd2cc53c418437400cb99"}, - {file = "rpds_py-0.13.1-cp38-none-win32.whl", hash = "sha256:4011d5c854aa804c833331d38a2b6f6f2fe58a90c9f615afdb7aa7cf9d31f721"}, - {file = "rpds_py-0.13.1-cp38-none-win_amd64.whl", hash = "sha256:7cfae77da92a20f56cf89739a557b76e5c6edc094f6ad5c090b9e15fbbfcd1a4"}, - {file = "rpds_py-0.13.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:e9be1f7c5f9673616f875299339984da9447a40e3aea927750c843d6e5e2e029"}, - {file = "rpds_py-0.13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:839676475ac2ccd1532d36af3d10d290a2ca149b702ed464131e450a767550df"}, - {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90031658805c63fe488f8e9e7a88b260ea121ba3ee9cdabcece9c9ddb50da39"}, - {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ba9fbc5d6e36bfeb5292530321cc56c4ef3f98048647fabd8f57543c34174ec"}, - {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:08832078767545c5ee12561ce980714e1e4c6619b5b1e9a10248de60cddfa1fd"}, - {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19f5aa7f5078d35ed8e344bcba40f35bc95f9176dddb33fc4f2084e04289fa63"}, - {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80080972e1d000ad0341c7cc58b6855c80bd887675f92871221451d13a975072"}, - {file = "rpds_py-0.13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ee352691c4434eb1c01802e9daa5edcc1007ff15023a320e2693fed6a661b"}, - {file = "rpds_py-0.13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d20da6b4c7aa9ee75ad0730beaba15d65157f5beeaca54a038bb968f92bf3ce3"}, - {file = "rpds_py-0.13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:faa12a9f34671a30ea6bb027f04ec4e1fb8fa3fb3ed030893e729d4d0f3a9791"}, - {file = "rpds_py-0.13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7cf241dbb50ea71c2e628ab2a32b5bfcd36e199152fc44e5c1edb0b773f1583e"}, - {file = "rpds_py-0.13.1-cp39-none-win32.whl", hash = "sha256:dab979662da1c9fbb464e310c0b06cb5f1d174d09a462553af78f0bfb3e01920"}, - {file = "rpds_py-0.13.1-cp39-none-win_amd64.whl", hash = "sha256:a2b3c79586636f1fa69a7bd59c87c15fca80c0d34b5c003d57f2f326e5276575"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5967fa631d0ed9f8511dede08bc943a9727c949d05d1efac4ac82b2938024fb7"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8308a8d49d1354278d5c068c888a58d7158a419b2e4d87c7839ed3641498790c"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0580faeb9def6d0beb7aa666294d5604e569c4e24111ada423cf9936768d95c"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2da81c1492291c1a90987d76a47c7b2d310661bf7c93a9de0511e27b796a8b46"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c9a1dc5e898ce30e2f9c0aa57181cddd4532b22b7780549441d6429d22d3b58"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4ae6f423cb7d1c6256b7482025ace2825728f53b7ac58bcd574de6ee9d242c2"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3179e0815827cf963e634095ae5715ee73a5af61defbc8d6ca79f1bdae1d1d"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0d9f8930092558fd15c9e07198625efb698f7cc00b3dc311c83eeec2540226a8"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d1d388d2f5f5a6065cf83c54dd12112b7389095669ff395e632003ae8999c6b8"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:08b335fb0c45f0a9e2478a9ece6a1bfb00b6f4c4780f9be3cf36479c5d8dd374"}, - {file = "rpds_py-0.13.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d11afdc5992bbd7af60ed5eb519873690d921425299f51d80aa3099ed49f2bcc"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:8c1f6c8df23be165eb0cb78f305483d00c6827a191e3a38394c658d5b9c80bbd"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:528e2afaa56d815d2601b857644aeb395afe7e59212ab0659906dc29ae68d9a6"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df2af1180b8eeececf4f819d22cc0668bfadadfd038b19a90bd2fb2ee419ec6f"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88956c993a20201744282362e3fd30962a9d86dc4f1dcf2bdb31fab27821b61f"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee70ee5f4144a45a9e6169000b5b525d82673d5dab9f7587eccc92794814e7ac"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5fd099acaee2325f01281a130a39da08d885e4dedf01b84bf156ec2737d78fe"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9656a09653b18b80764647d585750df2dff8928e03a706763ab40ec8c4872acc"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ba239bb37663b2b4cd08e703e79e13321512dccd8e5f0e9451d9e53a6b8509a"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3f55ae773abd96b1de25fc5c3fb356f491bd19116f8f854ba705beffc1ddc3c5"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f4b15a163448ec79241fb2f1bc5a8ae1a4a304f7a48d948d208a2935b26bf8a5"}, - {file = "rpds_py-0.13.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1a3b2583c86bbfbf417304eeb13400ce7f8725376dc7d3efbf35dc5d7052ad48"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:f1059ca9a51c936c9a8d46fbc2c9a6b4c15ab3f13a97f1ad32f024b39666ba85"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f55601fb58f92e4f4f1d05d80c24cb77505dc42103ddfd63ddfdc51d3da46fa2"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcfd5f91b882eedf8d9601bd21261d6ce0e61a8c66a7152d1f5df08d3f643ab1"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6574f619e8734140d96c59bfa8a6a6e7a3336820ccd1bfd95ffa610673b650a2"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4b9d3f5c48bbe8d9e3758e498b3c34863f2c9b1ac57a4e6310183740e59c980"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdd6f8738e1f1d9df5b1603bb03cb30e442710e5672262b95d0f9fcb4edb0dab"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8c2bf286e5d755a075e5e97ba56b3de08cccdad6b323ab0b21cc98875176b03"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d4b390ee70ca9263b331ccfaf9819ee20e90dfd0201a295e23eb64a005dbef"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:db8d0f0ad92f74feb61c4e4a71f1d573ef37c22ef4dc19cab93e501bfdad8cbd"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2abd669a39be69cdfe145927c7eb53a875b157740bf1e2d49e9619fc6f43362e"}, - {file = "rpds_py-0.13.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c173f529666bab8e3f948b74c6d91afa22ea147e6ebae49a48229d9020a47c4"}, - {file = "rpds_py-0.13.1.tar.gz", hash = "sha256:264f3a5906c62b9df3a00ad35f6da1987d321a053895bd85f9d5c708de5c0fbf"}, + {file = "rpds_py-0.13.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d"}, + {file = "rpds_py-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1"}, + {file = "rpds_py-0.13.2-cp310-none-win32.whl", hash = "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc"}, + {file = "rpds_py-0.13.2-cp310-none-win_amd64.whl", hash = "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d"}, + {file = "rpds_py-0.13.2-cp311-none-win32.whl", hash = "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7"}, + {file = "rpds_py-0.13.2-cp311-none-win_amd64.whl", hash = "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60"}, + {file = "rpds_py-0.13.2-cp312-none-win32.whl", hash = "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d"}, + {file = "rpds_py-0.13.2-cp312-none-win_amd64.whl", hash = "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b"}, + {file = "rpds_py-0.13.2-cp38-none-win32.whl", hash = "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab"}, + {file = "rpds_py-0.13.2-cp38-none-win_amd64.whl", hash = "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468"}, + {file = "rpds_py-0.13.2-cp39-none-win32.whl", hash = "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c"}, + {file = "rpds_py-0.13.2-cp39-none-win_amd64.whl", hash = "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31"}, + {file = "rpds_py-0.13.2.tar.gz", hash = "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f"}, ] [[package]] @@ -3756,13 +3750,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "termcolor" -version = "2.3.0" +version = "2.4.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, - {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, ] [package.extras] @@ -3792,18 +3786,18 @@ files = [ [[package]] name = "traitlets" -version = "5.13.0" +version = "5.14.0" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, - {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.6.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "troi" @@ -3930,83 +3924,87 @@ requests = "*" [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.9.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] name = "ujson" -version = "5.8.0" +version = "5.9.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" files = [ - {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, - {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, - {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, - {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, - {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, - {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, - {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, - {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, - {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, - {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, - {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, - {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, - {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, + {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, + {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, + {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, + {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, + {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, + {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, + {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, + {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, + {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, + {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, + {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, ] [[package]] @@ -4453,101 +4451,101 @@ files = [ [[package]] name = "yarl" -version = "1.9.3" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32435d134414e01d937cd9d6cc56e8413a8d4741dea36af5840c7750f04d16ab"}, - {file = "yarl-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9a5211de242754b5e612557bca701f39f8b1a9408dff73c6db623f22d20f470e"}, - {file = "yarl-1.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:525cd69eff44833b01f8ef39aa33a9cc53a99ff7f9d76a6ef6a9fb758f54d0ff"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc94441bcf9cb8c59f51f23193316afefbf3ff858460cb47b5758bf66a14d130"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e36021db54b8a0475805acc1d6c4bca5d9f52c3825ad29ae2d398a9d530ddb88"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0f17d1df951336a02afc8270c03c0c6e60d1f9996fcbd43a4ce6be81de0bd9d"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5f3faeb8100a43adf3e7925d556801d14b5816a0ac9e75e22948e787feec642"}, - {file = "yarl-1.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aed37db837ecb5962469fad448aaae0f0ee94ffce2062cf2eb9aed13328b5196"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:721ee3fc292f0d069a04016ef2c3a25595d48c5b8ddc6029be46f6158d129c92"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b8bc5b87a65a4e64bc83385c05145ea901b613d0d3a434d434b55511b6ab0067"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:dd952b9c64f3b21aedd09b8fe958e4931864dba69926d8a90c90d36ac4e28c9a"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:c405d482c320a88ab53dcbd98d6d6f32ada074f2d965d6e9bf2d823158fa97de"}, - {file = "yarl-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9df9a0d4c5624790a0dea2e02e3b1b3c69aed14bcb8650e19606d9df3719e87d"}, - {file = "yarl-1.9.3-cp310-cp310-win32.whl", hash = "sha256:d34c4f80956227f2686ddea5b3585e109c2733e2d4ef12eb1b8b4e84f09a2ab6"}, - {file = "yarl-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:cf7a4e8de7f1092829caef66fd90eaf3710bc5efd322a816d5677b7664893c93"}, - {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d61a0ca95503867d4d627517bcfdc28a8468c3f1b0b06c626f30dd759d3999fd"}, - {file = "yarl-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:73cc83f918b69110813a7d95024266072d987b903a623ecae673d1e71579d566"}, - {file = "yarl-1.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d81657b23e0edb84b37167e98aefb04ae16cbc5352770057893bd222cdc6e45f"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a1a8443091c7fbc17b84a0d9f38de34b8423b459fb853e6c8cdfab0eacf613"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe34befb8c765b8ce562f0200afda3578f8abb159c76de3ab354c80b72244c41"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c757f64afe53a422e45e3e399e1e3cf82b7a2f244796ce80d8ca53e16a49b9f"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72a57b41a0920b9a220125081c1e191b88a4cdec13bf9d0649e382a822705c65"}, - {file = "yarl-1.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632c7aeb99df718765adf58eacb9acb9cbc555e075da849c1378ef4d18bf536a"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b0b8c06afcf2bac5a50b37f64efbde978b7f9dc88842ce9729c020dc71fae4ce"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1d93461e2cf76c4796355494f15ffcb50a3c198cc2d601ad8d6a96219a10c363"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4003f380dac50328c85e85416aca6985536812c082387255c35292cb4b41707e"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4d6d74a97e898c1c2df80339aa423234ad9ea2052f66366cef1e80448798c13d"}, - {file = "yarl-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b61e64b06c3640feab73fa4ff9cb64bd8182de52e5dc13038e01cfe674ebc321"}, - {file = "yarl-1.9.3-cp311-cp311-win32.whl", hash = "sha256:29beac86f33d6c7ab1d79bd0213aa7aed2d2f555386856bb3056d5fdd9dab279"}, - {file = "yarl-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:f7271d6bd8838c49ba8ae647fc06469137e1c161a7ef97d778b72904d9b68696"}, - {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:dd318e6b75ca80bff0b22b302f83a8ee41c62b8ac662ddb49f67ec97e799885d"}, - {file = "yarl-1.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4b1efb11a8acd13246ffb0bee888dd0e8eb057f8bf30112e3e21e421eb82d4a"}, - {file = "yarl-1.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c6f034386e5550b5dc8ded90b5e2ff7db21f0f5c7de37b6efc5dac046eb19c10"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd49a908cb6d387fc26acee8b7d9fcc9bbf8e1aca890c0b2fdfd706057546080"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa4643635f26052401750bd54db911b6342eb1a9ac3e74f0f8b58a25d61dfe41"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e741bd48e6a417bdfbae02e088f60018286d6c141639359fb8df017a3b69415a"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c86d0d0919952d05df880a1889a4f0aeb6868e98961c090e335671dea5c0361"}, - {file = "yarl-1.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d5434b34100b504aabae75f0622ebb85defffe7b64ad8f52b8b30ec6ef6e4b9"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79e1df60f7c2b148722fb6cafebffe1acd95fd8b5fd77795f56247edaf326752"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:44e91a669c43f03964f672c5a234ae0d7a4d49c9b85d1baa93dec28afa28ffbd"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3cfa4dbe17b2e6fca1414e9c3bcc216f6930cb18ea7646e7d0d52792ac196808"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:88d2c3cc4b2f46d1ba73d81c51ec0e486f59cc51165ea4f789677f91a303a9a7"}, - {file = "yarl-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cccdc02e46d2bd7cb5f38f8cc3d9db0d24951abd082b2f242c9e9f59c0ab2af3"}, - {file = "yarl-1.9.3-cp312-cp312-win32.whl", hash = "sha256:96758e56dceb8a70f8a5cff1e452daaeff07d1cc9f11e9b0c951330f0a2396a7"}, - {file = "yarl-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:c4472fe53ebf541113e533971bd8c32728debc4c6d8cc177f2bff31d011ec17e"}, - {file = "yarl-1.9.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:126638ab961633f0940a06e1c9d59919003ef212a15869708dcb7305f91a6732"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c99ddaddb2fbe04953b84d1651149a0d85214780e4d0ee824e610ab549d98d92"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dab30b21bd6fb17c3f4684868c7e6a9e8468078db00f599fb1c14e324b10fca"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:828235a2a169160ee73a2fcfb8a000709edf09d7511fccf203465c3d5acc59e4"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc391e3941045fd0987c77484b2799adffd08e4b6735c4ee5f054366a2e1551d"}, - {file = "yarl-1.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51382c72dd5377861b573bd55dcf680df54cea84147c8648b15ac507fbef984d"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:28a108cb92ce6cf867690a962372996ca332d8cda0210c5ad487fe996e76b8bb"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8f18a7832ff85dfcd77871fe677b169b1bc60c021978c90c3bb14f727596e0ae"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:7eaf13af79950142ab2bbb8362f8d8d935be9aaf8df1df89c86c3231e4ff238a"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:66a6dbf6ca7d2db03cc61cafe1ee6be838ce0fbc97781881a22a58a7c5efef42"}, - {file = "yarl-1.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a0a4f3aaa18580038cfa52a7183c8ffbbe7d727fe581300817efc1e96d1b0e9"}, - {file = "yarl-1.9.3-cp37-cp37m-win32.whl", hash = "sha256:946db4511b2d815979d733ac6a961f47e20a29c297be0d55b6d4b77ee4b298f6"}, - {file = "yarl-1.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2dad8166d41ebd1f76ce107cf6a31e39801aee3844a54a90af23278b072f1ccf"}, - {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bb72d2a94481e7dc7a0c522673db288f31849800d6ce2435317376a345728225"}, - {file = "yarl-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a172c3d5447b7da1680a1a2d6ecdf6f87a319d21d52729f45ec938a7006d5d8"}, - {file = "yarl-1.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2dc72e891672343b99db6d497024bf8b985537ad6c393359dc5227ef653b2f17"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8d51817cf4b8d545963ec65ff06c1b92e5765aa98831678d0e2240b6e9fd281"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53ec65f7eee8655bebb1f6f1607760d123c3c115a324b443df4f916383482a67"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cfd77e8e5cafba3fb584e0f4b935a59216f352b73d4987be3af51f43a862c403"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e73db54c967eb75037c178a54445c5a4e7461b5203b27c45ef656a81787c0c1b"}, - {file = "yarl-1.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09c19e5f4404574fcfb736efecf75844ffe8610606f3fccc35a1515b8b6712c4"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6280353940f7e5e2efaaabd686193e61351e966cc02f401761c4d87f48c89ea4"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c25ec06e4241e162f5d1f57c370f4078797ade95c9208bd0c60f484834f09c96"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7217234b10c64b52cc39a8d82550342ae2e45be34f5bff02b890b8c452eb48d7"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4ce77d289f8d40905c054b63f29851ecbfd026ef4ba5c371a158cfe6f623663e"}, - {file = "yarl-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5f74b015c99a5eac5ae589de27a1201418a5d9d460e89ccb3366015c6153e60a"}, - {file = "yarl-1.9.3-cp38-cp38-win32.whl", hash = "sha256:8a2538806be846ea25e90c28786136932ec385c7ff3bc1148e45125984783dc6"}, - {file = "yarl-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:6465d36381af057d0fab4e0f24ef0e80ba61f03fe43e6eeccbe0056e74aadc70"}, - {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2f3c8822bc8fb4a347a192dd6a28a25d7f0ea3262e826d7d4ef9cc99cd06d07e"}, - {file = "yarl-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7831566595fe88ba17ea80e4b61c0eb599f84c85acaa14bf04dd90319a45b90"}, - {file = "yarl-1.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff34cb09a332832d1cf38acd0f604c068665192c6107a439a92abfd8acf90fe2"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe8080b4f25dfc44a86bedd14bc4f9d469dfc6456e6f3c5d9077e81a5fedfba7"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8535e111a064f3bdd94c0ed443105934d6f005adad68dd13ce50a488a0ad1bf3"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d155a092bf0ebf4a9f6f3b7a650dc5d9a5bbb585ef83a52ed36ba46f55cc39d"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:778df71c8d0c8c9f1b378624b26431ca80041660d7be7c3f724b2c7a6e65d0d6"}, - {file = "yarl-1.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f9cafaf031c34d95c1528c16b2fa07b710e6056b3c4e2e34e9317072da5d1a"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ca6b66f69e30f6e180d52f14d91ac854b8119553b524e0e28d5291a724f0f423"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0e7e83f31e23c5d00ff618045ddc5e916f9e613d33c5a5823bc0b0a0feb522f"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:af52725c7c39b0ee655befbbab5b9a1b209e01bb39128dce0db226a10014aacc"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0ab5baaea8450f4a3e241ef17e3d129b2143e38a685036b075976b9c415ea3eb"}, - {file = "yarl-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d350388ba1129bc867c6af1cd17da2b197dff0d2801036d2d7d83c2d771a682"}, - {file = "yarl-1.9.3-cp39-cp39-win32.whl", hash = "sha256:e2a16ef5fa2382af83bef4a18c1b3bcb4284c4732906aa69422cf09df9c59f1f"}, - {file = "yarl-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d92d897cb4b4bf915fbeb5e604c7911021a8456f0964f3b8ebbe7f9188b9eabb"}, - {file = "yarl-1.9.3-py3-none-any.whl", hash = "sha256:271d63396460b6607b588555ea27a1a02b717ca2e3f2cf53bdde4013d7790929"}, - {file = "yarl-1.9.3.tar.gz", hash = "sha256:4a14907b597ec55740f63e52d7fee0e9ee09d5b9d57a4f399a7423268e457b57"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] @@ -4627,5 +4625,5 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" -python-versions = "^3.8,<3.12" -content-hash = "87128042054475796861e3bad1cca050063de064ad8d42e9e8f5852530c959b3" +python-versions = "^3.8,<3.13" +content-hash = "faac967756f9736b32c711b03562cef35863fa885e3d433d66345387091a345e" diff --git a/api/pyproject.toml b/api/pyproject.toml index eccb4870d..5773d3c59 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -25,7 +25,7 @@ exclude = ["tests"] funkwhale-manage = 'funkwhale_api.main:main' [tool.poetry.dependencies] -python = "^3.8,<3.12" +python = "^3.8,<3.13" # Django dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } diff --git a/changes/changelog.d/python312.feature b/changes/changelog.d/python312.feature new file mode 100644 index 000000000..045006abd --- /dev/null +++ b/changes/changelog.d/python312.feature @@ -0,0 +1 @@ +Add support for Python 3.12 From 8a6b19fb6fa4127b6da50157ecea1a01d41a1635 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 4 Dec 2023 12:52:31 +0100 Subject: [PATCH 231/371] chore(api): Update Pillow to version 10.1.0 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2660> --- api/poetry.lock | 123 +++++++++++++++++++++------------------------ api/pyproject.toml | 2 +- 2 files changed, 59 insertions(+), 66 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index c466613e5..4f8240105 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2469,76 +2469,69 @@ files = [ [[package]] name = "pillow" -version = "9.3.0" +version = "10.1.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] @@ -4626,4 +4619,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "faac967756f9736b32c711b03562cef35863fa885e3d433d66345387091a345e" +content-hash = "72f3e206a26beafca8fec60742ca21a75609007afba7f957e03ac51dc2571475" diff --git a/api/pyproject.toml b/api/pyproject.toml index 5773d3c59..7ac179bd8 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -76,7 +76,7 @@ cryptography = "==38.0.4" feedparser = "==6.0.10" musicbrainzngs = "==0.7.1" mutagen = "==1.46.0" -pillow = "==9.3.0" +pillow = "10.1.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" From afea533aeddd99f862fdf041b589c9881a94cd2b Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 4 Dec 2023 14:08:56 +0100 Subject: [PATCH 232/371] chore(api): Update aiohttp to 3.9.1 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2660> --- api/poetry.lock | 174 +++++++++++++++++++++------------------------ api/pyproject.toml | 2 +- 2 files changed, 82 insertions(+), 94 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 4f8240105..6c75fc52e 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2,111 +2,99 @@ [[package]] name = "aiohttp" -version = "3.8.6" +version = "3.9.1" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, - {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, - {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, - {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, - {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, - {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, - {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, - {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, - {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, - {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, - {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, - {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, - {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, - {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, - {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, - {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, - {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, - {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, - {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, - {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, - {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, - {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, - {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, - {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, - {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, - {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, - {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, - {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, - {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, ] [package.dependencies] aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns", "brotlicffi"] [[package]] name = "aioresponses" @@ -4619,4 +4607,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "72f3e206a26beafca8fec60742ca21a75609007afba7f957e03ac51dc2571475" +content-hash = "57cf272ec15b5b92cdfb73f76dea9179bbcb6b0f747c597ce22a40933c78dca3" diff --git a/api/pyproject.toml b/api/pyproject.toml index 7ac179bd8..e9894fa6d 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -66,7 +66,7 @@ gunicorn = "==20.1.0" uvicorn = { version = "==0.20.0", extras = ["standard"] } # Libs -aiohttp = "==3.8.6" +aiohttp = "3.9.1" arrow = "==1.2.3" backports-zoneinfo = { version = "==0.2.1", python = "<3.9" } bleach = "==5.0.1" From 731ee7c21e2a5cad7bde0b226f2230886edd2325 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 4 Dec 2023 14:31:21 +0100 Subject: [PATCH 233/371] chore(api): Update kombu to 5.3.4 and celery to 5.3.6 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2660> --- api/poetry.lock | 121 ++++++++++++++++++++++++++------------------- api/pyproject.toml | 4 +- 2 files changed, 72 insertions(+), 53 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 6c75fc52e..4d6b5891b 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -360,18 +360,21 @@ files = [ {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, ] +[package.dependencies] +tzdata = {version = "*", optional = true, markers = "extra == \"tzdata\""} + [package.extras] tzdata = ["tzdata"] [[package]] name = "billiard" -version = "3.6.4.0" +version = "4.2.0" description = "Python multiprocessing fork with improvements and bugfixes" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, + {file = "billiard-4.2.0-py3-none-any.whl", hash = "sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d"}, + {file = "billiard-4.2.0.tar.gz", hash = "sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c"}, ] [[package]] @@ -493,57 +496,59 @@ files = [ [[package]] name = "celery" -version = "5.2.7" +version = "5.3.6" description = "Distributed Task Queue." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "celery-5.2.7-py3-none-any.whl", hash = "sha256:138420c020cd58d6707e6257b6beda91fd39af7afde5d36c6334d175302c0e14"}, - {file = "celery-5.2.7.tar.gz", hash = "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d"}, + {file = "celery-5.3.6-py3-none-any.whl", hash = "sha256:9da4ea0118d232ce97dff5ed4974587fb1c0ff5c10042eb15278487cdd27d1af"}, + {file = "celery-5.3.6.tar.gz", hash = "sha256:870cc71d737c0200c397290d730344cc991d13a057534353d124c9380267aab9"}, ] [package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=8.0.3,<9.0" -click-didyoumean = ">=0.0.3" +"backports.zoneinfo" = {version = ">=0.2.1", markers = "python_version < \"3.9\""} +billiard = ">=4.2.0,<5.0" +click = ">=8.1.2,<9.0" +click-didyoumean = ">=0.3.0" click-plugins = ">=1.1.1" click-repl = ">=0.2.0" -kombu = ">=5.2.3,<6.0" -pytz = ">=2021.3" -vine = ">=5.0.0,<6.0" +kombu = ">=5.3.4,<6.0" +python-dateutil = ">=2.8.2" +tzdata = ">=2022.7" +vine = ">=5.1.0,<6.0" [package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.9.0)"] +arangodb = ["pyArango (>=2.0.2)"] +auth = ["cryptography (==41.0.5)"] +azureblockblob = ["azure-storage-blob (>=12.15.0)"] brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] +cassandra = ["cassandra-driver (>=3.25.0,<4)"] +consul = ["python-consul2 (==0.1.5)"] +cosmosdbsql = ["pydocumentdb (==2.3.5)"] couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] +couchdb = ["pycouchdb (==1.14.2)"] +django = ["Django (>=2.2.28)"] +dynamodb = ["boto3 (>=1.26.143)"] +elasticsearch = ["elastic-transport (<=8.10.0)", "elasticsearch (<=8.11.0)"] eventlet = ["eventlet (>=0.32.0)"] gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.11.1)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -s3 = ["boto3 (>=1.9.125)"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +memcache = ["pylibmc (==1.6.3)"] +mongodb = ["pymongo[srv] (>=4.0.2)"] +msgpack = ["msgpack (==1.0.7)"] +pymemcache = ["python-memcached (==1.59)"] +pyro = ["pyro4 (==4.82)"] +pytest = ["pytest-celery (==0.0.0)"] +redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] +s3 = ["boto3 (>=1.26.143)"] slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["kombu[sqs]"] +solar = ["ephem (==4.1.5)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.0)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] +zstd = ["zstandard (==0.22.0)"] [[package]] name = "certifi" @@ -1932,34 +1937,37 @@ deprecated = "*" [[package]] name = "kombu" -version = "5.2.4" +version = "5.3.4" description = "Messaging library for Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, - {file = "kombu-5.2.4.tar.gz", hash = "sha256:37cee3ee725f94ea8bb173eaab7c1760203ea53bbebae226328600f9d2799610"}, + {file = "kombu-5.3.4-py3-none-any.whl", hash = "sha256:63bb093fc9bb80cfb3a0972336a5cec1fa7ac5f9ef7e8237c6bf8dda9469313e"}, + {file = "kombu-5.3.4.tar.gz", hash = "sha256:0bb2e278644d11dea6272c17974a3dbb9688a949f3bb60aeb5b791329c44fadc"}, ] [package.dependencies] -amqp = ">=5.0.9,<6.0.0" +amqp = ">=5.1.1,<6.0.0" +"backports.zoneinfo" = {version = ">=0.2.1", extras = ["tzdata"], markers = "python_version < \"3.9\""} +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} vine = "*" [package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] +azureservicebus = ["azure-servicebus (>=7.10.0)"] +azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] +confluentkafka = ["confluent-kafka (>=2.2.0)"] +consul = ["python-consul2"] librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (>=3.3.0,<3.12.1)"] +mongodb = ["pymongo (>=4.1.1)"] msgpack = ["msgpack"] pyro = ["pyro4"] qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] +redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] +zookeeper = ["kazoo (>=2.8.0)"] [[package]] name = "lazy-object-proxy" @@ -3914,6 +3922,17 @@ files = [ {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + [[package]] name = "ujson" version = "5.9.0" @@ -4607,4 +4626,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "57cf272ec15b5b92cdfb73f76dea9179bbcb6b0f747c597ce22a40933c78dca3" +content-hash = "04e7cf8d5650e1679527cf5884cd1fcfb8412ea9fcac26016ebf0ef436208d07" diff --git a/api/pyproject.toml b/api/pyproject.toml index e9894fa6d..982de1d27 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -58,8 +58,8 @@ channels = { extras = ["daphne"], version = "==4.0.0" } channels-redis = "==4.1.0" # Celery -kombu = "==5.2.4" -celery = "==5.2.7" +kombu = "5.3.4" +celery = "5.3.6" # Deployment gunicorn = "==20.1.0" From 22084cbca743446d4cfad5170ef952dea8712b32 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Thu, 14 Dec 2023 13:12:14 +0000 Subject: [PATCH 234/371] Translated using Weblate (French) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/fr/ --- front/src/locales/fr_FR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index be940ba5b..684b0f4d7 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -878,7 +878,7 @@ }, "link": { "managePlugins": "GĆ©rer les greffons", - "newApp": "CrĆ©er une nouvelle application" + "newApp": "Enregistrer une nouvelle application" }, "message": { "confirmDelete": "Votre demande de suppression a Ć©tĆ© envoyĆ©e, votre compte et le contenu associĆ© sera supprimĆ© sous peu", From 5693d0f86df3d656445bf847e1b7ab4e79e5b1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= <correoxm@disroot.org> Date: Sat, 16 Dec 2023 15:33:20 +0000 Subject: [PATCH 235/371] Translated using Weblate (Galician) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/gl/ --- front/src/locales/gl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index dba46186b..ef7084d71 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -4392,7 +4392,7 @@ }, "meta": { "failedTracks": "CanciĆ³ns que fallaron: {tracks}", - "lastUpdate": "ƚltima actualizaciĆ³n: ", + "lastUpdate": "ƚltima actualizaciĆ³n:", "tracks": "{ n } canciĆ³n | { n } canciĆ³ns" }, "modal": { From de60ca730961d8848875a49f8b23481cea40c7a7 Mon Sep 17 00:00:00 2001 From: mittwerk <mittwerk3@gmail.com> Date: Sat, 16 Dec 2023 14:24:50 +0000 Subject: [PATCH 236/371] Translated using Weblate (Russian) Currently translated at 100.0% (2182 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/ru/ --- front/src/locales/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/locales/ru.json b/front/src/locales/ru.json index 229d1b8c1..3010a518b 100644 --- a/front/src/locales/ru.json +++ b/front/src/locales/ru.json @@ -4392,7 +4392,7 @@ }, "meta": { "failedTracks": "ŠžŃˆŠøŠ±ŠŗŠø Š² трŠµŠŗŠ°Ń…: {tracks}", - "lastUpdate": "ŠŸŠ¾ŃŠ»ŠµŠ“Š½ŠµŠµ Š¾Š±Š½Š¾Š²Š»ŠµŠ½ŠøŠµ: ", + "lastUpdate": "ŠŸŠ¾ŃŠ»ŠµŠ“Š½ŠµŠµ Š¾Š±Š½Š¾Š²Š»ŠµŠ½ŠøŠµ:", "tracks": "{ n } трŠµŠŗ | { n } трŠµŠŗŠ°" }, "modal": { From 9a5a749171f67aebab66f47452fcd0a4bcaf51f5 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 18 Dec 2023 13:34:06 +0000 Subject: [PATCH 237/371] Translated using Weblate (French) Currently translated at 3.1% (1 of 32 strings) Translation: Documentation/administrator-migration Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-migration/fr/ --- .../fr/LC_MESSAGES/administrator/migration.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/migration.po b/docs/locales/fr/LC_MESSAGES/administrator/migration.po index e46dd1f18..c463c7ed0 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/migration.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/migration.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-migration/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/migration_guide/index.md:1 msgid "Docker migration guide" -msgstr "" +msgstr "Guide de migration Docker" #: ../../administrator_documentation/migration_guide/index.md:3 msgid "" @@ -159,4 +162,3 @@ msgid "" "Once you have imported your database and run migrations, you can start " "all containers." msgstr "" - From bc573e47bc3449a2e31edb174a7e3d457e20e8d6 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 18 Dec 2023 13:22:59 +0000 Subject: [PATCH 238/371] Translated using Weblate (French) Currently translated at 100.0% (7 of 7 strings) Translation: Documentation/administrator-installation-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-installation-index/fr/ --- .../administrator/installation/index.po | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po index 2c2c374f3..dba5c5096 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/administrator-installation-index/fr/>\n" @@ -17,16 +17,16 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/index.md:10 msgid "Choose your installation method" -msgstr "" +msgstr "Choisissez votre mĆ©thode dā€™installation" #: ../../administrator_documentation/installation_docs/index.md:23 msgid "Migrate your installation" -msgstr "" +msgstr "Migrez votre installation" #: ../../administrator_documentation/installation_docs/index.md:1 msgid "Install Funkwhale on your server" @@ -35,10 +35,12 @@ msgstr "Installer Funkwhale sur votre serveur" #: ../../administrator_documentation/installation_docs/index.md:3 msgid "Choose your installation method and follow the guides to set up your pod." msgstr "" +"Choisissez votre mĆ©thode dā€™installation et suivez les guides pour configurer " +"votre pod." #: ../../administrator_documentation/installation_docs/index.md:5 msgid "Funkwhale requires the following:" -msgstr "" +msgstr "Funkwhale nĆ©cessite les choses suivantesā€Æ:" #: ../../administrator_documentation/installation_docs/index.md:7 msgid "" @@ -46,9 +48,15 @@ msgid "" "subdirectory of a domain. You need to run it on a domain or a subdomain. " "For example: `https://mypod.io` or `https://funkwhale.mysite.io`." msgstr "" +"**Un domaine ou sous-domaine dĆ©diĆ©** ā€“ vous ne pouvez pas exĆ©cuter Funkwhale " +"dans un sous-chemin dā€™un domaine. Vous devez lā€™exĆ©cuter sur un domaine ou " +"sous-domaine. Par exemple : `https://monpod.io` ou `https://funkwhale.monsite" +".io`." #: ../../administrator_documentation/installation_docs/index.md:8 msgid "" "**Access to ports `80` and `443`** ā€“ Funkwhale uses these ports for " "federation." msgstr "" +"**Lā€™accĆØs aux ports `80` et `443`** ā€“ Funkwhale utilise ces ports pour la " +"fĆ©dĆ©ration." From 4677b9117d95259e070a39a3697e82a925da167e Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 18 Dec 2023 13:33:48 +0000 Subject: [PATCH 239/371] Translated using Weblate (French) Currently translated at 13.3% (8 of 60 strings) Translation: Documentation/administrator-installation-docker Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-installation-docker/fr/ --- .../fr/LC_MESSAGES/administrator/installation/docker.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po index 3283a86b0..16cdef293 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/administrator-installation-docker/fr/>\n" @@ -17,12 +17,12 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/docker.md:1 msgid "Install Funkwhale using Docker" -msgstr "" +msgstr "Installer Funkwhale en utilisant Doker" #: ../../administrator_documentation/installation_docs/docker.md:3 msgid "" From b6bcc88287d6e53b8935ee351b4c39377e6df785 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 18 Dec 2023 13:22:50 +0000 Subject: [PATCH 240/371] Translated using Weblate (French) Currently translated at 11.1% (1 of 9 strings) Translation: Documentation/administrator-upgrade-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/administrator-upgrade-index/fr/ --- .../fr/LC_MESSAGES/administrator/upgrade/index.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po index 30b4511e5..8cb522caa 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/upgrade_docs/index.md:11 @@ -35,7 +38,7 @@ msgstr "" #: ../../administrator_documentation/upgrade_docs/index.md:21 msgid "Choose your installation method" -msgstr "" +msgstr "Choisissez votre mĆ©thode dā€™installation" #: ../../administrator_documentation/upgrade_docs/index.md:1 msgid "Upgrade your Funkwhale instance" @@ -59,4 +62,3 @@ msgid "" "Be sure to check the changelog for any specific instructions relating to " "upgrades." msgstr "" - From 03e9be77f976a5d6eb21b9a14c797987cc263d52 Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 18 Dec 2023 13:35:05 +0000 Subject: [PATCH 241/371] Translated using Weblate (French) Currently translated at 100.0% (4 of 4 strings) Translation: Documentation/user-subsonic-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-subsonic-index/fr/ --- .../fr/LC_MESSAGES/user/subsonic/index.po | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po b/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po index 3e34eba63..1d8ac00fb 100644 --- a/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po @@ -3,33 +3,39 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-subsonic-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/subsonic/index.md:9 msgid "Manage your Subsonic access" -msgstr "" +msgstr "GĆ©rer votre accĆØs Subsonic" #: ../../user_documentation/subsonic/index.md:1 msgid "Subsonic access" -msgstr "" +msgstr "AccĆØs Subsonic" #: ../../user_documentation/subsonic/index.md:4 msgid "" "{term}`Pod` admins can choose to disable access to the Subsonic API. If " "the Subsonic password option isn't available, contact your pod admin." msgstr "" +"Les administrateurs de {term}`Pod` peuvent choisir de fermer lā€™accĆØs Ć  lā€™API " +"Subsonic. Si lā€™option de mot de passe Subsonic nā€™est pas disponible, " +"veuillez contacter votre administrateur de pod." #: ../../user_documentation/subsonic/index.md:7 msgid "" @@ -38,4 +44,7 @@ msgid "" "Subsonic apps to stream your Funkwhale content. Check out the guides in " "this section to manage your Subsonic access." msgstr "" - +"Funkwhale supporte un sous-ensemble de lā€™[API Subsonic](http://www.subsonic." +"org/pages/index.jsp). Ceci vous permet dā€™utiliser des applications Subsonic " +"pour diffuser votre contenu Funkwhale. Consultez les guides dans cette " +"section pour gĆ©rer votre accĆØs Subsonic." From d112d827684531636fa69259332163e868a0079b Mon Sep 17 00:00:00 2001 From: Thomas <thovi98@gmail.com> Date: Mon, 18 Dec 2023 13:26:23 +0000 Subject: [PATCH 242/371] Translated using Weblate (French) Currently translated at 100.0% (9 of 9 strings) Translation: Documentation/user-libraries-index Translate-URL: https://translate.funkwhale.audio/projects/documentation/user-libraries-index/fr/ --- .../fr/LC_MESSAGES/user/libraries/index.po | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/index.po b/docs/locales/fr/LC_MESSAGES/user/libraries/index.po index f600bcb1c..98691ac03 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/index.po @@ -3,35 +3,38 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/index.md:11 msgid "Manage your libraries" -msgstr "" +msgstr "GĆ©rer vos audiothĆØques" #: ../../user_documentation/libraries/index.md:23 msgid "Manage library content" -msgstr "" +msgstr "GĆ©rer le contenu des audiothĆØques" #: ../../user_documentation/libraries/index.md:36 msgid "Share and follow libraries" -msgstr "" +msgstr "Partager et suivre des audiothĆØques" #: ../../user_documentation/libraries/index.md:1 msgid "Libraries" -msgstr "" +msgstr "AudiothĆØques" #: ../../user_documentation/libraries/index.md:3 msgid "" @@ -39,6 +42,10 @@ msgid "" "{term}`pod`. You can set the privacy level on libraries to control who " "can access them. Choose from the available privacy levels:" msgstr "" +"Les audiothĆØques vous permettent dā€™organiser du contenu audio que vous " +"tĆ©lĆ©versez vers votre {term}`pod`. Vous pouvez configurer le niveau de " +"confidentialitĆ© des audiothĆØques pour contrĆ“ler qui peut y accĆ©der. " +"Choisissez selon les niveaux de confidentialitĆ© disponiblesā€Æ:" #: ../../user_documentation/libraries/index.md:5 msgid "" @@ -46,22 +53,31 @@ msgid "" "to everybody who interacts with your pod. This includes users of other " "pods." msgstr "" +"**Tout le monde, Ć  travers toutes les instances** ā€“ le contenu de lā€™" +"audiothĆØque est accessible Ć  quiconque intĆ©ragit avec votre pod. Ceci inclut " +"les utilisateurs dā€™autres pods." #: ../../user_documentation/libraries/index.md:6 msgid "" "**Everyone on this instance** ā€“ the library's content is available to all" " users on your pod. This does not include users of other pods." msgstr "" +"**Tout le monde de cette instance** ā€“ le contenu de lā€™audiothĆØque est " +"accessible pour tous les utilisateurs de votre pod. Ceci nā€™inclut pas les " +"utilisateurs dā€™autres pods." #: ../../user_documentation/libraries/index.md:7 msgid "" "**Nobody except me** ā€“ the library's content is only available to you and" " people you share the library with." msgstr "" +"**Personne Ć  part moi** ā€“ le contenu des audiothĆØques nā€™est accessible que " +"par vous et les personnes avec qui vous partagez cette audiothĆØque." #: ../../user_documentation/libraries/index.md:9 msgid "" "Use libraries for private collections or freely licensed music you want " "to share." msgstr "" - +"Utilisez les audiothĆØques pour les collections privĆ©es ou pour la musique " +"avec licence libre que vous dĆ©sirez partager." From 5ce00a92304a9cb63175c786ba9f71b647dd6da8 Mon Sep 17 00:00:00 2001 From: Maksim Kliazovich <maxklezovich@gmail.com> Date: Wed, 20 Dec 2023 10:02:15 +0000 Subject: [PATCH 243/371] Added translation using Weblate (Belarusian) --- .../administrator/configuration/frontend.po | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po diff --git a/docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po b/docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po new file mode 100644 index 000000000..90f704495 --- /dev/null +++ b/docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po @@ -0,0 +1,173 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.10\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: be\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../administrator/configuration/frontend.md:1 +msgid "Customize the Funkwhale frontend" +msgstr "" + +#: ../../administrator/configuration/frontend.md:3 +msgid "You can customize the look and behavior of the Funkwhale UI using a JSON configuration file. This file enables you to make very basic changes to the Funkwhale web app." +msgstr "" + +#: ../../administrator/configuration/frontend.md:5 +msgid "Set up your custom configuration" +msgstr "" + +#: ../../administrator/configuration/frontend.md:7 +msgid "Create your configuration file" +msgstr "" + +#: ../../administrator/configuration/frontend.md:9 +msgid "To customize your Funkwhale pod, you need to serve a {file}`settings.json` file at `https://yourinstanceurl/settings.json`. Follow these steps to set up your configuration file:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:11 +msgid "SSH into your Funkwhale server." +msgstr "" + +#: ../../administrator/configuration/frontend.md:12 +msgid "Navigate to your `/srv/funkwhale` folder" +msgstr "" + +#: ../../administrator/configuration/frontend.md:18 +msgid "Create a new `custom` directory for your file." +msgstr "" + +#: ../../administrator/configuration/frontend.md:24 +msgid "Create a new config file and populate it with placeholder settings." +msgstr "" + +#: ../../administrator/configuration/frontend.md:0 +msgid "Supported parameters" +msgstr "" + +#: ../../administrator/configuration/frontend.md:41 +msgid "Parameter" +msgstr "" + +#: ../../administrator/configuration/frontend.md:42 +msgid "Data type" +msgstr "" + +#: ../../administrator/configuration/frontend.md:43 +msgid "Description" +msgstr "" + +#: ../../administrator/configuration/frontend.md:44 +msgid "Example" +msgstr "" + +#: ../../administrator/configuration/frontend.md:46 +msgid "`additionalStylesheets`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:47 +msgid "Array<URL>" +msgstr "" + +#: ../../administrator/configuration/frontend.md:48 +msgid "A list of URLs (relative or absolute) pointing to stylesheets." +msgstr "" + +#: ../../administrator/configuration/frontend.md:49 +msgid "`[\"https://test/theme.css\"]`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:51 +msgid "`defaultServerUrl`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:52 +msgid "URL" +msgstr "" + +#: ../../administrator/configuration/frontend.md:53 +msgid "The URL of the API server you want to connect the frontend to. Defaults to the current domain." +msgstr "" + +#: ../../administrator/configuration/frontend.md:54 +msgid "`\"https://api.yourdomain.com\"`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:59 +msgid "Configure your reverse proxy" +msgstr "" + +#: ../../administrator/configuration/frontend.md:61 +msgid "Once you've created your {file}`settings.json` file you need to configure your reverse proxy to serve it." +msgstr "" + +#: ../../administrator/configuration/frontend.md:0 +msgid "Nginx" +msgstr "" + +#: ../../administrator/configuration/frontend.md:69 +msgid "Add the following snippet to your {file}`/etc/nginx/sites-available/funkwhale.conf` config file:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:0 +msgid "Apache" +msgstr "" + +#: ../../administrator/configuration/frontend.md:82 +msgid "Add the following snippet to your webserver configuration:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:90 +msgid "Reload your webserver. You should be able to see the contents of your configuration file at `https://yourinstanceurl/settings.json`." +msgstr "" + +#: ../../administrator/configuration/frontend.md:92 +msgid "Add a custom theme" +msgstr "" + +#: ../../administrator/configuration/frontend.md:94 +msgid "You can use a custom stylesheet to theme your Funkwhale pod. To do this:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:96 +msgid "Navigate to your {file}`/srv/funkwhale/custom` directory." +msgstr "" + +#: ../../administrator/configuration/frontend.md:102 +msgid "Copy your CSS file to this directory, or create a new one." +msgstr "" + +#: ../../administrator/configuration/frontend.md:114 +msgid "Add the location of your CSS file to the `additionalStylesheets` parameter in your {file}`settings.json` file." +msgstr "" + +#: ../../administrator/configuration/frontend.md:127 +msgid "Add the whole {file}`custom` dir to your webserver configuration." +msgstr "" + +#: ../../administrator/configuration/frontend.md:135 +msgid "Add the following to your {file}`/etc/nginx/sites-available/funkwhale.conf` file:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:148 +msgid "Add the following to your webserver configuration file." +msgstr "" + +#: ../../administrator/configuration/frontend.md:162 +msgid "Restart your webserver." +msgstr "" + +#: ../../administrator/configuration/frontend.md:164 +msgid "Refresh your Funkwhale app. The background should now be red." +msgstr "" From de41545ab31fddc086513285e24f1f3709cfd767 Mon Sep 17 00:00:00 2001 From: Bruno-Van-den-Bosch <brunovandenbosch1997@gmail.com> Date: Fri, 29 Dec 2023 17:28:42 +0000 Subject: [PATCH 244/371] Translated using Weblate (Dutch) Currently translated at 99.6% (2174 of 2182 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/nl/ --- front/src/locales/nl.json | 130 +++++++++++++++++++++++++++++++++----- 1 file changed, 113 insertions(+), 17 deletions(-) diff --git a/front/src/locales/nl.json b/front/src/locales/nl.json index a4a385a72..5a48a3193 100644 --- a/front/src/locales/nl.json +++ b/front/src/locales/nl.json @@ -109,6 +109,9 @@ "statistics": "Statistieken", "welcome": "Welkom bij { podName }!" }, + "help": { + "registrationsClosed": "Registraties zijn gesloten in deze pod. Je kan je registreren in een andere pod via de link hieronder." + }, "link": { "findOtherPod": "Zoek een andere pod", "funkwhale": "Bezoek funkwhale.audio", @@ -165,9 +168,11 @@ "duration": "Duur", "enterFullscreen": "Volledig scherm openen", "exitFullscreen": "Volledig scherm sluiten", + "favorite": "Favoriete nummer", "next": "Volgend nummer", "pause": "Pauseer", "play": "Afspelen", + "populatingRadio": "Een radionummer aan het ophalenā€¦", "previous": "Vorig nummer", "queue": "Wachtrij", "remove": "Verwijderen", @@ -178,10 +183,15 @@ }, "message": { "automaticPlay": "Het volgende nummer zal automatisch worden afgespeeld over een paar secondenā€¦", - "radio": "Nieuwe nummers worden hier automatisch toegevoegd." + "radio": "Nieuwe nummers worden hier automatisch toegevoegd.", + "webglUnsupported": "Uw browser ondersteunt WebGL2 niet." }, "meta": { - "queuePosition": "Nummer { index } van { length }" + "end": "Einde", + "queuePosition": "Nummer { index } van { length }", + "startTime": "00:00", + "unknownAlbum": "Onbekend Album", + "unknownArtist": "Onbekende artiest" }, "warning": { "connectivity": "Je hebt wellicht een connectiviteitsprobleem." @@ -206,6 +216,7 @@ "label": { "fediverse": { "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}gebruiker{'@'}voorbeeld.com", "title": "Abonneren op een podcast beheerd op de Fediverse" }, "rss": { @@ -237,6 +248,7 @@ "url": "Server-URL" }, "message": { + "currentConnection": "U bent nu verbonden met { 0 }. Als je doorgaat wordt je verbinding verbroken met je huidige instance en je lokale data zal worden verwijderd.", "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" } }, @@ -290,6 +302,7 @@ "language": "Taal", "main": "Hoofdmenu", "play": "Speel dit nummer", + "reports": "In afwachting van beoordelingsrapporten", "theme": "Thema" }, "link": { @@ -309,6 +322,7 @@ "radios": "Radio's", "search": "Zoeken", "settings": "Instellingen", + "switchInstance": "Verander van server", "users": "Gebruikers" } }, @@ -504,7 +518,17 @@ "unmute": "Ontdempen" }, "meta": { - "position": "{ index } van { length }" + "position": "{ index } van { length }", + "unknownAlbum": "Onbekend album", + "unknownArtist": "Onbekende artiest" + } + }, + "PlayerControls": { + "labels": { + "next": "Volgend nummer", + "pause": "Pauze", + "play": "Afspelen", + "previous": "Vorig nummer" } }, "Search": { @@ -655,6 +679,7 @@ }, "header": { "appDetails": "Applicatie-details", + "appSecretWarning": "Bewaar een kopie van deze token op een veilige plek.", "editApp": "Bewerk applicatie" }, "help": { @@ -668,6 +693,9 @@ "link": { "settings": "Terug naar instellingen" }, + "message": { + "appSecretWarning": "Het is niet mogelijk om het opnieuw te zien nadat je dit scherm hebt gesloten." + }, "title": "Bewerk applicatie" }, "ApplicationForm": { @@ -686,6 +714,7 @@ "redirectUri": "Redirect URI", "scopes": { "description": "Het aanvinken van de bovenliggende \"Lees\"- of \"Schrijf\"-scopes impliceert toegang tot alle corresponderende kindscopes.", + "label": "Reikwijdte", "read": { "description": "Alleen-lezen toegang tot gebruikersgegevens", "label": "Lezen" @@ -745,6 +774,9 @@ "createAccount": "CreĆ«er een account", "resetPassword": "Wachtwoord opnieuw instellen" }, + "message": { + "redirect": "Je wordt geleid naar {domain} om je te authenticeren" + }, "placeholder": { "username": "Voer je gebruikersnaam of e-mailadres in" } @@ -916,6 +948,7 @@ }, "label": { "email": "E-mailadres", + "invitation": "Uitnodigingscode", "password": "Wachtwoord", "username": "Gebruikersnaam" }, @@ -1238,6 +1271,11 @@ "failure": "Fout tijdens bijwerken van de beschrijving" } }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, "UserMenu": { "label": { "language": "Taal", @@ -1274,6 +1312,7 @@ "link": { "about": "Over", "chat": "Chatruimte", + "docs": "Documentatie", "forum": "Forum", "git": "Issuetracker", "login": "Inloggen", @@ -1393,7 +1432,8 @@ "meta": { "episodes": "{ n } aflevering | { n } afleveringen", "tracks": "{ n } nummer | { n } nummers" - } + }, + "title": "Album" }, "AlbumDetail": { "description": { @@ -1642,6 +1682,9 @@ "import": "Resultaten van je import:", "previousImport": "Resultaten van je vorige import:" }, + "empty": { + "noFiles": "0" + }, "header": { "failure": "Fout bij het importeren", "local": "Upload muziek van je local storage", @@ -1659,6 +1702,7 @@ "uploading": "Bezig met uploaden" }, "message": { + "listener": "De pagina vraagt je om te bevestigen dat je weg wilt gaan - data die je hebt ingevoerd wordt misschien niet behouden.", "local": { "copyright": "Je uploadt geen content waarop copyright berust. Anders overtreed je misschien de wet", "format": "De muziekbestanden die je uploadt, hebben het OGG, Flac, MP3 of AIFF formaat", @@ -1674,6 +1718,7 @@ "size": "Grootte", "status": "Status" }, + "progress": "{percent}%", "status": { "pending": "In behandeling", "uploaded": "GeĆ¼pload", @@ -1790,7 +1835,8 @@ "Radios": { "button": { "add": "Maak een radiostation", - "create": "Maak je eigen radiostation" + "create": "Maak je eigen radiostation", + "search": "Zoek" }, "empty": { "noResults": "Geen resultaten gevonden voor je zoekopdracht" @@ -1863,6 +1909,10 @@ "header": "Embed dit nummer op je website" } }, + "subtitle": { + "with-uploader": "Opgeladen door {0} op {1}", + "without-uploader": "Opgeladen op {0}" + }, "title": "Nummer" }, "TrackDetail": { @@ -1892,7 +1942,8 @@ }, "track": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{bitrate}/s" }, "codec": "Codec", "downloads": "Downloads", @@ -1954,6 +2005,7 @@ "Filter": { "cancelButton": "Annuleren", "excludeLabel": "Uitsluiten", + "matchingTracks": "0 nummers komen overeen met de filter | {n} nummer komt overeen met de filter | {n} nummers komen overeen met de filter", "matchingTracksModalHeader": "Nummers volgens filter", "removeButton": "Verwijderen" } @@ -2087,6 +2139,7 @@ }, "EditsCardList": { "label": { + "search": "Zoeken", "status": "Status" }, "option": { @@ -2432,7 +2485,7 @@ } }, "tooltip": { - "blockAll": "Alles van dit account of deze domeinnaam blokkeren. Dit voorkomt elke interactie en verwijdert alle gerelateerde gegevens (uploads, bibliotheken, gevolgde accounts, enz.)", + "blockAll": "Alles van dit account of deze domeinnaam blokkeren. Dit voorkomt elke interactie en verwijdert alle gerelateerde media (uploads, bibliotheken, gevolgde accounts, enz.)", "isActive": "Gebruik deze instelling om tijdelijk het beleid in en uit te schakelen zonder het helemaal te verwijderen.", "rejectMedia": "Geen mediabestanden (audio, albumhoes, profielfotoā€¦) downloaden van dit account of domein. Hiermee wordt ook bestaande content verwijderd.", "silenceActivity": "Verberg account- of domeininhoud, behalve voor volgers.", @@ -2559,6 +2612,7 @@ "internalNotes": "Interne notities", "pending": "In behandeling", "refused": "Geweigerd", + "resolutionDate": "Beslissingsdatum", "status": "Status" } } @@ -2620,12 +2674,16 @@ "creationDate": "Toegevoegd", "expirationDate": "Vervaldatum", "owner": "Eigenaar", - "status": "Status" + "status": "Status", + "user": "Gebruiker" } } } }, "UsersTable": { + "label": { + "search": "Zoeken" + }, "notApplicable": "N.B.", "ordering": { "direction": { @@ -2716,6 +2774,9 @@ "message": "Gebruik dit veld om extra context te geven aan de moderator die dit rapport zal behandelen.", "modal": "Gebruik dit formulier om een rapport in te dienen voor ons moderatieteam." }, + "error": { + "nodeinfoFetch": "Kan Node Informatie niet ophalen: {error}" + }, "header": { "disabled": "Anonieme meldingen zijn uitgeschakeld, gelieve je aan te melden om een melding in te dienen.", "modal": "Wil je dit object melden?", @@ -2742,7 +2803,8 @@ "message": { "libraryAcceptFollow": "{ username } heeft je volgverzoek voor de verzameling \"{ library }\" geaccepteerd", "libraryFollow": "{ username } volgt nu je verzameling \"{ library }\"", - "libraryPendingFollow": "{ username } wil je verzameling \"{ library }\" volgen" + "libraryPendingFollow": "{ username } wil je verzameling \"{ library }\" volgen", + "libraryReject": "Je hebt {username}'s verzoek om \"{library}\" te volgen afgewezen" } } }, @@ -2821,7 +2883,8 @@ "addToPlaylist": "Toevoegen aan afspeellijst", "available": "Beschikbare afspeellijsten", "manage": "Afspeellijsten beheren", - "noResults": "Geen resultaten bij je filter" + "noResults": "Geen resultaten bij je filter", + "track": "{title}, door {artist}" }, "label": { "filter": "Filter" @@ -2860,8 +2923,14 @@ }, "radios": { "Button": { + "startArtistsRadio": "Start artist-radio", + "startPlaylistsRadio": "Start afspeellijst-radio", "startRadio": "Radio afspelen", - "stopRadio": "Radio stoppen" + "startTagsRadio": "Start label-radio", + "stopArtistsRadio": "Stop artist-radio", + "stopPlaylistsRadio": "Stop afspeellijst-radio", + "stopRadio": "Radio stoppen", + "stopTagsRadio": "stop label-radio" }, "Card": { "button": { @@ -2955,9 +3024,10 @@ } }, "filters": { - "accessedDate": "Benaderd op", - "albumTitle": "Albumnaam", - "artistName": "Artiestnaam", + "accessedDate": "Datum van raadplegen", + "albumTitle": "Naam van album", + "appliedDate": "Datum van toepassen", + "artistName": "Naam van artiest", "bitrate": "Bitrate", "creationDate": "Toegevoegd", "dateJoined": "Geregistreerd op", @@ -2966,6 +3036,7 @@ "expirationDate": "Vervaldatum", "firstSeen": "Eerst gezien-datum", "followers": "Volgers", + "handledDate": "Datum van aanpakken", "itemsCount": "Items", "lastActivity": "Laatste activiteit", "lastSeen": "Datum laatst gezien", @@ -2985,6 +3056,7 @@ "label": "Wijzigingen" }, "favorites": { + "description": "Toegang tot favorieten", "label": "Favorieten" }, "filters": { @@ -3057,6 +3129,7 @@ }, "useReport": { "account": { + "label": "Rapporteer {'@'}{username}", "typeLabel": "Account" }, "album": { @@ -3065,7 +3138,8 @@ }, "artist": { "label": "Deze artiest rapporterenā€¦", - "typeLabel": "Artiest" + "typeLabel": "Artiest", + "unknownLabel": "Onbekende artiest" }, "channel": { "label": "Dit kanaal rapporterenā€¦", @@ -3131,7 +3205,14 @@ } } }, + "useErrorHandler": { + "errorReportMessage": "Om ons te helpen begrijpen wat er is gebeurd, voeg a.u.b. een gedetailleerde beschijving toe van wat je gedaan hebt dat de fout heeft veroorzaakt.", + "errorReportTitle": "Een onverwachte fout heeft zich voorgedaan.", + "leaveFeedback": "Laat feedback achter", + "unexpectedError": "Een onverwachte fout heeft zich voorgedaan." + }, "useThemeList": { + "browserDefault": "Browser standaard", "darkTheme": "Donker", "lightTheme": "Licht" } @@ -3141,6 +3222,12 @@ "rateLimitDelay": "Je hebt te veel verzoeken ingediend en wordt tijdelijk tegengehouden. Probeer het nog eens over { delay }", "rateLimitLater": "Je hebt te veel verzoeken ingediend en wordt tijdelijk tegengehouden. Probeer het later nog eens" }, + "sentry": { + "allow": "Toelaten", + "deny": "Afwijzen", + "funkwhaleInstance": "OfficiĆ«le Glitchtip server van Funkwhale", + "title": "Om de kwaliteit van onze diensten te verbeteren, zouden we informatie willen verzamelen van de crashes die gebeuren tijdens jouw sessie." + }, "serviceWorker": { "actions": { "later": "Later", @@ -3601,7 +3688,8 @@ }, "audioContent": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{bitrate}/s" }, "cachedSize": "Gecachete grootte", "duration": "Duur", @@ -3753,7 +3841,8 @@ "value": "Fout bij het ophalen van serverinformatie" }, "software": { - "label": "Software" + "label": "Software", + "value": "{name} ({version})" }, "totalUsers": "Totaal aantal gebruikers" } @@ -4241,6 +4330,7 @@ "currentUsage": "{ current } in gebruik; maximaal { max } toegestaan", "errored": "Mislukte bestanden", "pending": "In behandeling zijnde bestanden", + "percentUsed": "{progress}%", "skipped": "Overgeslagen bestanden" }, "link": { @@ -4279,6 +4369,10 @@ "pending": "Openstaande volgverzoeken", "unfollow": "Ontvolgen" }, + "error": { + "follow": "Kan externe bibliotheek niet volgen: {error}", + "unfollow": "Kan externe bibliotheek niet ontvolgen: {error}" + }, "label": { "scanFailure": "Probleem tijdens scannen", "scanPartialSuccess": "Afgerond, maar met foutmeldingen", @@ -4496,12 +4590,14 @@ "Detail": { "button": { "confirm": "Radiostation verwijderen", + "delete": "Verwijderen", "edit": "Bewerkenā€¦" }, "empty": { "noTracks": "Er zijn nog geen nummers aan deze radio toegevoegd" }, "header": { + "radio": "Radio bevat {tracks} nummers, door ", "tracks": "Nummers" }, "modal": { From 06d135875b0897eb9e5cc72a814ad364db3c6482 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 6 Dec 2023 09:27:43 +0000 Subject: [PATCH 245/371] chore(api): Update dj-rest-auth to 5.0.2 and django-allauth to 0.55.2 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2670> --- api/config/settings/common.py | 2 +- api/funkwhale_api/common/authentication.py | 10 +- api/funkwhale_api/users/serializers.py | 6 +- api/funkwhale_api/users/views.py | 5 +- api/poetry.lock | 971 +++++++++++---------- api/pyproject.toml | 4 +- api/tests/users/test_views.py | 32 +- changes/changelog.d/allauth.enhancement | 1 + 8 files changed, 553 insertions(+), 478 deletions(-) create mode 100644 changes/changelog.d/allauth.enhancement diff --git a/api/config/settings/common.py b/api/config/settings/common.py index b7040a707..daab8f8b1 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -1193,7 +1193,7 @@ if BROWSABLE_API_ENABLED: "rest_framework.renderers.BrowsableAPIRenderer", ) -REST_AUTH_SERIALIZERS = { +REST_AUTH = { "PASSWORD_RESET_SERIALIZER": "funkwhale_api.users.serializers.PasswordResetSerializer", # noqa "PASSWORD_RESET_CONFIRM_SERIALIZER": "funkwhale_api.users.serializers.PasswordResetConfirmSerializer", # noqa } diff --git a/api/funkwhale_api/common/authentication.py b/api/funkwhale_api/common/authentication.py index 9e63d580d..3e2e1b4ee 100644 --- a/api/funkwhale_api/common/authentication.py +++ b/api/funkwhale_api/common/authentication.py @@ -1,4 +1,4 @@ -from allauth.account.utils import send_email_confirmation +from allauth.account.models import EmailAddress from django.core.cache import cache from django.utils.translation import ugettext as _ from oauth2_provider.contrib.rest_framework.authentication import ( @@ -20,9 +20,13 @@ def resend_confirmation_email(request, user): if cache.get(cache_key): return False - done = send_email_confirmation(request, user) + # We do the sending of the conformation by hand because we don't want to pass the request down + # to the email rendering, which would cause another UnverifiedEmail Exception and restarts the sending + # again and again + email = EmailAddress.objects.get_for_user(user, user.email) + email.send_confirmation() cache.set(cache_key, True, THROTTLE_DELAY) - return done + return True class OAuth2Authentication(BaseOAuth2Authentication): diff --git a/api/funkwhale_api/users/serializers.py b/api/funkwhale_api/users/serializers.py index 4a8747620..3b72c5b51 100644 --- a/api/funkwhale_api/users/serializers.py +++ b/api/funkwhale_api/users/serializers.py @@ -340,4 +340,8 @@ class UserChangeEmailSerializer(serializers.Serializer): email=request.user.email, defaults={"verified": False, "primary": True}, ) - current.change(request, self.validated_data["email"], confirm=True) + if request.user.email != self.validated_data["email"]: + current.email = self.validated_data["email"] + current.verified = False + current.save() + current.send_confirmation() diff --git a/api/funkwhale_api/users/views.py b/api/funkwhale_api/users/views.py index 0771e5d6e..d86277fde 100644 --- a/api/funkwhale_api/users/views.py +++ b/api/funkwhale_api/users/views.py @@ -1,6 +1,7 @@ import json from allauth.account.adapter import get_adapter +from allauth.account.utils import send_email_confirmation from dj_rest_auth import views as rest_auth_views from dj_rest_auth.registration import views as registration_views from django import http @@ -11,7 +12,7 @@ from rest_framework import mixins, viewsets from rest_framework.decorators import action from rest_framework.response import Response -from funkwhale_api.common import authentication, preferences, throttling +from funkwhale_api.common import preferences, throttling from . import models, serializers, tasks @@ -37,7 +38,7 @@ class RegisterView(registration_views.RegisterView): user = super().perform_create(serializer) if not user.is_active: # manual approval, we need to send the confirmation e-mail by hand - authentication.send_email_confirmation(self.request, user) + send_email_confirmation(self.request, user) if user.invitation: user.invitation.set_invited_user(user) diff --git a/api/poetry.lock b/api/poetry.lock index 4d6b5891b..ea3c681e4 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -140,19 +140,20 @@ vine = ">=5.0.0,<6.0.0" [[package]] name = "anyio" -version = "4.1.0" +version = "4.2.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.1.0-py3-none-any.whl", hash = "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f"}, - {file = "anyio-4.1.0.tar.gz", hash = "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da"}, + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] @@ -262,21 +263,22 @@ files = [ [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "autobahn" @@ -1072,21 +1074,20 @@ graph = ["objgraph (>=1.7.2)"] [[package]] name = "dj-rest-auth" -version = "2.2.8" +version = "5.0.2" description = "Authentication and Registration in Django Rest Framework" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "dj-rest-auth-2.2.8.tar.gz", hash = "sha256:9fb3492888185ede8b2064ad6803120c7b0b83ab08e2347a02e9b44282374242"}, + {file = "dj-rest-auth-5.0.2.tar.gz", hash = "sha256:aad7d912476169e9991547bf98645344d3939be2d7052098048d819524c115d9"}, ] [package.dependencies] -Django = ">=2.0" -django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extra == \"with_social\""} -djangorestframework = ">=3.7.0" +Django = ">=3.2" +djangorestframework = ">=3.13.0" [package.extras] -with-social = ["django-allauth (>=0.40.0,<0.53.0)"] +with-social = ["django-allauth (>=0.56.0,<0.58.0)"] [[package]] name = "django" @@ -1110,20 +1111,24 @@ bcrypt = ["bcrypt"] [[package]] name = "django-allauth" -version = "0.42.0" +version = "0.55.2" description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "django-allauth-0.42.0.tar.gz", hash = "sha256:f17209410b7f87da0a84639fd79d3771b596a6d3fc1a8e48ce50dabc7f441d30"}, + {file = "django-allauth-0.55.2.tar.gz", hash = "sha256:7b713c9947f1917e5c1c5a106fd6208d2c2c71435542fec6d60b01fd7bada3a8"}, ] [package.dependencies] -Django = ">=2.0" +Django = ">=3.1" +pyjwt = {version = ">=1.7", extras = ["crypto"]} python3-openid = ">=3.0.8" -requests = "*" +requests = ">=2.0.0" requests-oauthlib = ">=0.3.0" +[package.extras] +saml = ["python3-saml (>=1.15.0,<2.0.0)"] + [[package]] name = "django-auth-ldap" version = "4.1.0" @@ -1484,118 +1489,133 @@ pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "frozendict" -version = "2.3.10" +version = "2.4.0" description = "A simple immutable dictionary" optional = false python-versions = ">=3.6" files = [ - {file = "frozendict-2.3.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df2d2afa5af41bfa09dc9d5a8e6d73ae39b677a8572200c65a5ea353387ffccd"}, - {file = "frozendict-2.3.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b10df7f5d8637b1af319434f99dc25ca6f5537e28b293e4c405ebfb4bf9581fa"}, - {file = "frozendict-2.3.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da22a3e873f365f97445c49afc1e6d5198ed6d172f3efaf0e9fde0edcca3cea1"}, - {file = "frozendict-2.3.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89218738e2122b50bf8a0444083dbe2de280402e9c2ef0929c0db0f93ff11271"}, - {file = "frozendict-2.3.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aa11add43a71fd47523fbd011be5cc011df79e25ec0b0339fc0d728623aaa7ec"}, - {file = "frozendict-2.3.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:af267bd6d98cbc10580105dc76f28f7156856fa48a5bbcadd40edb85f93657ae"}, - {file = "frozendict-2.3.10-cp310-cp310-win_amd64.whl", hash = "sha256:c112024df64b8926a315d7e36b860967fcad8aae0c592b9f117589391373e893"}, - {file = "frozendict-2.3.10-cp310-cp310-win_arm64.whl", hash = "sha256:a0065db2bc76628853dd620bd08c1ca44ad0b711e92e89b4156493153add6f9d"}, - {file = "frozendict-2.3.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:93634af5a6d71762aebc7d78bdce92890b7e612588faf887c9eaf752dc7ccdb1"}, - {file = "frozendict-2.3.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b4d05e231dc1a2ec874f847fd7348cbee469555468efb875a89994ecde31a81"}, - {file = "frozendict-2.3.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d40d0644f19365fc6cc428db31c0f113fa550bd15920262f9d77ccf6556d87b"}, - {file = "frozendict-2.3.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:12b40526219f9583b30690011288bca4d6cce8724cda96b3c3ab08b67c5a7f09"}, - {file = "frozendict-2.3.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6b552fffeba8e41b43ce10cc0fc467e048a7c9a71ae3241057510342132555b9"}, - {file = "frozendict-2.3.10-cp36-cp36m-win_amd64.whl", hash = "sha256:07208e4718cb70aa259ac886c19b96a4aad1cf00e9199f211746f738951bbf7c"}, - {file = "frozendict-2.3.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e8bec6d11f7254e405290cb1b081caffa0c18b6aa779130da9a546349c56be83"}, - {file = "frozendict-2.3.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b089c7e8c95d8b043e82e7da26e165f4220d7310efaad5e94445db7e3bc8321e"}, - {file = "frozendict-2.3.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08a5829d708657c9d5ad58f4a7e4baa73a3d57290f9613bdd909d481fc203a3a"}, - {file = "frozendict-2.3.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c015852dacf144dbeadf203673d8c714f788fcc2b810a36504994b3c4f5a436"}, - {file = "frozendict-2.3.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bb9f15a5ed924be2b1cb3654b7ea3b7bae265ff39e2b5784d42bd4a6e1353e45"}, - {file = "frozendict-2.3.10-cp37-cp37m-win_amd64.whl", hash = "sha256:809bb9c6c657bded925710a309bb2a2350bdbfdc9371df427f1a93cb8ab7ec3e"}, - {file = "frozendict-2.3.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ff7a9cca3a3a1e584349e859d028388bd96a5475f76721471b73797472c6db17"}, - {file = "frozendict-2.3.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cdd496933ddb428f3854bea9ffdce0245bb27c27909f663ad396409fb4dffb5"}, - {file = "frozendict-2.3.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9df392b655fadaa0174c1923e6205b30ad1ccca248e8e146e63a8147a355ee01"}, - {file = "frozendict-2.3.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7901828700f36fe12486705afe7afc5583434390c8f69b5419de1b6c566fb00d"}, - {file = "frozendict-2.3.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c9aa28ce48d848ee520409533fd0254de4caf025c5cf1b9f27c98c1dd8cf90aa"}, - {file = "frozendict-2.3.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0856af4f5b4288b2270e0b74078fad5cbaf4f799326b82183865f6f367008b2c"}, - {file = "frozendict-2.3.10-cp38-cp38-win_amd64.whl", hash = "sha256:ac41c671ff33cbefc0f06c4b2a630d18ab59f5256f45f57d5632252ae4a8c07a"}, - {file = "frozendict-2.3.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:893205dc5a4e5c4b24e5822ceb21ef14fed8ca4afae7ac688e2fc24294c85225"}, - {file = "frozendict-2.3.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e78c5ac5d71f3b73f07ff9d9e3cc32dfbf7954f2c57c2d0e1fe8f1600e980b40"}, - {file = "frozendict-2.3.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c4ca4cc42bc30b20476616411d4b49aae6084760b99251f1cbdfed879ae53ea"}, - {file = "frozendict-2.3.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c865962216f7cfd6dac8693f4de431a9d98a7225185ff23613ecd10c42423adc"}, - {file = "frozendict-2.3.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99b2f47b292cc4d68f6679918e8e9e6dc5e816924d8369d07018be56b93fb20f"}, - {file = "frozendict-2.3.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e7abf4539b73c8e5680dd2fdbd19ca4fc3e2b2f3666f80f022217839bb859fd"}, - {file = "frozendict-2.3.10-cp39-cp39-win_amd64.whl", hash = "sha256:901e774629fc63f84d24b5e46b59de1eed22392ee98b7f92e694a127d541edac"}, - {file = "frozendict-2.3.10-cp39-cp39-win_arm64.whl", hash = "sha256:6f8681c0ffe92be9aba40c9b9960c48f0ae7f6ea585af2b93fc9542cc3865969"}, - {file = "frozendict-2.3.10-py3-none-any.whl", hash = "sha256:66cded65f144393b4226bda9fe9ac2f42451d2d603e8a486015744bb566a7008"}, - {file = "frozendict-2.3.10.tar.gz", hash = "sha256:aadc83510ce82751a0bb3575231f778bc37cbb373f5f05a52b888e26cbb92f79"}, + {file = "frozendict-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:475c65202a6f5421df8cacb8a2f29c5087134a0542b0540ae95fbf4db7af2ff9"}, + {file = "frozendict-2.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2607e82efdd2c277224a58bda3994d4cd48e49eff7fa31e404cf3066e8dbfeae"}, + {file = "frozendict-2.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fd4583194baabe100c135883017da76259a315d34e303eddf198541b7e02e44"}, + {file = "frozendict-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efca7281184b54f7abab6980cf25837b709f72ced62791f62dabcd7b184d958a"}, + {file = "frozendict-2.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fc4cba1ced988ce9020dfcaae6fe3f5521eebc00c5772b511aaf691b0be91e6"}, + {file = "frozendict-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fab616e7c0fea2ac928f107c740bd9ba516fc083adfcd1c391d6bfc9164403d"}, + {file = "frozendict-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:09ba8ee37d260adde311b8eb4cd12bf27f64071242f736757ae6a11d331eb860"}, + {file = "frozendict-2.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:0615ed71570eec3cc96df063930ea6e563211efeeac86e3f3cc8bdfc9c9bfab7"}, + {file = "frozendict-2.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc754117a7d60ba8e55b3c39abd67f37fbc05dd63cdcb03d1717a382fe0a3421"}, + {file = "frozendict-2.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2804ea4bd2179bb33b99483cc8d69246630cc00632b9affe2914e8666f1cc7e5"}, + {file = "frozendict-2.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4700c3f0aebdc8f4375c35590135794b1dbf2aca132f4756b584fa9910af2d"}, + {file = "frozendict-2.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:da4406d95c340e0b1cc43a3858fac729f52689325bcf61a9182eb94aff7451dc"}, + {file = "frozendict-2.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:1875e7b70a5724bf964354da8fd542240d2cead0d80053ac96bf4494ce3517fa"}, + {file = "frozendict-2.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a60f353496637ca21396289a7d969af1eb4ec4d11a7c37a0e7f25fc1761a0c97"}, + {file = "frozendict-2.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b666f9c6c8a9e794d2713a944b10a65480ff459579d75b5f686c75031c2c2dfc"}, + {file = "frozendict-2.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d81fb396ea81fcba3b3dde4a4b51adcb74ff31632014fbfd030f8acd5a7292"}, + {file = "frozendict-2.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4925c8e82d2bd23d45996cd0827668a52b9c51103897c98ce409a763d0c00c61"}, + {file = "frozendict-2.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa86325da6a6071284b4ed3d9d2cd9db068560aebad503b658d6a889a0575683"}, + {file = "frozendict-2.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5bb5b62d4e2bce12e91800496d94de41bec8f16e4d8a7b16e8f263676ae2031a"}, + {file = "frozendict-2.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3909df909516cfd7bcefd9a3003948970a12a50c5648d8bbddafcef171f2117f"}, + {file = "frozendict-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:204f2c5c10fc018d1ba8ccc67758aa83fe769c782547bd26dc250317a7ccba71"}, + {file = "frozendict-2.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d8d1d269874c94b1ed2b6667e5e43dcf4541838019b1caa4c48f848ac73634df"}, + {file = "frozendict-2.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:809f1cffb602cf06e5186c69c0e3b74bec7a3684593145331f9aa2a65b5ba3b7"}, + {file = "frozendict-2.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b017cba5f73869b04c2977139ad08e57a7480de1e384c34193939698119baa1d"}, + {file = "frozendict-2.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0b75e5e231621dedaef88334997e79fbd137dd89895543d3862fe0220fc3572c"}, + {file = "frozendict-2.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df3819a5d48ab3aae1548e62093d0111ad7c3b62ff9392421b7bbf149c08b629"}, + {file = "frozendict-2.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:42a9b33ccf9d417b22146e59803c53d5c39d7d9151d2df8df59c235f6a1a5ed7"}, + {file = "frozendict-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3f51bfa64e0c4a6608e3f2878bab1211a6b3b197de6fa57151bbe73f1184457"}, + {file = "frozendict-2.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a1d232f092dc686e6ef23d436bde30f82c018f31cef1b89b31caef03814b1617"}, + {file = "frozendict-2.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e530658134e88607ff8c2c8934a07b2bb5e9fffab5045f127746f6542c6c77e"}, + {file = "frozendict-2.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23a52bbea30c9e35b89291273944393770fb031e522a172e3aff19b62cc50047"}, + {file = "frozendict-2.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f91acaff475d0ef0d3436b805c9b91fc627a6a8a281771a24f7ab7f458a0b34f"}, + {file = "frozendict-2.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:08d9c7c1aa92b94538b3a79c43999f999012e174588435f197794d5e5a80e0f5"}, + {file = "frozendict-2.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:05c5a77957ecba4286c7ab33861a8f4f2badc7ea86fc82b834fb360d3aa4c108"}, + {file = "frozendict-2.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:c8af8a6a39e0050d3f3193cda56c42b43534a9b3995c44241bb9527e3c3fd451"}, + {file = "frozendict-2.4.0.tar.gz", hash = "sha256:c26758198e403337933a92b01f417a8240c954f553e1d4b5e0f8e39d9c8e3f0a"}, ] [[package]] name = "frozenlist" -version = "1.4.0" +version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] [[package]] @@ -1715,13 +1735,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, - {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] @@ -1844,15 +1864,18 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa [[package]] name = "isort" -version = "5.13.1" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.13.1-py3-none-any.whl", hash = "sha256:56a51732c25f94ca96f6721be206dd96a95f42950502eb26c1015d333bc6edb7"}, - {file = "isort-5.13.1.tar.gz", hash = "sha256:aaed790b463e8703fb1eddb831dfa8e8616bacde2c083bd557ef73c8189b7263"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] +[package.extras] +colors = ["colorama (>=0.4.6)"] + [[package]] name = "jedi" version = "0.19.1" @@ -1908,13 +1931,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.11.2" +version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, - {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] @@ -1923,12 +1946,12 @@ referencing = ">=0.31.0" [[package]] name = "jwcrypto" -version = "1.5.0" +version = "1.5.1" description = "Implementation of JOSE Web standards" optional = false python-versions = ">= 3.6" files = [ - {file = "jwcrypto-1.5.0.tar.gz", hash = "sha256:2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d"}, + {file = "jwcrypto-1.5.1.tar.gz", hash = "sha256:48bb9bf433777136253579e52b75ffe0f9a4a721d133d01f45a0b91ed5f4f1ae"}, ] [package.dependencies] @@ -1971,47 +1994,48 @@ zookeeper = ["kazoo (>=2.8.0)"] [[package]] name = "lazy-object-proxy" -version = "1.9.0" +version = "1.10.0" description = "A fast and thorough lazy object proxy." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, ] [[package]] @@ -2034,110 +2058,106 @@ resolved_reference = "5c0d9c1f2ef39bbb0b1f4892334b306ac2700cd9" [[package]] name = "lxml" -version = "4.9.3" +version = "5.0.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, + {file = "lxml-5.0.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73bfab795d354aaf2f4eb7a5b0db513031734fd371047342d5803834ce19ec18"}, + {file = "lxml-5.0.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cb564bbe55ff0897d9cf1225041a44576d7ae87f06fd60163544c91de2623d3f"}, + {file = "lxml-5.0.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a5501438dd521bb7e0dde5008c40c7bfcfaafaf86eccb3f9bd27509abb793da"}, + {file = "lxml-5.0.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7ba26a7dc929a1b3487d51bbcb0099afed2fc06e891b82845c8f37a2d7d7fbbd"}, + {file = "lxml-5.0.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:9b59c429e1a2246da86ae237ffc3565efcdc71c281cd38ca8b44d5fb6a3b993a"}, + {file = "lxml-5.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:3ffa066db40b0347e48334bd4465de768e295a3525b9a59831228b5f4f93162d"}, + {file = "lxml-5.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8ce8b468ab50f9e944719d1134709ec11fe0d2840891a6cae369e22141b1094c"}, + {file = "lxml-5.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:583c0e15ae06adc81035346ae2abb2e748f0b5197e7740d8af31222db41bbf7b"}, + {file = "lxml-5.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:904d36165848b59c4e04ae5b969072e602bd987485076fca8ec42c6cd7a7aedc"}, + {file = "lxml-5.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ac21aace6712472e77ea9dfc38329f53830c4259ece54c786107105ebb069053"}, + {file = "lxml-5.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f92d73faa0b1a76d1932429d684b7ce95829e93c3eef3715ec9b98ab192c9d31"}, + {file = "lxml-5.0.0-cp310-cp310-win32.whl", hash = "sha256:03290e2f714f2e7431c8430c08b48167f657da7bc689c6248e828ff3c66d5b1b"}, + {file = "lxml-5.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3e6cbb68bf70081f036bfc018649cf4b46c4e7eaf7860a277cae92dee2a57f69"}, + {file = "lxml-5.0.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:5382612ba2424cea5d2c89e2c29077023d8de88f8d60d5ceff5f76334516df9e"}, + {file = "lxml-5.0.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:07a900735bad9af7be3085480bf384f68ed5580ba465b39a098e6a882c060d6b"}, + {file = "lxml-5.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:980ba47c8db4b9d870014c7040edb230825b79017a6a27aa54cdb6fcc02d8cc0"}, + {file = "lxml-5.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6507c58431dbd95b50654b3313c5ad54f90e54e5f2cdacf733de61eae478eec5"}, + {file = "lxml-5.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4a45a278518e4308865c1e9dbb2c42ce84fb154efb03adeb16fdae3c1687c7c9"}, + {file = "lxml-5.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:59cea9ba1c675fbd6867ca1078fc717a113e7f5b7644943b74137b7cc55abebf"}, + {file = "lxml-5.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd39ef87fd1f7bb5c4aa53454936e6135cbfe03fe3744e8218be193f9e4fef16"}, + {file = "lxml-5.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e6bb39d91bf932e7520cb5718ae3c2f498052aca53294d5d59fdd9068fe1a7f2"}, + {file = "lxml-5.0.0-cp311-cp311-win32.whl", hash = "sha256:21af2c3862db6f4f486cddf73ec1157b40d5828876c47cd880edcbad8240ea1b"}, + {file = "lxml-5.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:c1249aa4eaced30b59ecf8b8cae0b1ccede04583c74ca7d10b6f8bbead908b2c"}, + {file = "lxml-5.0.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:f30e697b6215e759d0824768b2c5b0618d2dc19abe6c67eeed2b0460f52470d1"}, + {file = "lxml-5.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d1bb64646480c36a4aa1b6a44a5b6e33d0fcbeab9f53f1b39072cd3bb2c6243a"}, + {file = "lxml-5.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4e69c36c8618707a90ed3fb6f48a6cc9254ffcdbf7b259e439a5ae5fbf9c5206"}, + {file = "lxml-5.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9ca498f8554a09fbc3a2f8fc4b23261e07bc27bef99b3df98e2570688033f6fc"}, + {file = "lxml-5.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0326e9b8176ea77269fb39e7af4010906e73e9496a9f8eaf06d253b1b1231ceb"}, + {file = "lxml-5.0.0-cp312-cp312-win32.whl", hash = "sha256:5fb988e15378d6e905ca8f60813950a0c56da9469d0e8e5d8fe785b282684ec5"}, + {file = "lxml-5.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:bb58e8f4b2cfe012cd312239b8d5139995fe8f5945c7c26d5fbbbb1ddb9acd47"}, + {file = "lxml-5.0.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81509dffd8aba3bdb43e90cbd218c9c068a1f4047d97bc9546b3ac9e3a4ae81d"}, + {file = "lxml-5.0.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e675a4b95208e74c34ac0751cc4bab9170e7728b61601fb0f4746892c2bb7e0b"}, + {file = "lxml-5.0.0-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:405e3760f83a8ba3bdb6e622ec79595cdc20db916ce37377bbcb95b5711fa4ca"}, + {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f15844a1b93dcaa09c2b22e22a73384f3ae4502347c3881cfdd674e14ac04e21"}, + {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88f559f8beb6b90e41a7faae4aca4c8173a4819874a9bf8e74c8d7c1d51f3162"}, + {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e8c63f5c7d87e7044880b01851ac4e863c3349e6f6b6ab456fe218d9346e816d"}, + {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:0d277d4717756fe8816f0beeff229cb72f9dd02a43b70e1d3f07c8efadfb9fe1"}, + {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c8954da15403db1acfc0544b3c3f963a6ef4e428283ab6555e3e298bbbff1cf6"}, + {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:aebd8fd378e074b22e79cad329dcccd243c40ff1cafaa512d19276c5bb9554e1"}, + {file = "lxml-5.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b6d4e148edee59c2ad38af15810dbcb8b5d7b13e5de3509d8cf3edfe74c0adca"}, + {file = "lxml-5.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:70ab4e02f7aa5fb4131c8b222a111ce7676f3767e36084fba3a4e7338dc82dcd"}, + {file = "lxml-5.0.0-cp36-cp36m-win32.whl", hash = "sha256:de1a8b54170024cf1c0c2718c82412bca42cd82e390556e3d8031af9541b416f"}, + {file = "lxml-5.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5b39f63edbe7e018c2ac1cf0259ee0dd2355274e8a3003d404699b040782e55e"}, + {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:77b73952534967a4497d9e4f26fbeebfba19950cbc66b7cc3a706214429d8106"}, + {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8cc0a951e5616ac626f7036309c41fb9774adcd4aa7db0886463da1ce5b65edb"}, + {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4b9d5b01900a760eb3acf6cef50aead4ef2fa79e7ddb927084244e41dfe37b65"}, + {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:173bcead3af5d87c7bca9a030675073ddaad8e0a9f0b04be07cd9390453e7226"}, + {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44fa9afd632210f1eeda51cf284ed8dbab0c7ec8b008dd39ba02818e0e114e69"}, + {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fef10f27d6318d2d7c88680e113511ddecf09ee4f9559b3623b73ee89fa8f6cc"}, + {file = "lxml-5.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3663542aee845129a981889c19b366beab0b1dadcf5ca164696aabfe1aa51667"}, + {file = "lxml-5.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7188495c1bf71bfda87d78ed50601e72d252119ce11710d6e71ff36e35fea5a0"}, + {file = "lxml-5.0.0-cp37-cp37m-win32.whl", hash = "sha256:6a2de85deabf939b0af89e2e1ea46bfb1239545e2da6f8ac96522755a388025f"}, + {file = "lxml-5.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ea56825c1e23c9c8ea385a191dac75f9160477057285b88c88736d9305e6118f"}, + {file = "lxml-5.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:3f908afd0477cace17f941d1b9cfa10b769fe1464770abe4cfb3d9f35378d0f8"}, + {file = "lxml-5.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52a9ab31853d3808e7cf0183b3a5f7e8ffd622ea4aee1deb5252dbeaefd5b40d"}, + {file = "lxml-5.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c7fe19abb3d3c55a9e65d289b12ad73b3a31a3f0bda3c539a890329ae9973bd6"}, + {file = "lxml-5.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:1ef0793e1e2dd221fce7c142177008725680f7b9e4a184ab108d90d5d3ab69b7"}, + {file = "lxml-5.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:581a78f299a9f5448b2c3aea904bfcd17c59bf83016d221d7f93f83633bb2ab2"}, + {file = "lxml-5.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:affdd833f82334fdb10fc9a1c7b35cdb5a86d0b672b4e14dd542e1fe7bcea894"}, + {file = "lxml-5.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6bba06d8982be0f0f6432d289a8d104417a0ab9ed04114446c4ceb6d4a40c65d"}, + {file = "lxml-5.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:80209b31dd3908bc5b014f540fd192c97ea52ab179713a730456c5baf7ce80c1"}, + {file = "lxml-5.0.0-cp38-cp38-win32.whl", hash = "sha256:dac2733fe4e159b0aae0439db6813b7b1d23ff96d0b34c0107b87faf79208c4e"}, + {file = "lxml-5.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:ee60f33456ff34b2dd1d048a740a2572798356208e4c494301c931de3a0ab3a2"}, + {file = "lxml-5.0.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:5eff173f0ff408bfa578cbdafd35a7e0ca94d1a9ffe09a8a48e0572d0904d486"}, + {file = "lxml-5.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:78d6d8e5b54ed89dc0f0901eaaa579c384ad8d59fa43cc7fb06e9bb89115f8f4"}, + {file = "lxml-5.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:71a7cee869578bc17b18050532bb2f0bc682a7b97dda77041741a1bd2febe6c7"}, + {file = "lxml-5.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7df433d08d4587dc3932f7fcfc3194519a6824824104854e76441fd3bc000d29"}, + {file = "lxml-5.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:793be9b4945c2dfd69828fb5948d7d9569b78e0599e4a2e88d92affeb0ff3aa3"}, + {file = "lxml-5.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7cfb6af73602c8d288581df8a225989d7e9d5aab0a174be0e19fcfa800b6797"}, + {file = "lxml-5.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bfdc4668ac56687a89ca3eca44231144a2e9d02ba3b877558db74ba20e2bd9fa"}, + {file = "lxml-5.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2992591e2294bb07faf7f5f6d5cb60710c046404f4bfce09fb488b85d2a8f58f"}, + {file = "lxml-5.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4786b0af7511ea614fd86407a52a7bc161aa5772d311d97df2591ed2351de768"}, + {file = "lxml-5.0.0-cp39-cp39-win32.whl", hash = "sha256:016de3b29a262655fc3d2075dc1b2611f84f4c3d97a71d579c883d45e201eee4"}, + {file = "lxml-5.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:52c0acc2f29b0a204efc11a5ed911a74f50a25eb7d7d5069c2b1fd3b3346ce11"}, + {file = "lxml-5.0.0-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:96095bfc0c02072fc89afa67626013a253596ea5118b8a7f4daaae049dafa096"}, + {file = "lxml-5.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:992029258ed719f130d5a9c443d142c32843046f1263f2c492862b2a853be570"}, + {file = "lxml-5.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:db40e85cffd22f7d65dcce30e85af565a66401a6ed22fc0c56ed342cfa4ffc43"}, + {file = "lxml-5.0.0-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:cfa8a4cdc3765574b7fd0c7cfa5fbd1e2108014c9dfd299c679e5152bea9a55e"}, + {file = "lxml-5.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:049fef98d02513c34f5babd07569fc1cf1ed14c0f2fbff18fe72597f977ef3c2"}, + {file = "lxml-5.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a85136d0ee18a41c91cc3e2844c683be0e72e6dda4cb58da9e15fcaef3726af7"}, + {file = "lxml-5.0.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:766868f729f3ab84125350f1a0ea2594d8b1628a608a574542a5aff7355b9941"}, + {file = "lxml-5.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:99cad5c912f359e59e921689c04e54662cdd80835d80eeaa931e22612f515df7"}, + {file = "lxml-5.0.0-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:c90c593aa8dd57d5dab0ef6d7d64af894008971d98e6a41b320fdd75258fbc6e"}, + {file = "lxml-5.0.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8134d5441d1ed6a682e3de3d7a98717a328dce619ee9c4c8b3b91f0cb0eb3e28"}, + {file = "lxml-5.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f298ac9149037d6a3d5c74991bded39ac46292520b9c7c182cb102486cc87677"}, + {file = "lxml-5.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:894c5f71186b410679aaab5774543fcb9cbabe8893f0b31d11cf28a0740e80be"}, + {file = "lxml-5.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9cd3d6c2c67d4fdcd795e4945e2ba5434909c96640b4cc09453bd0dc7e8e1bac"}, + {file = "lxml-5.0.0.zip", hash = "sha256:2219cbf790e701acf9a21a31ead75f983e73daf0eceb9da6990212e4d20ebefe"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] +source = ["Cython (>=3.0.7)"] [[package]] name = "markdown" @@ -2821,6 +2841,26 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + [[package]] name = "pyld" version = "2.0.3" @@ -3274,99 +3314,104 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2023.10.3" +version = "2023.12.25" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.7" files = [ - {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, - {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, - {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, - {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, - {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, - {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, - {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, - {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, - {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, - {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, - {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, - {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, - {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, - {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, - {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, - {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, - {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, - {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, - {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, - {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, - {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, - {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, - {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, - {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, - {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, - {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, - {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, - {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, - {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, - {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, - {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, - {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, - {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, - {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, - {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, - {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, + {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, + {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, + {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, + {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, + {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, + {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, + {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, + {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, + {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, + {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, + {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, + {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, + {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, + {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, ] [[package]] @@ -3444,110 +3489,110 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rpds-py" -version = "0.13.2" +version = "0.16.2" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.13.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d"}, - {file = "rpds_py-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3"}, - {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7"}, - {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914"}, - {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb"}, - {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1"}, - {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266"}, - {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d"}, - {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f"}, - {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea"}, - {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1"}, - {file = "rpds_py-0.13.2-cp310-none-win32.whl", hash = "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc"}, - {file = "rpds_py-0.13.2-cp310-none-win_amd64.whl", hash = "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd"}, - {file = "rpds_py-0.13.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad"}, - {file = "rpds_py-0.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42"}, - {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e"}, - {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568"}, - {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2"}, - {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190"}, - {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0"}, - {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c"}, - {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8"}, - {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e"}, - {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d"}, - {file = "rpds_py-0.13.2-cp311-none-win32.whl", hash = "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7"}, - {file = "rpds_py-0.13.2-cp311-none-win_amd64.whl", hash = "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211"}, - {file = "rpds_py-0.13.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381"}, - {file = "rpds_py-0.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b"}, - {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2"}, - {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57"}, - {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a"}, - {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658"}, - {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2"}, - {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee"}, - {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2"}, - {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7"}, - {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60"}, - {file = "rpds_py-0.13.2-cp312-none-win32.whl", hash = "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d"}, - {file = "rpds_py-0.13.2-cp312-none-win_amd64.whl", hash = "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27"}, - {file = "rpds_py-0.13.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1"}, - {file = "rpds_py-0.13.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba"}, - {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0"}, - {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452"}, - {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1"}, - {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815"}, - {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca"}, - {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083"}, - {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a"}, - {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66"}, - {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b"}, - {file = "rpds_py-0.13.2-cp38-none-win32.whl", hash = "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab"}, - {file = "rpds_py-0.13.2-cp38-none-win_amd64.whl", hash = "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1"}, - {file = "rpds_py-0.13.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c"}, - {file = "rpds_py-0.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e"}, - {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4"}, - {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3"}, - {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff"}, - {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a"}, - {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0"}, - {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53"}, - {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b"}, - {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0"}, - {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468"}, - {file = "rpds_py-0.13.2-cp39-none-win32.whl", hash = "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c"}, - {file = "rpds_py-0.13.2-cp39-none-win_amd64.whl", hash = "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21"}, - {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007"}, - {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9"}, - {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31"}, - {file = "rpds_py-0.13.2.tar.gz", hash = "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f"}, + {file = "rpds_py-0.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f"}, + {file = "rpds_py-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44"}, + {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b"}, + {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9"}, + {file = "rpds_py-0.16.2-cp310-none-win32.whl", hash = "sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82"}, + {file = "rpds_py-0.16.2-cp310-none-win_amd64.whl", hash = "sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e"}, + {file = "rpds_py-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb"}, + {file = "rpds_py-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb"}, + {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b"}, + {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8"}, + {file = "rpds_py-0.16.2-cp311-none-win32.whl", hash = "sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3"}, + {file = "rpds_py-0.16.2-cp311-none-win_amd64.whl", hash = "sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d"}, + {file = "rpds_py-0.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d"}, + {file = "rpds_py-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73"}, + {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f"}, + {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58"}, + {file = "rpds_py-0.16.2-cp312-none-win32.whl", hash = "sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3"}, + {file = "rpds_py-0.16.2-cp312-none-win_amd64.whl", hash = "sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5"}, + {file = "rpds_py-0.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60"}, + {file = "rpds_py-0.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391"}, + {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc"}, + {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365"}, + {file = "rpds_py-0.16.2-cp38-none-win32.whl", hash = "sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff"}, + {file = "rpds_py-0.16.2-cp38-none-win_amd64.whl", hash = "sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851"}, + {file = "rpds_py-0.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e"}, + {file = "rpds_py-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b"}, + {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00"}, + {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45"}, + {file = "rpds_py-0.16.2-cp39-none-win32.whl", hash = "sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d"}, + {file = "rpds_py-0.16.2-cp39-none-win_amd64.whl", hash = "sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8"}, + {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d"}, + {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97"}, + {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac"}, + {file = "rpds_py-0.16.2.tar.gz", hash = "sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44"}, ] [[package]] @@ -3634,13 +3679,13 @@ tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] name = "setuptools" -version = "69.0.2" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, - {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [package.extras] @@ -3775,13 +3820,13 @@ files = [ [[package]] name = "traitlets" -version = "5.14.0" +version = "5.14.1" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, - {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, + {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, + {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, ] [package.extras] @@ -3924,13 +3969,13 @@ files = [ [[package]] name = "tzdata" -version = "2023.3" +version = "2023.4" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] [[package]] @@ -4626,4 +4671,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "04e7cf8d5650e1679527cf5884cd1fcfb8412ea9fcac26016ebf0ef436208d07" +content-hash = "effb79a8efc381d78f38221a8dd03950cd5ccd4221ab1c4c944c81fa4dd6d824" diff --git a/api/pyproject.toml b/api/pyproject.toml index 982de1d27..28486dc49 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -28,9 +28,9 @@ funkwhale-manage = 'funkwhale_api.main:main' python = "^3.8,<3.13" # Django -dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } +dj-rest-auth = "5.0.2" django = "==3.2.23" -django-allauth = "==0.42.0" +django-allauth = "0.55.2" django-cache-memoize = "0.1.10" django-cacheops = "==6.1" django-cleanup = "==6.0.0" diff --git a/api/tests/users/test_views.py b/api/tests/users/test_views.py index 432f371fb..8b7dd5e55 100644 --- a/api/tests/users/test_views.py +++ b/api/tests/users/test_views.py @@ -8,7 +8,27 @@ from funkwhale_api.moderation import tasks as moderation_tasks from funkwhale_api.users.models import User -def test_can_create_user_via_api(preferences, api_client, db): +def test_can_create_user_via_api(settings, preferences, api_client, db): + url = reverse("rest_register") + data = { + "username": "test1", + "email": "test1@test.com", + "password1": "thisismypassword", + "password2": "thisismypassword", + } + preferences["users__registration_enabled"] = True + settings.ACCOUNT_EMAIL_VERIFICATION = "mandatory" + response = api_client.post(url, data) + assert response.status_code == 201 + assert response.data["detail"] == "Verification e-mail sent." + + u = User.objects.get(email="test1@test.com") + assert u.username == "test1" + + +def test_can_create_user_via_api_mail_verification_mandatory( + settings, preferences, api_client, db +): url = reverse("rest_register") data = { "username": "test1", @@ -18,7 +38,7 @@ def test_can_create_user_via_api(preferences, api_client, db): } preferences["users__registration_enabled"] = True response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 u = User.objects.get(email="test1@test.com") assert u.username == "test1" @@ -82,7 +102,7 @@ def test_can_signup_with_invitation(preferences, factories, api_client): } preferences["users__registration_enabled"] = False response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 u = User.objects.get(email="test1@test.com") assert u.username == "test1" assert u.invitation == invitation @@ -302,7 +322,7 @@ def test_creating_user_creates_actor_as_well( mocker.patch("funkwhale_api.users.models.create_actor", return_value=actor) response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 user = User.objects.get(username="test1") @@ -323,7 +343,7 @@ def test_creating_user_sends_confirmation_email( preferences["instance__name"] = "Hello world" response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 confirmation_message = mailoutbox[-1] assert "Hello world" in confirmation_message.body @@ -405,7 +425,7 @@ def test_signup_with_approval_enabled( } on_commit = mocker.patch("funkwhale_api.common.utils.on_commit") response = api_client.post(url, data, format="json") - assert response.status_code == 201 + assert response.status_code == 204 u = User.objects.get(email="test1@test.com") assert u.username == "test1" assert u.is_active is False diff --git a/changes/changelog.d/allauth.enhancement b/changes/changelog.d/allauth.enhancement new file mode 100644 index 000000000..30c4cf0a3 --- /dev/null +++ b/changes/changelog.d/allauth.enhancement @@ -0,0 +1 @@ +Update dj-rest-auth to 5.0.2 and django-allauth to 0.55.2 From 33cd0f05a781bb5a278e57315fd893d1953638a6 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 6 Dec 2023 09:29:21 +0000 Subject: [PATCH 246/371] test(throttling): Explicitly enable throttling to make test more stable Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2670> --- api/tests/common/test_throttling.py | 1 + 1 file changed, 1 insertion(+) diff --git a/api/tests/common/test_throttling.py b/api/tests/common/test_throttling.py index 16cd44196..272ff2367 100644 --- a/api/tests/common/test_throttling.py +++ b/api/tests/common/test_throttling.py @@ -269,6 +269,7 @@ def test_throttle_calls_attach_info(method, mocker): def test_allow_request(api_request, settings, mocker): + settings.THROTTLING_ENABLED = True settings.THROTTLING_RATES = {"test": {"rate": "2/s"}} ip = "92.92.92.92" request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) From 736625e23508140d6fffc1ddddd6f7dd2c763902 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 8 Jan 2024 14:40:26 +0100 Subject: [PATCH 247/371] ci: Don't run docker builds on foreign MRs --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f8e14f8b1..d815ab61b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -473,7 +473,8 @@ docker: --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max,oci-mediatypes=false --push - - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAME == "funkwhale" + # We don't provide priviledged runners to everyone, so we can only build docker images in the funkwhale group variables: BUILD_ARGS: > --set *.platform=linux/amd64 From 332ae20f051f05624db5082359802d00a7f7ccc8 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Sat, 30 Dec 2023 18:48:33 +0100 Subject: [PATCH 248/371] Fix docker dev setup Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2696> --- dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev.yml b/dev.yml index 444ec82b6..9ba73c6d2 100644 --- a/dev.yml +++ b/dev.yml @@ -123,9 +123,9 @@ services: - "${NGINX_PORTS_MAPPING-8000:80}" environment: - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - - "FUNKWHALE_API_IP=${FUNKHALE_API_IP-api}" + - "FUNKWHALE_API_HOST=${FUNKWHALE_API_HOST-api}" - "FUNKWHALE_API_PORT=${FUNKWHALE_API_PORT-5000}" - - "FUNKWHALE_FRONT_IP=${FUNKHALE_FRONT_IP-front}" + - "FUNKWHALE_FRONT_IP=${FUNKWHALE_FRONT_IP-front}" - "FUNKWHALE_FRONT_PORT=${VUE_PORT-8080}" - "COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME- }" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-localhost}" From d12ca2bad819c2389f74880a8d7e3e62604aa4a8 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 10 Jan 2024 12:08:40 +0100 Subject: [PATCH 249/371] fix: Use the correct pre-defined variable to determine project namespace --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d815ab61b..3e57168a4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -473,7 +473,7 @@ docker: --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max,oci-mediatypes=false --push - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAME == "funkwhale" + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "funkwhale" # We don't provide priviledged runners to everyone, so we can only build docker images in the funkwhale group variables: BUILD_ARGS: > From e96748c0299c75f729de40d8af960f7c139e53d7 Mon Sep 17 00:00:00 2001 From: Baudouin Feildel <baudouin@feildel.fr> Date: Sat, 6 Jan 2024 14:39:15 +0000 Subject: [PATCH 250/371] Fix Apache configuration Built assets are fetched using path like this: `/assets/foo-a1b2c3.js`. Apache failed to serve those, as it was missing disabling the proxy pass for the static assets folder. This commit adds the necessary configuration for properly serving the static assets. Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2699> --- deploy/apache.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/deploy/apache.conf b/deploy/apache.conf index 0c072059e..a95e6a55d 100644 --- a/deploy/apache.conf +++ b/deploy/apache.conf @@ -94,6 +94,11 @@ Define MEDIA_DIRECTORY_PATH ${FUNKWHALE_ROOT_PATH}/data/media </Location> Alias /front ${FUNKWHALE_ROOT_PATH}/front/dist + <Location "/assets"> + ProxyPass "!" + </Location> + Alias /assets ${FUNKWHALE_ROOT_PATH}/front/dist/assets + <Location "/media"> ProxyPass "!" </Location> From 2c90b32bb30613034e6d6e4d4eceb6bd09d9b159 Mon Sep 17 00:00:00 2001 From: Baudouin Feildel <baudouin@feildel.fr> Date: Mon, 8 Jan 2024 19:13:43 +0000 Subject: [PATCH 251/371] Add changelog entry. Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2699> --- changes/changelog.d/apache-template-fix.doc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/apache-template-fix.doc diff --git a/changes/changelog.d/apache-template-fix.doc b/changes/changelog.d/apache-template-fix.doc new file mode 100644 index 000000000..acfabe6da --- /dev/null +++ b/changes/changelog.d/apache-template-fix.doc @@ -0,0 +1 @@ +Fixed the sample Apache configuration From cd9d6d696e245cd7e84f1f357656698699c7616c Mon Sep 17 00:00:00 2001 From: jo <ljonas@riseup.net> Date: Mon, 13 Feb 2023 12:53:33 +0100 Subject: [PATCH 252/371] ci: add release job Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2698> --- .gitignore | 2 + .gitlab-ci.yml | 25 +++++++ Makefile | 36 +++++++++ .../publish-release-in-ci.enhancement | 1 + scripts/ci-release.sh | 75 +++++++++++++++++++ 5 files changed, 139 insertions(+) create mode 100644 changes/changelog.d/publish-release-in-ci.enhancement create mode 100755 scripts/ci-release.sh diff --git a/.gitignore b/.gitignore index b37e36601..944b37ae7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +/dist + ### OSX ### .DS_Store .AppleDouble diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3e57168a4..0bbe20280 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -509,3 +509,28 @@ docker: name: docker_metadata_${CI_COMMIT_REF_NAME} paths: - metadata.json + +release: + stage: publish + needs: + - job: build_metadata + artifacts: true + - job: build_api + artifacts: true + - job: build_front + artifacts: true + + image: $CI_REGISTRY/funkwhale/ci/python:3.11 + variables: + <<: *keep_git_files_permissions + before_script: + - apt-get update + - apt-get install -y zip + - > + curl "https://gitlab.com/api/v4/projects/gitlab-org%2Frelease-cli/packages/generic/release-cli/latest/release-cli-linux-amd64" + --output /usr/local/bin/release-cli + - chmod +x /usr/local/bin/release-cli + - release-cli -v + script: + - make build + - scripts/ci-release.sh diff --git a/Makefile b/Makefile index e1f64e782..fcc1d995b 100644 --- a/Makefile +++ b/Makefile @@ -17,3 +17,39 @@ docker-build: docker-metadata build-metadata: ./scripts/build_metadata.py --format env | tee build_metadata.env + +VERSION ?= $(shell git describe --tags --abbrev=0) +BUILD_DIR = dist +build: + rm -Rf $(BUILD_DIR) + mkdir -p $(BUILD_DIR) + tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-api-$(VERSION).tar.gz' \ + --owner='root' \ + --group='root' \ + --exclude-vcs \ + api/config \ + api/funkwhale_api \ + api/install_os_dependencies.sh \ + api/manage.py \ + api/poetry.lock \ + api/pyproject.toml \ + api/Readme.md + + cd '$(BUILD_DIR)' && \ + tar --extract --gunzip --file='funkwhale-api-$(VERSION).tar.gz' && \ + zip -q 'funkwhale-api-$(VERSION).zip' -r api && \ + rm -Rf api + + tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-front-$(VERSION).tar.gz' \ + --owner='root' \ + --group='root' \ + --exclude-vcs \ + --transform='s/^front\/dist/front/' \ + front/dist + + cd '$(BUILD_DIR)' && \ + tar --extract --gunzip --file='funkwhale-front-$(VERSION).tar.gz' && \ + zip -q 'funkwhale-front-$(VERSION).zip' -r front && \ + rm -Rf front + + cd '$(BUILD_DIR)' && sha256sum * > SHA256SUMS diff --git a/changes/changelog.d/publish-release-in-ci.enhancement b/changes/changelog.d/publish-release-in-ci.enhancement new file mode 100644 index 000000000..013665e89 --- /dev/null +++ b/changes/changelog.d/publish-release-in-ci.enhancement @@ -0,0 +1 @@ +Publish releases from CI job diff --git a/scripts/ci-release.sh b/scripts/ci-release.sh new file mode 100755 index 000000000..ab1a20025 --- /dev/null +++ b/scripts/ci-release.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +# Make sure that https://docs.gitlab.com/ee/user/packages/generic_packages/#do-not-allow-duplicate-generic-packages +# is enabled + +set -eu + +error() { + echo >&2 "error: $*" + exit 1 +} + +command -v curl > /dev/null || error "curl command not found!" + +CI_API_V4_URL="https://dev.funkwhale.audio/api/v4" +CI_PROJECT_ID="955" +CI_COMMIT_REF_NAME="1.3.0-rc4" +CI_JOB_TOKEN="glpat-GyMCY55RP2D_pGjqnkKe" + +PACKAGE_REGISTRY_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic" +PACKAGE_NAME="funkwhale" +PACKAGE_VERSION="$CI_COMMIT_REF_NAME" + +join_by() { + local IFS="$1" + shift + echo "$*" +} + +# publish_asset <asset> <file> +publish_asset() { + echo "publishing release asset $asset" + curl \ + --fail \ + --show-error \ + --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ + --upload-file "$2" \ + "$PACKAGE_REGISTRY_URL/$PACKAGE_NAME/$PACKAGE_VERSION/$1" + echo +} + +# release_asset_json <asset> +release_asset_json() { + printf '{"name": "%s", "url": "%s", "link_type": "package"}' \ + "$1" \ + "$PACKAGE_REGISTRY_URL/$PACKAGE_NAME/$PACKAGE_VERSION/$1" +} + +# release_json <release_assets_json> +release_json() { + printf '{"name": "%s", "tag_name": "%s", "assets": { "links": [%s]}}' "$PACKAGE_VERSION" "$PACKAGE_VERSION" "$1" +} + +# publish_release <release_json> +publish_release() { + echo "publishing release $PACKAGE_VERSION" + curl \ + --fail \ + --show-error \ + --request POST \ + --header "Content-Type: application/json" \ + --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ + --data "$1" \ + "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases" + echo +} + +release_assets=() +for asset_path in dist/*; do + asset="$(basename "$asset_path")" + publish_asset "$asset" "$asset_path" + release_assets+=("$(release_asset_json "$asset")") +done + +publish_release "$(release_json "$(join_by , "${release_assets[@]}")")" From 8f3ab416aee49bb2fa4d959ffbbc5b0c3a78c555 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 5 Jan 2024 11:19:18 +0000 Subject: [PATCH 253/371] ci: Remove creation of release, only publish packages Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2698> --- .gitlab-ci.yml | 13 +++++-------- Makefile | 2 +- scripts/{ci-release.sh => ci-upload-packages.sh} | 16 ---------------- 3 files changed, 6 insertions(+), 25 deletions(-) rename scripts/{ci-release.sh => ci-upload-packages.sh} (77%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0bbe20280..06e119958 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -510,7 +510,7 @@ docker: paths: - metadata.json -release: +package: stage: publish needs: - job: build_metadata @@ -519,6 +519,8 @@ release: artifacts: true - job: build_front artifacts: true + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ image: $CI_REGISTRY/funkwhale/ci/python:3.11 variables: @@ -526,11 +528,6 @@ release: before_script: - apt-get update - apt-get install -y zip - - > - curl "https://gitlab.com/api/v4/projects/gitlab-org%2Frelease-cli/packages/generic/release-cli/latest/release-cli-linux-amd64" - --output /usr/local/bin/release-cli - - chmod +x /usr/local/bin/release-cli - - release-cli -v script: - - make build - - scripts/ci-release.sh + - make package + - scripts/ci-upload-packages.sh diff --git a/Makefile b/Makefile index fcc1d995b..e5c386632 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ build-metadata: VERSION ?= $(shell git describe --tags --abbrev=0) BUILD_DIR = dist -build: +package: rm -Rf $(BUILD_DIR) mkdir -p $(BUILD_DIR) tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-api-$(VERSION).tar.gz' \ diff --git a/scripts/ci-release.sh b/scripts/ci-upload-packages.sh similarity index 77% rename from scripts/ci-release.sh rename to scripts/ci-upload-packages.sh index ab1a20025..6476c69e3 100755 --- a/scripts/ci-release.sh +++ b/scripts/ci-upload-packages.sh @@ -51,25 +51,9 @@ release_json() { printf '{"name": "%s", "tag_name": "%s", "assets": { "links": [%s]}}' "$PACKAGE_VERSION" "$PACKAGE_VERSION" "$1" } -# publish_release <release_json> -publish_release() { - echo "publishing release $PACKAGE_VERSION" - curl \ - --fail \ - --show-error \ - --request POST \ - --header "Content-Type: application/json" \ - --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ - --data "$1" \ - "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases" - echo -} - release_assets=() for asset_path in dist/*; do asset="$(basename "$asset_path")" publish_asset "$asset" "$asset_path" release_assets+=("$(release_asset_json "$asset")") done - -publish_release "$(release_json "$(join_by , "${release_assets[@]}")")" From fa6d48f1b7967938611e7fba8f4f73b4c2dc5b4b Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 5 Jan 2024 11:30:54 +0000 Subject: [PATCH 254/371] fix: Use correct auth header for package upload Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2698> --- scripts/ci-upload-packages.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ci-upload-packages.sh b/scripts/ci-upload-packages.sh index 6476c69e3..2e0659518 100755 --- a/scripts/ci-upload-packages.sh +++ b/scripts/ci-upload-packages.sh @@ -33,7 +33,7 @@ publish_asset() { curl \ --fail \ --show-error \ - --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \ + --header "JOB-TOKEN: $CI_JOB_TOKEN" \ --upload-file "$2" \ "$PACKAGE_REGISTRY_URL/$PACKAGE_NAME/$PACKAGE_VERSION/$1" echo From b4f18edaffd42e2aeebc1ef6520b92acdfdece28 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 5 Jan 2024 11:39:33 +0000 Subject: [PATCH 255/371] fix: Remove variable overrides Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2698> --- Makefile | 13 ++++++------- scripts/ci-upload-packages.sh | 5 ----- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index e5c386632..5ffe3d6a2 100644 --- a/Makefile +++ b/Makefile @@ -18,12 +18,11 @@ docker-build: docker-metadata build-metadata: ./scripts/build_metadata.py --format env | tee build_metadata.env -VERSION ?= $(shell git describe --tags --abbrev=0) BUILD_DIR = dist package: rm -Rf $(BUILD_DIR) mkdir -p $(BUILD_DIR) - tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-api-$(VERSION).tar.gz' \ + tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-api.tar.gz' \ --owner='root' \ --group='root' \ --exclude-vcs \ @@ -36,11 +35,11 @@ package: api/Readme.md cd '$(BUILD_DIR)' && \ - tar --extract --gunzip --file='funkwhale-api-$(VERSION).tar.gz' && \ - zip -q 'funkwhale-api-$(VERSION).zip' -r api && \ + tar --extract --gunzip --file='funkwhale-api.tar.gz' && \ + zip -q 'funkwhale-api.zip' -r api && \ rm -Rf api - tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-front-$(VERSION).tar.gz' \ + tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-front.tar.gz' \ --owner='root' \ --group='root' \ --exclude-vcs \ @@ -48,8 +47,8 @@ package: front/dist cd '$(BUILD_DIR)' && \ - tar --extract --gunzip --file='funkwhale-front-$(VERSION).tar.gz' && \ - zip -q 'funkwhale-front-$(VERSION).zip' -r front && \ + tar --extract --gunzip --file='funkwhale-front.tar.gz' && \ + zip -q 'funkwhale-front.zip' -r front && \ rm -Rf front cd '$(BUILD_DIR)' && sha256sum * > SHA256SUMS diff --git a/scripts/ci-upload-packages.sh b/scripts/ci-upload-packages.sh index 2e0659518..d6306eee6 100755 --- a/scripts/ci-upload-packages.sh +++ b/scripts/ci-upload-packages.sh @@ -12,11 +12,6 @@ error() { command -v curl > /dev/null || error "curl command not found!" -CI_API_V4_URL="https://dev.funkwhale.audio/api/v4" -CI_PROJECT_ID="955" -CI_COMMIT_REF_NAME="1.3.0-rc4" -CI_JOB_TOKEN="glpat-GyMCY55RP2D_pGjqnkKe" - PACKAGE_REGISTRY_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic" PACKAGE_NAME="funkwhale" PACKAGE_VERSION="$CI_COMMIT_REF_NAME" From daf9e80ca52361ca127404ac7beed7b6c58c9dec Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 10 Jan 2024 14:26:05 +0100 Subject: [PATCH 256/371] fix: Install zip in upstream image Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2698> --- .gitlab-ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 06e119958..d5cdcb54e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -525,9 +525,6 @@ package: image: $CI_REGISTRY/funkwhale/ci/python:3.11 variables: <<: *keep_git_files_permissions - before_script: - - apt-get update - - apt-get install -y zip script: - make package - scripts/ci-upload-packages.sh From c3ae40cabe4aaaf80c9fbb23540c3571b5ff7496 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 10 Jan 2024 14:26:21 +0100 Subject: [PATCH 257/371] style: Cleanup script, remove unused functions Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2698> --- scripts/ci-upload-packages.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/scripts/ci-upload-packages.sh b/scripts/ci-upload-packages.sh index d6306eee6..d63594663 100755 --- a/scripts/ci-upload-packages.sh +++ b/scripts/ci-upload-packages.sh @@ -16,12 +16,6 @@ PACKAGE_REGISTRY_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic" PACKAGE_NAME="funkwhale" PACKAGE_VERSION="$CI_COMMIT_REF_NAME" -join_by() { - local IFS="$1" - shift - echo "$*" -} - # publish_asset <asset> <file> publish_asset() { echo "publishing release asset $asset" @@ -41,11 +35,6 @@ release_asset_json() { "$PACKAGE_REGISTRY_URL/$PACKAGE_NAME/$PACKAGE_VERSION/$1" } -# release_json <release_assets_json> -release_json() { - printf '{"name": "%s", "tag_name": "%s", "assets": { "links": [%s]}}' "$PACKAGE_VERSION" "$PACKAGE_VERSION" "$1" -} - release_assets=() for asset_path in dist/*; do asset="$(basename "$asset_path")" From 7fcaa1fed26f602a4364b65cc1784e8addc4e45b Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 29 Jan 2024 09:07:47 +0000 Subject: [PATCH 258/371] chore(api): update dependency black to v24 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2702> --- api/poetry.lock | 58 ++++++++++++++++++++++------------------------ api/pyproject.toml | 2 +- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index ea3c681e4..d6f58e6a5 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -381,36 +381,33 @@ files = [ [[package]] name = "black" -version = "23.3.0" +version = "24.1.1" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [package.dependencies] @@ -420,11 +417,11 @@ packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -3245,6 +3242,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4671,4 +4669,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "effb79a8efc381d78f38221a8dd03950cd5ccd4221ab1c4c944c81fa4dd6d824" +content-hash = "8539f47729c6f1db0444ff7ae28733ea31f53439e2685cc423e7e01973bbab9d" diff --git a/api/pyproject.toml b/api/pyproject.toml index 28486dc49..07179ef30 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -101,7 +101,7 @@ unicode-slugify = "==0.1.5" [tool.poetry.group.dev.dependencies] aioresponses = "==0.7.6" asynctest = "==0.13.0" -black = "==23.3.0" +black = "==24.1.1" coverage = { version = "==6.5.0", extras = ["toml"] } debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" From d6a078643bd05d4fa6007c56d34c074751b00bf3 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 29 Jan 2024 13:35:58 +0000 Subject: [PATCH 259/371] chore(api): update dependency coverage to v7 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2704> --- api/poetry.lock | 108 +++++++++++++++++++++++---------------------- api/pyproject.toml | 2 +- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index d6f58e6a5..c35650df7 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -861,61 +861,63 @@ files = [ [[package]] name = "coverage" -version = "6.5.0" +version = "7.4.1" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, - {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, - {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, - {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, - {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, - {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, - {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, - {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, - {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, - {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, - {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, - {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, - {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, - {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, - {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, - {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, ] [package.dependencies] @@ -4669,4 +4671,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "8539f47729c6f1db0444ff7ae28733ea31f53439e2685cc423e7e01973bbab9d" +content-hash = "0c857e133722a6e45aace19a6985a7ed4bda98c9c413b6f5643a09cb39317289" diff --git a/api/pyproject.toml b/api/pyproject.toml index 07179ef30..ada0d7495 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -102,7 +102,7 @@ unicode-slugify = "==0.1.5" aioresponses = "==0.7.6" asynctest = "==0.13.0" black = "==24.1.1" -coverage = { version = "==6.5.0", extras = ["toml"] } +coverage = { version = "==7.4.1", extras = ["toml"] } debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" django-debug-toolbar = "==3.8.1" From da370f5915cfbff885a5d5738e145b6b2d435e53 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Tue, 30 Jan 2024 04:35:38 +0000 Subject: [PATCH 260/371] chore(api): update dependency bleach to v6 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2703> --- api/poetry.lock | 13 ++++++------- api/pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index c35650df7..10eb63b76 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -427,13 +427,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "5.0.1" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] @@ -441,8 +441,7 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] +css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "boto3" @@ -4671,4 +4670,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "0c857e133722a6e45aace19a6985a7ed4bda98c9c413b6f5643a09cb39317289" +content-hash = "0302f29dd4de081e59ff0760135de372cd76a79ba1c2e4622e6a243fa8195df5" diff --git a/api/pyproject.toml b/api/pyproject.toml index ada0d7495..4ada82dbd 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -69,7 +69,7 @@ uvicorn = { version = "==0.20.0", extras = ["standard"] } aiohttp = "3.9.1" arrow = "==1.2.3" backports-zoneinfo = { version = "==0.2.1", python = "<3.9" } -bleach = "==5.0.1" +bleach = "==6.1.0" boto3 = "==1.26.161" click = "==8.1.7" cryptography = "==38.0.4" From ae9fea0cf1eb5b06720fb8382cb19ec7427d165a Mon Sep 17 00:00:00 2001 From: petitminion <pablodurandoz@riseup.net> Date: Tue, 30 Jan 2024 11:32:14 +0000 Subject: [PATCH 261/371] implement pylistenbrainz NOCHANGELOG --- .../contrib/listenbrainz/client.py | 168 ------ .../contrib/listenbrainz/funkwhale_ready.py | 27 +- .../radios/lb_recommendations.py | 10 +- api/poetry.lock | 514 +++++++++--------- api/pyproject.toml | 7 +- api/tests/radios/test_lb_recommendations.py | 16 +- 6 files changed, 286 insertions(+), 456 deletions(-) delete mode 100644 api/funkwhale_api/contrib/listenbrainz/client.py diff --git a/api/funkwhale_api/contrib/listenbrainz/client.py b/api/funkwhale_api/contrib/listenbrainz/client.py deleted file mode 100644 index 70db31dc3..000000000 --- a/api/funkwhale_api/contrib/listenbrainz/client.py +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright (c) 2018 Philipp Wolfer <ph.wolfer@gmail.com> -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -import json -import logging -import ssl -import time -from http.client import HTTPSConnection - -HOST_NAME = "api.listenbrainz.org" -PATH_SUBMIT = "/1/submit-listens" -SSL_CONTEXT = ssl.create_default_context() - - -class Track: - """ - Represents a single track to submit. - - See https://listenbrainz.readthedocs.io/en/latest/dev/json.html - """ - - def __init__(self, artist_name, track_name, release_name=None, additional_info={}): - """ - Create a new Track instance - @param artist_name as str - @param track_name as str - @param release_name as str - @param additional_info as dict - """ - self.artist_name = artist_name - self.track_name = track_name - self.release_name = release_name - self.additional_info = additional_info - - @staticmethod - def from_dict(data): - return Track( - data["artist_name"], - data["track_name"], - data.get("release_name", None), - data.get("additional_info", {}), - ) - - def to_dict(self): - return { - "artist_name": self.artist_name, - "track_name": self.track_name, - "release_name": self.release_name, - "additional_info": self.additional_info, - } - - def __repr__(self): - return f"Track({self.artist_name}, {self.track_name})" - - -class ListenBrainzClient: - """ - Submit listens to ListenBrainz.org. - - See https://listenbrainz.readthedocs.io/en/latest/dev/api.html - """ - - def __init__(self, user_token, logger=logging.getLogger(__name__)): - self.__next_request_time = 0 - self.user_token = user_token - self.logger = logger - - def listen(self, listened_at, track): - """ - Submit a listen for a track - @param listened_at as int - @param entry as Track - """ - payload = _get_payload(track, listened_at) - return self._submit("single", [payload]) - - def playing_now(self, track): - """ - Submit a playing now notification for a track - @param track as Track - """ - payload = _get_payload(track) - return self._submit("playing_now", [payload]) - - def import_tracks(self, tracks): - """ - Import a list of tracks as (listened_at, Track) pairs - @param track as [(int, Track)] - """ - payload = _get_payload_many(tracks) - return self._submit("import", payload) - - def _submit(self, listen_type, payload, retry=0): - self._wait_for_ratelimit() - self.logger.debug("ListenBrainz %s: %r", listen_type, payload) - data = {"listen_type": listen_type, "payload": payload} - headers = { - "Authorization": "Token %s" % self.user_token, - "Content-Type": "application/json", - } - body = json.dumps(data) - conn = HTTPSConnection(HOST_NAME, context=SSL_CONTEXT) - conn.request("POST", PATH_SUBMIT, body, headers) - response = conn.getresponse() - response_text = response.read() - try: - response_data = json.loads(response_text) - except json.decoder.JSONDecodeError: - response_data = response_text - - self._handle_ratelimit(response) - log_msg = f"Response {response.status}: {response_data!r}" - if response.status == 429 and retry < 5: # Too Many Requests - self.logger.warning(log_msg) - return self._submit(listen_type, payload, retry + 1) - elif response.status == 200: - self.logger.debug(log_msg) - else: - self.logger.error(log_msg) - return response - - def _wait_for_ratelimit(self): - now = time.time() - if self.__next_request_time > now: - delay = self.__next_request_time - now - self.logger.debug("Rate limit applies, delay %d", delay) - time.sleep(delay) - - def _handle_ratelimit(self, response): - remaining = int(response.getheader("X-RateLimit-Remaining", 0)) - reset_in = int(response.getheader("X-RateLimit-Reset-In", 0)) - self.logger.debug("X-RateLimit-Remaining: %i", remaining) - self.logger.debug("X-RateLimit-Reset-In: %i", reset_in) - if remaining == 0: - self.__next_request_time = time.time() + reset_in - - -def _get_payload_many(tracks): - payload = [] - for listened_at, track in tracks: - data = _get_payload(track, listened_at) - payload.append(data) - return payload - - -def _get_payload(track, listened_at=None): - data = {"track_metadata": track.to_dict()} - if listened_at is not None: - data["listened_at"] = listened_at - return data diff --git a/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py b/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py index 81b391840..8671c129b 100644 --- a/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py +++ b/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py @@ -1,7 +1,9 @@ +import liblistenbrainz +from django.utils import timezone + import funkwhale_api from config import plugins -from .client import ListenBrainzClient, Track from .funkwhale_startup import PLUGIN @@ -13,15 +15,14 @@ def submit_listen(listening, conf, **kwargs): logger = PLUGIN["logger"] logger.info("Submitting listen to ListenBrainz") - client = ListenBrainzClient(user_token=user_token, logger=logger) - track = get_track(listening.track) - client.listen(int(listening.creation_date.timestamp()), track) + client = liblistenbrainz.ListenBrainz() + client.set_auth_token(user_token) + listen = get_listen(listening.track) + + client.submit_single_listen(listen) -def get_track(track): - artist = track.artist.name - title = track.title - album = None +def get_listen(track): additional_info = { "media_player": "Funkwhale", "media_player_version": funkwhale_api.__version__, @@ -36,7 +37,7 @@ def get_track(track): if track.album: if track.album.title: - album = track.album.title + release_name = track.album.title if track.album.mbid: additional_info["release_mbid"] = str(track.album.mbid) @@ -47,4 +48,10 @@ def get_track(track): if upload: additional_info["duration"] = upload.duration - return Track(artist, title, album, additional_info) + return liblistenbrainz.Listen( + track_name=track.title, + artist_name=track.artist.name, + listened_at=int(timezone.now()), + release_name=release_name, + additional_info=additional_info, + ) diff --git a/api/funkwhale_api/radios/lb_recommendations.py b/api/funkwhale_api/radios/lb_recommendations.py index ad67c6e91..1ec84d4c8 100644 --- a/api/funkwhale_api/radios/lb_recommendations.py +++ b/api/funkwhale_api/radios/lb_recommendations.py @@ -38,14 +38,12 @@ def validate(config): return True -def build_radio_queryset(patch, config, radio_qs): - """Take a troi patch and its arg, match the missing mbid and then build a radio queryset""" - - logger.info("Config used for troi radio generation is " + str(config)) +def build_radio_queryset(patch, radio_qs): + """Take a troi patch, match the missing mbid and then build a radio queryset""" start_time = time.time() try: - recommendations = troi.core.generate_playlist(patch, config) + recommendations = patch.generate_playlist() except ConnectTimeout: raise ValueError( "Timed out while connecting to ListenBrainz. No candidates could be retrieved for the radio." @@ -145,4 +143,4 @@ class TroiPatch: def get_queryset(self, config, qs): patch_string = config.pop("patch") patch = patches[patch_string] - return build_radio_queryset(patch(), config, qs) + return build_radio_queryset(patch(config), qs) diff --git a/api/poetry.lock b/api/poetry.lock index 10eb63b76..9b5aed244 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1058,17 +1058,18 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "dill" -version = "0.3.7" +version = "0.3.8" description = "serialize all of Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "dj-rest-auth" @@ -1906,13 +1907,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.20.0" +version = "4.21.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, - {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, + {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, + {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, ] [package.dependencies] @@ -2038,117 +2039,126 @@ files = [ [[package]] name = "lb-matching-tools" -version = "0.1.0" +version = "2024.1.25.0rc1" description = "ListenBrainz tools for matching metadata to and from MusicBrainz." optional = false -python-versions = ">=3.7" -files = [] -develop = false +python-versions = ">=3.8" +files = [ + {file = "lb-matching-tools-2024.1.25.0rc1.tar.gz", hash = "sha256:fdfe14608b36d3f58f25f7887ae522e20ff4eae1b07ec3e48444920742979309"}, + {file = "lb_matching_tools-2024.1.25.0rc1-py3-none-any.whl", hash = "sha256:8af16870e4dd588ccdb836399a2dd47ebcf80495c317d606ac24c44e19673782"}, +] [package.dependencies] regex = "*" -[package.source] -type = "git" -url = "https://github.com/metabrainz/listenbrainz-matching-tools.git" -reference = "main" -resolved_reference = "5c0d9c1f2ef39bbb0b1f4892334b306ac2700cd9" +[package.extras] +build = ["build", "twine"] + +[[package]] +name = "liblistenbrainz" +version = "0.5.5" +description = "A simple ListenBrainz client library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "liblistenbrainz-0.5.5-py3-none-any.whl", hash = "sha256:6ffd5ed013c3a4b341a880136ccd5eb683e0a7a8983305f423aaf1b7adbad366"}, + {file = "liblistenbrainz-0.5.5.tar.gz", hash = "sha256:56eb564d0b0dab1b1bf77c01ec95c255fee3d84d51744b31851f2772ac95f41c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} +requests = ">=2.31.0" + +[package.extras] +build = ["build", "twine"] +docs = ["sphinx (==3.0.1)"] +tests = ["pytest (==5.4.1)", "pytest-cov (==2.8.1)"] [[package]] name = "lxml" -version = "5.0.0" +version = "5.1.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-5.0.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73bfab795d354aaf2f4eb7a5b0db513031734fd371047342d5803834ce19ec18"}, - {file = "lxml-5.0.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cb564bbe55ff0897d9cf1225041a44576d7ae87f06fd60163544c91de2623d3f"}, - {file = "lxml-5.0.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a5501438dd521bb7e0dde5008c40c7bfcfaafaf86eccb3f9bd27509abb793da"}, - {file = "lxml-5.0.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7ba26a7dc929a1b3487d51bbcb0099afed2fc06e891b82845c8f37a2d7d7fbbd"}, - {file = "lxml-5.0.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:9b59c429e1a2246da86ae237ffc3565efcdc71c281cd38ca8b44d5fb6a3b993a"}, - {file = "lxml-5.0.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:3ffa066db40b0347e48334bd4465de768e295a3525b9a59831228b5f4f93162d"}, - {file = "lxml-5.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8ce8b468ab50f9e944719d1134709ec11fe0d2840891a6cae369e22141b1094c"}, - {file = "lxml-5.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:583c0e15ae06adc81035346ae2abb2e748f0b5197e7740d8af31222db41bbf7b"}, - {file = "lxml-5.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:904d36165848b59c4e04ae5b969072e602bd987485076fca8ec42c6cd7a7aedc"}, - {file = "lxml-5.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ac21aace6712472e77ea9dfc38329f53830c4259ece54c786107105ebb069053"}, - {file = "lxml-5.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f92d73faa0b1a76d1932429d684b7ce95829e93c3eef3715ec9b98ab192c9d31"}, - {file = "lxml-5.0.0-cp310-cp310-win32.whl", hash = "sha256:03290e2f714f2e7431c8430c08b48167f657da7bc689c6248e828ff3c66d5b1b"}, - {file = "lxml-5.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3e6cbb68bf70081f036bfc018649cf4b46c4e7eaf7860a277cae92dee2a57f69"}, - {file = "lxml-5.0.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:5382612ba2424cea5d2c89e2c29077023d8de88f8d60d5ceff5f76334516df9e"}, - {file = "lxml-5.0.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:07a900735bad9af7be3085480bf384f68ed5580ba465b39a098e6a882c060d6b"}, - {file = "lxml-5.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:980ba47c8db4b9d870014c7040edb230825b79017a6a27aa54cdb6fcc02d8cc0"}, - {file = "lxml-5.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6507c58431dbd95b50654b3313c5ad54f90e54e5f2cdacf733de61eae478eec5"}, - {file = "lxml-5.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4a45a278518e4308865c1e9dbb2c42ce84fb154efb03adeb16fdae3c1687c7c9"}, - {file = "lxml-5.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:59cea9ba1c675fbd6867ca1078fc717a113e7f5b7644943b74137b7cc55abebf"}, - {file = "lxml-5.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd39ef87fd1f7bb5c4aa53454936e6135cbfe03fe3744e8218be193f9e4fef16"}, - {file = "lxml-5.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e6bb39d91bf932e7520cb5718ae3c2f498052aca53294d5d59fdd9068fe1a7f2"}, - {file = "lxml-5.0.0-cp311-cp311-win32.whl", hash = "sha256:21af2c3862db6f4f486cddf73ec1157b40d5828876c47cd880edcbad8240ea1b"}, - {file = "lxml-5.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:c1249aa4eaced30b59ecf8b8cae0b1ccede04583c74ca7d10b6f8bbead908b2c"}, - {file = "lxml-5.0.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:f30e697b6215e759d0824768b2c5b0618d2dc19abe6c67eeed2b0460f52470d1"}, - {file = "lxml-5.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d1bb64646480c36a4aa1b6a44a5b6e33d0fcbeab9f53f1b39072cd3bb2c6243a"}, - {file = "lxml-5.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4e69c36c8618707a90ed3fb6f48a6cc9254ffcdbf7b259e439a5ae5fbf9c5206"}, - {file = "lxml-5.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9ca498f8554a09fbc3a2f8fc4b23261e07bc27bef99b3df98e2570688033f6fc"}, - {file = "lxml-5.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0326e9b8176ea77269fb39e7af4010906e73e9496a9f8eaf06d253b1b1231ceb"}, - {file = "lxml-5.0.0-cp312-cp312-win32.whl", hash = "sha256:5fb988e15378d6e905ca8f60813950a0c56da9469d0e8e5d8fe785b282684ec5"}, - {file = "lxml-5.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:bb58e8f4b2cfe012cd312239b8d5139995fe8f5945c7c26d5fbbbb1ddb9acd47"}, - {file = "lxml-5.0.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81509dffd8aba3bdb43e90cbd218c9c068a1f4047d97bc9546b3ac9e3a4ae81d"}, - {file = "lxml-5.0.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e675a4b95208e74c34ac0751cc4bab9170e7728b61601fb0f4746892c2bb7e0b"}, - {file = "lxml-5.0.0-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:405e3760f83a8ba3bdb6e622ec79595cdc20db916ce37377bbcb95b5711fa4ca"}, - {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f15844a1b93dcaa09c2b22e22a73384f3ae4502347c3881cfdd674e14ac04e21"}, - {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88f559f8beb6b90e41a7faae4aca4c8173a4819874a9bf8e74c8d7c1d51f3162"}, - {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e8c63f5c7d87e7044880b01851ac4e863c3349e6f6b6ab456fe218d9346e816d"}, - {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:0d277d4717756fe8816f0beeff229cb72f9dd02a43b70e1d3f07c8efadfb9fe1"}, - {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c8954da15403db1acfc0544b3c3f963a6ef4e428283ab6555e3e298bbbff1cf6"}, - {file = "lxml-5.0.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:aebd8fd378e074b22e79cad329dcccd243c40ff1cafaa512d19276c5bb9554e1"}, - {file = "lxml-5.0.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b6d4e148edee59c2ad38af15810dbcb8b5d7b13e5de3509d8cf3edfe74c0adca"}, - {file = "lxml-5.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:70ab4e02f7aa5fb4131c8b222a111ce7676f3767e36084fba3a4e7338dc82dcd"}, - {file = "lxml-5.0.0-cp36-cp36m-win32.whl", hash = "sha256:de1a8b54170024cf1c0c2718c82412bca42cd82e390556e3d8031af9541b416f"}, - {file = "lxml-5.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5b39f63edbe7e018c2ac1cf0259ee0dd2355274e8a3003d404699b040782e55e"}, - {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:77b73952534967a4497d9e4f26fbeebfba19950cbc66b7cc3a706214429d8106"}, - {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8cc0a951e5616ac626f7036309c41fb9774adcd4aa7db0886463da1ce5b65edb"}, - {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:4b9d5b01900a760eb3acf6cef50aead4ef2fa79e7ddb927084244e41dfe37b65"}, - {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:173bcead3af5d87c7bca9a030675073ddaad8e0a9f0b04be07cd9390453e7226"}, - {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44fa9afd632210f1eeda51cf284ed8dbab0c7ec8b008dd39ba02818e0e114e69"}, - {file = "lxml-5.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fef10f27d6318d2d7c88680e113511ddecf09ee4f9559b3623b73ee89fa8f6cc"}, - {file = "lxml-5.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3663542aee845129a981889c19b366beab0b1dadcf5ca164696aabfe1aa51667"}, - {file = "lxml-5.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7188495c1bf71bfda87d78ed50601e72d252119ce11710d6e71ff36e35fea5a0"}, - {file = "lxml-5.0.0-cp37-cp37m-win32.whl", hash = "sha256:6a2de85deabf939b0af89e2e1ea46bfb1239545e2da6f8ac96522755a388025f"}, - {file = "lxml-5.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ea56825c1e23c9c8ea385a191dac75f9160477057285b88c88736d9305e6118f"}, - {file = "lxml-5.0.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:3f908afd0477cace17f941d1b9cfa10b769fe1464770abe4cfb3d9f35378d0f8"}, - {file = "lxml-5.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52a9ab31853d3808e7cf0183b3a5f7e8ffd622ea4aee1deb5252dbeaefd5b40d"}, - {file = "lxml-5.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c7fe19abb3d3c55a9e65d289b12ad73b3a31a3f0bda3c539a890329ae9973bd6"}, - {file = "lxml-5.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:1ef0793e1e2dd221fce7c142177008725680f7b9e4a184ab108d90d5d3ab69b7"}, - {file = "lxml-5.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:581a78f299a9f5448b2c3aea904bfcd17c59bf83016d221d7f93f83633bb2ab2"}, - {file = "lxml-5.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:affdd833f82334fdb10fc9a1c7b35cdb5a86d0b672b4e14dd542e1fe7bcea894"}, - {file = "lxml-5.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6bba06d8982be0f0f6432d289a8d104417a0ab9ed04114446c4ceb6d4a40c65d"}, - {file = "lxml-5.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:80209b31dd3908bc5b014f540fd192c97ea52ab179713a730456c5baf7ce80c1"}, - {file = "lxml-5.0.0-cp38-cp38-win32.whl", hash = "sha256:dac2733fe4e159b0aae0439db6813b7b1d23ff96d0b34c0107b87faf79208c4e"}, - {file = "lxml-5.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:ee60f33456ff34b2dd1d048a740a2572798356208e4c494301c931de3a0ab3a2"}, - {file = "lxml-5.0.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:5eff173f0ff408bfa578cbdafd35a7e0ca94d1a9ffe09a8a48e0572d0904d486"}, - {file = "lxml-5.0.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:78d6d8e5b54ed89dc0f0901eaaa579c384ad8d59fa43cc7fb06e9bb89115f8f4"}, - {file = "lxml-5.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:71a7cee869578bc17b18050532bb2f0bc682a7b97dda77041741a1bd2febe6c7"}, - {file = "lxml-5.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7df433d08d4587dc3932f7fcfc3194519a6824824104854e76441fd3bc000d29"}, - {file = "lxml-5.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:793be9b4945c2dfd69828fb5948d7d9569b78e0599e4a2e88d92affeb0ff3aa3"}, - {file = "lxml-5.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c7cfb6af73602c8d288581df8a225989d7e9d5aab0a174be0e19fcfa800b6797"}, - {file = "lxml-5.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bfdc4668ac56687a89ca3eca44231144a2e9d02ba3b877558db74ba20e2bd9fa"}, - {file = "lxml-5.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2992591e2294bb07faf7f5f6d5cb60710c046404f4bfce09fb488b85d2a8f58f"}, - {file = "lxml-5.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4786b0af7511ea614fd86407a52a7bc161aa5772d311d97df2591ed2351de768"}, - {file = "lxml-5.0.0-cp39-cp39-win32.whl", hash = "sha256:016de3b29a262655fc3d2075dc1b2611f84f4c3d97a71d579c883d45e201eee4"}, - {file = "lxml-5.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:52c0acc2f29b0a204efc11a5ed911a74f50a25eb7d7d5069c2b1fd3b3346ce11"}, - {file = "lxml-5.0.0-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:96095bfc0c02072fc89afa67626013a253596ea5118b8a7f4daaae049dafa096"}, - {file = "lxml-5.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:992029258ed719f130d5a9c443d142c32843046f1263f2c492862b2a853be570"}, - {file = "lxml-5.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:db40e85cffd22f7d65dcce30e85af565a66401a6ed22fc0c56ed342cfa4ffc43"}, - {file = "lxml-5.0.0-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:cfa8a4cdc3765574b7fd0c7cfa5fbd1e2108014c9dfd299c679e5152bea9a55e"}, - {file = "lxml-5.0.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:049fef98d02513c34f5babd07569fc1cf1ed14c0f2fbff18fe72597f977ef3c2"}, - {file = "lxml-5.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a85136d0ee18a41c91cc3e2844c683be0e72e6dda4cb58da9e15fcaef3726af7"}, - {file = "lxml-5.0.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:766868f729f3ab84125350f1a0ea2594d8b1628a608a574542a5aff7355b9941"}, - {file = "lxml-5.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:99cad5c912f359e59e921689c04e54662cdd80835d80eeaa931e22612f515df7"}, - {file = "lxml-5.0.0-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:c90c593aa8dd57d5dab0ef6d7d64af894008971d98e6a41b320fdd75258fbc6e"}, - {file = "lxml-5.0.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8134d5441d1ed6a682e3de3d7a98717a328dce619ee9c4c8b3b91f0cb0eb3e28"}, - {file = "lxml-5.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f298ac9149037d6a3d5c74991bded39ac46292520b9c7c182cb102486cc87677"}, - {file = "lxml-5.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:894c5f71186b410679aaab5774543fcb9cbabe8893f0b31d11cf28a0740e80be"}, - {file = "lxml-5.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9cd3d6c2c67d4fdcd795e4945e2ba5434909c96640b4cc09453bd0dc7e8e1bac"}, - {file = "lxml-5.0.0.zip", hash = "sha256:2219cbf790e701acf9a21a31ead75f983e73daf0eceb9da6990212e4d20ebefe"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, ] [package.extras] @@ -2202,13 +2212,13 @@ files = [ [[package]] name = "more-itertools" -version = "10.1.0" +version = "10.2.0" description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" files = [ - {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, - {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, + {file = "more-itertools-10.2.0.tar.gz", hash = "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"}, + {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, ] [[package]] @@ -2576,13 +2586,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -2941,25 +2951,6 @@ files = [ [package.dependencies] pylint = ">=1.7" -[[package]] -name = "pylistenbrainz" -version = "0.5.2" -description = "A simple ListenBrainz client library for Python" -optional = false -python-versions = ">=3.5" -files = [] -develop = false - -[package.dependencies] -importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} -requests = ">=2.23.0" - -[package.source] -type = "git" -url = "https://github.com/metabrainz/pylistenbrainz.git" -reference = "v0.5.2" -resolved_reference = "f66414d2da3a260b9d4322d42f98ec7a6d6b982f" - [[package]] name = "pyopenssl" version = "23.2.0" @@ -3152,13 +3143,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.0" +version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, ] [package.extras] @@ -3209,13 +3200,13 @@ postgresql = ["psycopg2"] [[package]] name = "pytz" -version = "2023.3.post1" +version = "2023.4" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, + {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, ] [[package]] @@ -3298,13 +3289,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "referencing" -version = "0.32.0" +version = "0.33.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.32.0-py3-none-any.whl", hash = "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99"}, - {file = "referencing-0.32.0.tar.gz", hash = "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161"}, + {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, + {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, ] [package.dependencies] @@ -3415,20 +3406,20 @@ files = [ [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -3488,110 +3479,110 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rpds-py" -version = "0.16.2" +version = "0.17.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f"}, - {file = "rpds_py-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04"}, - {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7"}, - {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b"}, - {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9"}, - {file = "rpds_py-0.16.2-cp310-none-win32.whl", hash = "sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82"}, - {file = "rpds_py-0.16.2-cp310-none-win_amd64.whl", hash = "sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e"}, - {file = "rpds_py-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb"}, - {file = "rpds_py-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e"}, - {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018"}, - {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b"}, - {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8"}, - {file = "rpds_py-0.16.2-cp311-none-win32.whl", hash = "sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3"}, - {file = "rpds_py-0.16.2-cp311-none-win_amd64.whl", hash = "sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d"}, - {file = "rpds_py-0.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d"}, - {file = "rpds_py-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748"}, - {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b"}, - {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f"}, - {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58"}, - {file = "rpds_py-0.16.2-cp312-none-win32.whl", hash = "sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3"}, - {file = "rpds_py-0.16.2-cp312-none-win_amd64.whl", hash = "sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5"}, - {file = "rpds_py-0.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60"}, - {file = "rpds_py-0.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b"}, - {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261"}, - {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc"}, - {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365"}, - {file = "rpds_py-0.16.2-cp38-none-win32.whl", hash = "sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff"}, - {file = "rpds_py-0.16.2-cp38-none-win_amd64.whl", hash = "sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851"}, - {file = "rpds_py-0.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e"}, - {file = "rpds_py-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0"}, - {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773"}, - {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00"}, - {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45"}, - {file = "rpds_py-0.16.2-cp39-none-win32.whl", hash = "sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d"}, - {file = "rpds_py-0.16.2-cp39-none-win_amd64.whl", hash = "sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac"}, - {file = "rpds_py-0.16.2.tar.gz", hash = "sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, + {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, + {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, + {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, + {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, + {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, + {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, + {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, + {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, + {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, + {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, + {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, ] [[package]] @@ -3834,30 +3825,31 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "troi" -version = "0.1.0" +version = "2024.1.26.0" description = "An empathetic music recommendation system pipeline" optional = false -python-versions = ">=3.6" -files = [] -develop = false +python-versions = ">=3.8" +files = [ + {file = "troi-2024.1.26.0-py3-none-any.whl", hash = "sha256:85c66ab9a5a86f5e738471b315f73cf4aadbbabe7a26ca536331894fbd55985e"}, + {file = "troi-2024.1.26.0.tar.gz", hash = "sha256:2ccecad1662b65faa702c770092ef6b84f06979469d57248ef6f3f6f920437a3"}, +] [package.dependencies] click = ">=8.0" countryinfo = ">=0.1.2" -more_itertools = "*" +liblistenbrainz = ">=v0.5.5" +more-itertools = "*" psycopg2-binary = ">=2.9.3" -pylistenbrainz = {git = "https://github.com/metabrainz/pylistenbrainz.git", rev = "v0.5.2"} pyparsing = "*" python-dateutil = ">=2.8.2" requests = "*" spotipy = ">=2.22.1" ujson = ">=5.4.0" -[package.source] -type = "git" -url = "https://github.com/metabrainz/troi-recommendation-playground.git" -reference = "v-2023-10-30.0" -resolved_reference = "a0ca6f9e064eb3a5872db0299a46780f2d118821" +[package.extras] +build = ["build"] +docs = ["Sphinx (==5.0.2)", "docutils (==0.17.1)", "sphinx-click (==4.3.0)", "sphinx-rtd-theme (==0.5.1)", "sphinxcontrib-httpdomain (==1.8.0)"] +tests = ["pytest (==7.1.2)", "pytest-cov (==4.1.0)", "requests-mock (==1.11.0)"] [[package]] name = "twisted" @@ -4313,13 +4305,13 @@ anyio = ">=3.0.0" [[package]] name = "wcwidth" -version = "0.2.12" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, - {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] [[package]] @@ -4670,4 +4662,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "0302f29dd4de081e59ff0760135de372cd76a79ba1c2e4622e6a243fa8195df5" +content-hash = "5c85b6f20979a6df604eb16a896ed99047c0d324af8e2dc99d9c46f522eda2a7" diff --git a/api/pyproject.toml b/api/pyproject.toml index 4ada82dbd..1ef774a49 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -74,18 +74,19 @@ boto3 = "==1.26.161" click = "==8.1.7" cryptography = "==38.0.4" feedparser = "==6.0.10" +liblistenbrainz = "==0.5.5" musicbrainzngs = "==0.7.1" mutagen = "==1.46.0" pillow = "10.1.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" -requests = "==2.28.2" +requests = "==2.31.0" requests-http-message-signatures = "==0.3.1" sentry-sdk = "==1.19.1" watchdog = "==2.2.1" -troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", tag = "v-2023-10-30.0"} -lb-matching-tools = { git = "https://github.com/metabrainz/listenbrainz-matching-tools.git", branch = "main"} +troi = "==2024.1.26.0" +lb-matching-tools = "==2024.1.25.0rc1" unidecode = "==1.3.7" pycountry = "22.3.5" diff --git a/api/tests/radios/test_lb_recommendations.py b/api/tests/radios/test_lb_recommendations.py index d495a2e0e..ac4c29480 100644 --- a/api/tests/radios/test_lb_recommendations.py +++ b/api/tests/radios/test_lb_recommendations.py @@ -24,7 +24,7 @@ def test_can_build_radio_queryset_with_fw_db(factories, mocker): mocker.patch("funkwhale_api.typesense.utils.resolve_recordings_to_fw_track") radio_qs = lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) recommended_recording_mbids = [ "87dfa566-21c3-45ed-bc42-1d345b8563fa", @@ -46,7 +46,7 @@ def test_build_radio_queryset_without_fw_db(mocker): with pytest.raises(ValueError): lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) assert resolve_recordings_to_fw_track.called_once_with( @@ -67,7 +67,7 @@ def test_build_radio_queryset_with_redis_and_fw_db(factories, mocker): assert list( lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) ) == list(Track.objects.all().filter(pk__in=[1, 2])) @@ -84,14 +84,14 @@ def test_build_radio_queryset_with_redis_and_without_fw_db(factories, mocker): assert list( lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) ) == list(Track.objects.all().filter(pk=1)) def test_build_radio_queryset_catch_troi_ConnectTimeout(mocker): mocker.patch.object( - troi.core, + troi.core.Patch, "generate_playlist", side_effect=ConnectTimeout, ) @@ -99,18 +99,18 @@ def test_build_radio_queryset_catch_troi_ConnectTimeout(mocker): with pytest.raises(ValueError): lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) def test_build_radio_queryset_catch_troi_no_candidates(mocker): mocker.patch.object( - troi.core, + troi.core.Patch, "generate_playlist", ) qs = Track.objects.all() with pytest.raises(ValueError): lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) From bfff1f85f9f0df9a91b3b5f49f77e01e53ba0318 Mon Sep 17 00:00:00 2001 From: Petitminion <petitminion@riseup.net> Date: Mon, 29 Jan 2024 21:11:12 +0100 Subject: [PATCH 262/371] make typesense task conditionnal Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2706> --- api/config/settings/common.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index daab8f8b1..b87eed782 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -942,12 +942,14 @@ CELERY_BEAT_SCHEDULE = { ), "options": {"expires": 60 * 60}, }, - "typesense.build_canonical_index": { +} + +if env.str("TYPESENSE_API_KEY", default=None): + CELERY_BEAT_SCHEDULE["typesense.build_canonical_index"] = { "task": "typesense.build_canonical_index", "schedule": crontab(day_of_week="*/2", minute="0", hour="3"), "options": {"expires": 60 * 60 * 24}, - }, -} + } if env.bool("ADD_ALBUM_TAGS_FROM_TRACKS", default=True): CELERY_BEAT_SCHEDULE["music.albums_set_tags_from_tracks"] = { From 1e0f3abb54078e99a972ad5be4cb6992fe6c69be Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 10 Dec 2023 12:12:24 +0000 Subject: [PATCH 263/371] chore(api): update alpine docker tag to v3.19 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2689> --- api/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index c6e0ee473..6c464197b 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.17 as requirements +FROM alpine:3.19 as requirements # We need this additional step to avoid having poetrys deps interacting with our # dependencies. This is only required until alpine 3.16 is released, since this @@ -16,7 +16,7 @@ RUN set -eux; \ poetry export --without-hashes --extras typesense > requirements.txt; \ poetry export --without-hashes --with dev > dev-requirements.txt; -FROM alpine:3.17 as builder +FROM alpine:3.19 as builder ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 @@ -84,7 +84,7 @@ RUN --mount=type=cache,target=~/.cache/pip; \ watchfiles==0.18.1; \ fi -FROM alpine:3.17 as production +FROM alpine:3.19 as production ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 From 90c9230a604da242f741ca6e6188102e4d05548f Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 11 Dec 2023 13:30:43 +0000 Subject: [PATCH 264/371] chore(api): Update dependencies to align with Alpine 3.19 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2689> --- api/Dockerfile | 32 +++++----- api/poetry.lock | 91 ++++++++++++----------------- api/pyproject.toml | 4 +- changes/changelog.d/alpine-319.misc | 1 + 4 files changed, 55 insertions(+), 73 deletions(-) create mode 100644 changes/changelog.d/alpine-319.misc diff --git a/api/Dockerfile b/api/Dockerfile index 6c464197b..0c570835b 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,9 +1,5 @@ FROM alpine:3.19 as requirements -# We need this additional step to avoid having poetrys deps interacting with our -# dependencies. This is only required until alpine 3.16 is released, since this -# allows us to install poetry as package. - RUN set -eux; \ apk add --no-cache \ poetry \ @@ -41,11 +37,11 @@ RUN set -eux; \ openssl-dev \ postgresql-dev \ zlib-dev \ - py3-cryptography=38.0.3-r1 \ + py3-cryptography=41.0.7-r0 \ py3-lxml=4.9.3-r1 \ - py3-pillow=9.3.0-r0 \ - py3-psycopg2=2.9.5-r0 \ - py3-watchfiles=0.18.1-r0 \ + py3-pillow=10.1.0-r1 \ + py3-psycopg2=2.9.9-r0 \ + py3-watchfiles=0.19.0-r1 \ python3-dev # Create virtual env @@ -65,11 +61,11 @@ RUN --mount=type=cache,target=~/.cache/pip; \ # to install the deps using pip. grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /requirements.txt \ | pip3 install -r /dev/stdin \ - cryptography==38.0.3 \ + cryptography==41.0.7 \ lxml==4.9.3 \ - pillow==9.3.0 \ - psycopg2==2.9.5 \ - watchfiles==0.18.1 + pillow==10.1.0 \ + psycopg2==2.9.9 \ + watchfiles==0.19.0 ARG install_dev_deps=0 RUN --mount=type=cache,target=~/.cache/pip; \ @@ -80,8 +76,8 @@ RUN --mount=type=cache,target=~/.cache/pip; \ cryptography==38.0.3 \ lxml==4.9.3 \ pillow==9.3.0 \ - psycopg2==2.9.5 \ - watchfiles==0.18.1; \ + psycopg2==2.9.9 \ + watchfiles==0.19.0; \ fi FROM alpine:3.19 as production @@ -101,11 +97,11 @@ RUN set -eux; \ libpq \ libxml2 \ libxslt \ - py3-cryptography=38.0.3-r1 \ + py3-cryptography=41.0.7-r0 \ py3-lxml=4.9.3-r1 \ - py3-pillow=9.3.0-r0 \ - py3-psycopg2=2.9.5-r0 \ - py3-watchfiles=0.18.1-r0 \ + py3-pillow=10.1.0-r1 \ + py3-psycopg2=2.9.9-r0 \ + py3-watchfiles=0.19.0-r1 \ python3 \ tzdata diff --git a/api/poetry.lock b/api/poetry.lock index 9b5aed244..6d81137de 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -927,49 +927,48 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "38.0.4" +version = "41.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"}, - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0"}, - {file = "cryptography-38.0.4-cp36-abi3-win32.whl", hash = "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744"}, - {file = "cryptography-38.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"}, - {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"}, + {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf"}, + {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1"}, + {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157"}, + {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406"}, + {file = "cryptography-41.0.7-cp37-abi3-win32.whl", hash = "sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d"}, + {file = "cryptography-41.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309"}, + {file = "cryptography-41.0.7.tar.gz", hash = "sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc"}, ] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] [[package]] name = "daphne" @@ -2679,7 +2678,6 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -2688,8 +2686,6 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -2953,20 +2949,20 @@ pylint = ">=1.7" [[package]] name = "pyopenssl" -version = "23.2.0" +version = "24.0.0" description = "Python wrapper module around the OpenSSL library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, - {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, + {file = "pyOpenSSL-24.0.0-py3-none-any.whl", hash = "sha256:ba07553fb6fd6a7a2259adb9b84e12302a9a8a75c44046e8bb5d3e5ee887e3c3"}, + {file = "pyOpenSSL-24.0.0.tar.gz", hash = "sha256:6aa33039a93fffa4563e655b61d11364d01264be8ccb49906101e02a334530bf"}, ] [package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" +cryptography = ">=41.0.5,<43" [package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] test = ["flaky", "pretend", "pytest (>=3.0.1)"] [[package]] @@ -3221,7 +3217,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3229,16 +3224,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3255,7 +3242,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3263,7 +3249,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -4662,4 +4647,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "5c85b6f20979a6df604eb16a896ed99047c0d324af8e2dc99d9c46f522eda2a7" +content-hash = "19b1f42c22a8ddba9e587ce2c1282c6492f9c9c3f8b418755351fa68bfd20a99" diff --git a/api/pyproject.toml b/api/pyproject.toml index 1ef774a49..31ecf1c48 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -72,12 +72,12 @@ backports-zoneinfo = { version = "==0.2.1", python = "<3.9" } bleach = "==6.1.0" boto3 = "==1.26.161" click = "==8.1.7" -cryptography = "==38.0.4" +cryptography = "==41.0.7" feedparser = "==6.0.10" liblistenbrainz = "==0.5.5" musicbrainzngs = "==0.7.1" mutagen = "==1.46.0" -pillow = "10.1.0" +pillow = "==10.1.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" diff --git a/changes/changelog.d/alpine-319.misc b/changes/changelog.d/alpine-319.misc new file mode 100644 index 000000000..91adac627 --- /dev/null +++ b/changes/changelog.d/alpine-319.misc @@ -0,0 +1 @@ +Use Alpine 3.19 as base for docker images From e0791b570f6507cfe80b1c8d7cdc5e6881c74ece Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 17:05:15 +0100 Subject: [PATCH 265/371] chore(api): Update dependency pillow to 10.2.0 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2689> --- api/Dockerfile | 10 ++-- api/poetry.lock | 130 ++++++++++++++++++++++++++------------------- api/pyproject.toml | 2 +- 3 files changed, 80 insertions(+), 62 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 0c570835b..fe400c5b7 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -39,7 +39,7 @@ RUN set -eux; \ zlib-dev \ py3-cryptography=41.0.7-r0 \ py3-lxml=4.9.3-r1 \ - py3-pillow=10.1.0-r1 \ + py3-pillow=10.2.0-r0 \ py3-psycopg2=2.9.9-r0 \ py3-watchfiles=0.19.0-r1 \ python3-dev @@ -63,7 +63,7 @@ RUN --mount=type=cache,target=~/.cache/pip; \ | pip3 install -r /dev/stdin \ cryptography==41.0.7 \ lxml==4.9.3 \ - pillow==10.1.0 \ + pillow==10.2.0 \ psycopg2==2.9.9 \ watchfiles==0.19.0 @@ -73,9 +73,9 @@ RUN --mount=type=cache,target=~/.cache/pip; \ if [ "$install_dev_deps" = "1" ] ; then \ grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /dev-requirements.txt \ | pip3 install -r /dev/stdin \ - cryptography==38.0.3 \ + cryptography==41.0.7 \ lxml==4.9.3 \ - pillow==9.3.0 \ + pillow==10.2.0 \ psycopg2==2.9.9 \ watchfiles==0.19.0; \ fi @@ -99,7 +99,7 @@ RUN set -eux; \ libxslt \ py3-cryptography=41.0.7-r0 \ py3-lxml=4.9.3-r1 \ - py3-pillow=10.1.0-r1 \ + py3-pillow=10.2.0-r0 \ py3-psycopg2=2.9.9-r0 \ py3-watchfiles=0.19.0-r1 \ python3 \ diff --git a/api/poetry.lock b/api/poetry.lock index 6d81137de..8635012f4 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2492,70 +2492,88 @@ files = [ [[package]] name = "pillow" -version = "10.1.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pkgutil-resolve-name" @@ -4647,4 +4665,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "19b1f42c22a8ddba9e587ce2c1282c6492f9c9c3f8b418755351fa68bfd20a99" +content-hash = "f374276eb9cff4d7713808badfc9c6012f8f2b7ece2b340a1c1b2a40acd09dd7" diff --git a/api/pyproject.toml b/api/pyproject.toml index 31ecf1c48..64577c6d0 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -77,7 +77,7 @@ feedparser = "==6.0.10" liblistenbrainz = "==0.5.5" musicbrainzngs = "==0.7.1" mutagen = "==1.46.0" -pillow = "==10.1.0" +pillow = "==10.2.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" From 9b8828ca42716db635896e4d7e5dc6af818d67a4 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Wed, 31 Jan 2024 21:04:25 +0000 Subject: [PATCH 266/371] chore(api): update dependency django-cacheops to v7 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2719> --- api/poetry.lock | 27 ++++++++++++++++++++------- api/pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 8635012f4..15ac350d0 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1158,19 +1158,18 @@ dev = ["black", "flake8", "therapist", "tox", "twine"] [[package]] name = "django-cacheops" -version = "6.1" +version = "7.0.2" description = "A slick ORM cache with automatic granular event-driven invalidation for Django." optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "django-cacheops-6.1.tar.gz", hash = "sha256:b684ef39fd434189d3cbb7d85417cd972af635289a032447982473b4a89f727d"}, + {file = "django-cacheops-7.0.2.tar.gz", hash = "sha256:77a37c73d7facfc7299365ed66a12be7a487dd745dd86c1d33ca2ebfd3b32878"}, ] [package.dependencies] -django = ">=2.1" -funcy = ">=1.8,<2.0" +django = ">=3.2" +funcy = ">=1.8,<3.0" redis = ">=3.0.0" -six = ">=1.4.0" [[package]] name = "django-cleanup" @@ -2696,6 +2695,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -2704,6 +2704,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -3235,6 +3237,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3242,8 +3245,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3260,6 +3271,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3267,6 +3279,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -4665,4 +4678,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "f374276eb9cff4d7713808badfc9c6012f8f2b7ece2b340a1c1b2a40acd09dd7" +content-hash = "cf05e690b5bceb8df75db80bbebfcfec258f5a545f6fc7790c38bc69c568d6e5" diff --git a/api/pyproject.toml b/api/pyproject.toml index 64577c6d0..8651b1968 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -32,7 +32,7 @@ dj-rest-auth = "5.0.2" django = "==3.2.23" django-allauth = "0.55.2" django-cache-memoize = "0.1.10" -django-cacheops = "==6.1" +django-cacheops = "==7.0.2" django-cleanup = "==6.0.0" django-cors-headers = "==3.13.0" django-dynamic-preferences = "==1.14.0" From fa36c97d727d4ca048243eb85e0f41d42f4a1195 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Wed, 31 Jan 2024 22:04:12 +0000 Subject: [PATCH 267/371] chore(api): update dependency django-cleanup to v8 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2720> --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 15ac350d0..33e0c8457 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1173,13 +1173,13 @@ redis = ">=3.0.0" [[package]] name = "django-cleanup" -version = "6.0.0" +version = "8.1.0" description = "Deletes old files." optional = false python-versions = "*" files = [ - {file = "django-cleanup-6.0.0.tar.gz", hash = "sha256:922e06ef8839c92bd3ab37a84db6058b8764f3fe44dbb4487bbca941d288280a"}, - {file = "django_cleanup-6.0.0-py2.py3-none-any.whl", hash = "sha256:997feab3b1f7a2e84f71c29e83b1d664459ec0d4b1924977b1fa25b5babb8703"}, + {file = "django-cleanup-8.1.0.tar.gz", hash = "sha256:70df905076a44e7a111b31198199af633dee08876e199e6dce36ca8dd6b8b10f"}, + {file = "django_cleanup-8.1.0-py2.py3-none-any.whl", hash = "sha256:7903873ea73b3f7e61e055340d27dba49b70634f60c87a573ad748e172836458"}, ] [[package]] @@ -4678,4 +4678,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "cf05e690b5bceb8df75db80bbebfcfec258f5a545f6fc7790c38bc69c568d6e5" +content-hash = "cb48c83de814b32f508bbaacc756113b1a559360ebe523f3760677752730bb94" diff --git a/api/pyproject.toml b/api/pyproject.toml index 8651b1968..d43fc0239 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -33,7 +33,7 @@ django = "==3.2.23" django-allauth = "0.55.2" django-cache-memoize = "0.1.10" django-cacheops = "==7.0.2" -django-cleanup = "==6.0.0" +django-cleanup = "==8.1.0" django-cors-headers = "==3.13.0" django-dynamic-preferences = "==1.14.0" django-environ = "==0.10.0" From 40d2dcaeaf204aa3788024c7e6f231047afd9bf5 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Wed, 31 Jan 2024 23:05:24 +0000 Subject: [PATCH 268/371] chore(api): update dependency django-cors-headers to v4 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2721> --- api/poetry.lock | 11 ++++++----- api/pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 33e0c8457..a522cd778 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1184,16 +1184,17 @@ files = [ [[package]] name = "django-cors-headers" -version = "3.13.0" +version = "4.3.1" description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "django-cors-headers-3.13.0.tar.gz", hash = "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf"}, - {file = "django_cors_headers-3.13.0-py3-none-any.whl", hash = "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4"}, + {file = "django-cors-headers-4.3.1.tar.gz", hash = "sha256:0bf65ef45e606aff1994d35503e6b677c0b26cafff6506f8fd7187f3be840207"}, + {file = "django_cors_headers-4.3.1-py3-none-any.whl", hash = "sha256:0b1fd19297e37417fc9f835d39e45c8c642938ddba1acce0c1753d3edef04f36"}, ] [package.dependencies] +asgiref = ">=3.6" Django = ">=3.2" [[package]] @@ -4678,4 +4679,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "cb48c83de814b32f508bbaacc756113b1a559360ebe523f3760677752730bb94" +content-hash = "34224a2233d16ca90ef6b82816e7af7eab6aea555344944816769f9207cb4189" diff --git a/api/pyproject.toml b/api/pyproject.toml index d43fc0239..2845626fd 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -34,7 +34,7 @@ django-allauth = "0.55.2" django-cache-memoize = "0.1.10" django-cacheops = "==7.0.2" django-cleanup = "==8.1.0" -django-cors-headers = "==3.13.0" +django-cors-headers = "==4.3.1" django-dynamic-preferences = "==1.14.0" django-environ = "==0.10.0" django-filter = "==22.1" From 132e2917088711e7ea9010e01cc790fad436eadb Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 00:05:36 +0000 Subject: [PATCH 269/371] chore(api): update dependency django-debug-toolbar to v4 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2722> --- api/poetry.lock | 10 +++++----- api/pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index a522cd778..45e732fc7 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1213,13 +1213,13 @@ coverage = "*" [[package]] name = "django-debug-toolbar" -version = "3.8.1" +version = "4.2.0" description = "A configurable set of panels that display various debug information about the current request/response." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "django_debug_toolbar-3.8.1-py3-none-any.whl", hash = "sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478"}, - {file = "django_debug_toolbar-3.8.1.tar.gz", hash = "sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27"}, + {file = "django_debug_toolbar-4.2.0-py3-none-any.whl", hash = "sha256:af99128c06e8e794479e65ab62cc6c7d1e74e1c19beb44dcbf9bad7a9c017327"}, + {file = "django_debug_toolbar-4.2.0.tar.gz", hash = "sha256:bc7fdaafafcdedefcc67a4a5ad9dac96efd6e41db15bc74d402a54a2ba4854dc"}, ] [package.dependencies] @@ -4679,4 +4679,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "34224a2233d16ca90ef6b82816e7af7eab6aea555344944816769f9207cb4189" +content-hash = "ba33262cfd3d56c71c2fd3173ee277c87479235113af726001dadbb4b3dfa665" diff --git a/api/pyproject.toml b/api/pyproject.toml index 2845626fd..bb3b879e3 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -106,7 +106,7 @@ black = "==24.1.1" coverage = { version = "==7.4.1", extras = ["toml"] } debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" -django-debug-toolbar = "==3.8.1" +django-debug-toolbar = "==4.2.0" factory-boy = "==3.2.1" faker = "==15.3.4" flake8 = "==3.9.2" From 004d535eb7774925758b3a1b645bfaf8a5415d6e Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 01:15:04 +0000 Subject: [PATCH 270/371] chore(api): update dependency django-filter to v23 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2723> --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 45e732fc7..7dc9b60f8 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1273,13 +1273,13 @@ Django = ">=3.2" [[package]] name = "django-filter" -version = "22.1" +version = "23.5" description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." optional = false python-versions = ">=3.7" files = [ - {file = "django-filter-22.1.tar.gz", hash = "sha256:ed473b76e84f7e83b2511bb2050c3efb36d135207d0128dfe3ae4b36e3594ba5"}, - {file = "django_filter-22.1-py3-none-any.whl", hash = "sha256:ed429e34760127e3520a67f415bec4c905d4649fbe45d0d6da37e6ff5e0287eb"}, + {file = "django-filter-23.5.tar.gz", hash = "sha256:67583aa43b91fe8c49f74a832d95f4d8442be628fd4c6d65e9f811f5153a4e5c"}, + {file = "django_filter-23.5-py3-none-any.whl", hash = "sha256:99122a201d83860aef4fe77758b69dda913e874cc5e0eaa50a86b0b18d708400"}, ] [package.dependencies] @@ -4679,4 +4679,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "ba33262cfd3d56c71c2fd3173ee277c87479235113af726001dadbb4b3dfa665" +content-hash = "c4bea4a0d93aea07910fb93594dce5a901da6d6fcde9ec9b3ce2408091ec2f64" diff --git a/api/pyproject.toml b/api/pyproject.toml index bb3b879e3..59b007cc2 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -37,7 +37,7 @@ django-cleanup = "==8.1.0" django-cors-headers = "==4.3.1" django-dynamic-preferences = "==1.14.0" django-environ = "==0.10.0" -django-filter = "==22.1" +django-filter = "==23.5" django-oauth-toolkit = "2.2.0" django-redis = "==5.2.0" django-storages = "==1.13.2" From 4148cdd1860ea6ff4b0a564261e2c78aa5c66969 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 02:06:23 +0000 Subject: [PATCH 271/371] chore(api): update dependency django-versatileimagefield to v3 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2724> --- api/poetry.lock | 13 +++++++------ api/pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 7dc9b60f8..8a24c626e 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1344,18 +1344,19 @@ sftp = ["paramiko (>=1.10.0)"] [[package]] name = "django-versatileimagefield" -version = "2.2" +version = "3.1" description = "A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creating new images from the one assigned to the field." optional = false python-versions = "*" files = [ - {file = "django-versatileimagefield-2.2.tar.gz", hash = "sha256:6569d5c3e13c69ab8912ba5100084aa5abcdcffb8d1f5abc085b226e7bbd65b3"}, - {file = "django_versatileimagefield-2.2-py2.py3-none-any.whl", hash = "sha256:03766f4d2332f192978879fdb196e18c53e6ccef6c55c5c26b59747b76a97288"}, + {file = "django-versatileimagefield-3.1.tar.gz", hash = "sha256:3390e20048098e897bf299b0360763d10cd089665b7aef8eba900eecbaead0d8"}, + {file = "django_versatileimagefield-3.1-py2.py3-none-any.whl", hash = "sha256:dfdffa11a0d4c169e44f164481d2b26f94a0a00517216ee85748324c2f96a669"}, ] [package.dependencies] -Pillow = ">=2.4.0" -python-magic = ">=0.4.15,<1.0.0" +Django = ">=3.0" +Pillow = ">=6.2.0" +python-magic = ">=0.4.22,<1.0.0" [[package]] name = "djangorestframework" @@ -4679,4 +4680,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "c4bea4a0d93aea07910fb93594dce5a901da6d6fcde9ec9b3ce2408091ec2f64" +content-hash = "8567bb5c3c1f6e974ff19bc1494e09356448ca6958a44cbe4efaf18e64e95f77" diff --git a/api/pyproject.toml b/api/pyproject.toml index 59b007cc2..bd0a36ebb 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -41,7 +41,7 @@ django-filter = "==23.5" django-oauth-toolkit = "2.2.0" django-redis = "==5.2.0" django-storages = "==1.13.2" -django-versatileimagefield = "==2.2" +django-versatileimagefield = "==3.1" djangorestframework = "==3.14.0" drf-spectacular = "==0.26.5" markdown = "==3.4.4" From 60f66eea6da1c9877d472a43ba73e90a3c347aa4 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 03:07:54 +0000 Subject: [PATCH 272/371] chore(api): update dependency faker to v22 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2725> --- api/poetry.lock | 11 ++++++----- api/pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 8a24c626e..25775a8e4 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1444,17 +1444,18 @@ doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] [[package]] name = "faker" -version = "15.3.4" +version = "22.6.0" description = "Faker is a Python package that generates fake data for you." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Faker-15.3.4-py3-none-any.whl", hash = "sha256:c2a2ff9dd8dfd991109b517ab98d5cb465e857acb45f6b643a0e284a9eb2cc76"}, - {file = "Faker-15.3.4.tar.gz", hash = "sha256:2d5443724f640ce07658ca8ca8bbd40d26b58914e63eec6549727869aa67e2cc"}, + {file = "Faker-22.6.0-py3-none-any.whl", hash = "sha256:2b57f0256da6b45b7851dca87836ef5e2ae2fbb64d63d8697f1e47830d7b505d"}, + {file = "Faker-22.6.0.tar.gz", hash = "sha256:fa6d969728ef3da6229da91267a1bd4e6b902044c4822012d4fc46c71bb92b26"}, ] [package.dependencies] python-dateutil = ">=2.4" +typing-extensions = {version = ">=3.10.0.1", markers = "python_version <= \"3.8\""} [[package]] name = "feedparser" @@ -4680,4 +4681,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "8567bb5c3c1f6e974ff19bc1494e09356448ca6958a44cbe4efaf18e64e95f77" +content-hash = "62f684c25a813402cea7feea037527c24836a30c8e8b0efa9d8f038aed109fe1" diff --git a/api/pyproject.toml b/api/pyproject.toml index bd0a36ebb..ab273f5b4 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -108,7 +108,7 @@ debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" django-debug-toolbar = "==4.2.0" factory-boy = "==3.2.1" -faker = "==15.3.4" +faker = "==22.6.0" flake8 = "==3.9.2" ipdb = "==0.13.13" pytest = "==7.4.3" From 55a4221b69fa5bf7a20e1cfaf5ced37e30051052 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 08:34:50 +0000 Subject: [PATCH 273/371] chore(api): update dependency gunicorn to v21 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2727> --- api/poetry.lock | 10 +++++----- api/pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 25775a8e4..f4bebaee7 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1631,17 +1631,17 @@ files = [ [[package]] name = "gunicorn" -version = "20.1.0" +version = "21.2.0" description = "WSGI HTTP Server for UNIX" optional = false python-versions = ">=3.5" files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, ] [package.dependencies] -setuptools = ">=3.0" +packaging = "*" [package.extras] eventlet = ["eventlet (>=0.24.1)"] @@ -4681,4 +4681,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "62f684c25a813402cea7feea037527c24836a30c8e8b0efa9d8f038aed109fe1" +content-hash = "5a6828bdc6f95c0c1f0eff2f9872d6d480185d51bc225af1bc965717b64419d3" diff --git a/api/pyproject.toml b/api/pyproject.toml index ab273f5b4..aa397080f 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -62,7 +62,7 @@ kombu = "5.3.4" celery = "5.3.6" # Deployment -gunicorn = "==20.1.0" +gunicorn = "==21.2.0" uvicorn = { version = "==0.20.0", extras = ["standard"] } # Libs From c4bec419ab5afbb6409c212ef342d2edf77da617 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 12:34:27 +0000 Subject: [PATCH 274/371] chore(api): update dependency pycountry to v23 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2728> --- api/poetry.lock | 21 +++++++++++---------- api/pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index f4bebaee7..3862f1b62 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1754,21 +1754,21 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.1.1" +version = "5.13.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, + {file = "importlib_resources-5.13.0-py3-none-any.whl", hash = "sha256:9f7bd0c97b79972a6cce36a366356d16d5e13b09679c11a58f1014bfdf8e64b2"}, + {file = "importlib_resources-5.13.0.tar.gz", hash = "sha256:82d5c6cca930697dbbd86c93333bb2c2e72861d4789a11c2662b933e5ad2b528"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [[package]] name = "incremental" @@ -2809,16 +2809,17 @@ files = [ [[package]] name = "pycountry" -version = "22.3.5" +version = "23.12.11" description = "ISO country, subdivision, language, currency and script definitions and their translations" optional = false -python-versions = ">=3.6, <4" +python-versions = ">=3.8" files = [ - {file = "pycountry-22.3.5.tar.gz", hash = "sha256:b2163a246c585894d808f18783e19137cb70a0c18fb36748dc01fc6f109c1646"}, + {file = "pycountry-23.12.11-py3-none-any.whl", hash = "sha256:2ff91cff4f40ff61086e773d61e72005fe95de4a57bfc765509db05695dc50ab"}, + {file = "pycountry-23.12.11.tar.gz", hash = "sha256:00569d82eaefbc6a490a311bfa84a9c571cff9ddbf8b0a4f4e7b4f868b4ad925"}, ] [package.dependencies] -setuptools = "*" +importlib-resources = {version = ">=5.12.0,<6.0.0", markers = "python_version < \"3.9\""} [[package]] name = "pycparser" @@ -4681,4 +4682,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "5a6828bdc6f95c0c1f0eff2f9872d6d480185d51bc225af1bc965717b64419d3" +content-hash = "82851c08f9cad646810c23e6a1efd8138c9c0fab740028341ef97f6c780978e2" diff --git a/api/pyproject.toml b/api/pyproject.toml index aa397080f..96fde83a0 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -88,7 +88,7 @@ watchdog = "==2.2.1" troi = "==2024.1.26.0" lb-matching-tools = "==2024.1.25.0rc1" unidecode = "==1.3.7" -pycountry = "22.3.5" +pycountry = "23.12.11" # Typesense typesense = { version = "==0.15.1", optional = true } From f43ef89c2872de4e9dbd7d90adf28d084d39eed7 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 23:04:32 +0000 Subject: [PATCH 275/371] chore(api): update dependency pylint to v3 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2729> --- api/poetry.lock | 76 ++++++++-------------------------------------- api/pyproject.toml | 2 +- 2 files changed, 14 insertions(+), 64 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 3862f1b62..f6502edfa 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -204,22 +204,17 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "astroid" -version = "2.15.8" +version = "3.0.2" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.7.2" +python-versions = ">=3.8.0" files = [ - {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, - {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, + {file = "astroid-3.0.2-py3-none-any.whl", hash = "sha256:d6e62862355f60e716164082d6b4b041d38e2a8cf1c7cd953ded5108bac8ff5c"}, + {file = "astroid-3.0.2.tar.gz", hash = "sha256:4a61cf0a59097c7bb52689b0fd63717cd2a8a14dc9f1eee97b82d814881c8c91"}, ] [package.dependencies] -lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, -] [[package]] name = "asttokens" @@ -1992,52 +1987,6 @@ sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=2.8.0)"] -[[package]] -name = "lazy-object-proxy" -version = "1.10.0" -description = "A fast and thorough lazy object proxy." -optional = false -python-versions = ">=3.8" -files = [ - {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, - {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, - {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, - {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, - {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, - {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, - {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, -] - [[package]] name = "lb-matching-tools" version = "2024.1.25.0rc1" @@ -2912,23 +2861,24 @@ requests = ["requests"] [[package]] name = "pylint" -version = "2.17.7" +version = "3.0.3" description = "python code static checker" optional = false -python-versions = ">=3.7.2" +python-versions = ">=3.8.0" files = [ - {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, - {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, + {file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"}, + {file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"}, ] [package.dependencies] -astroid = ">=2.15.8,<=2.17.0-dev0" +astroid = ">=3.0.1,<=3.1.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] -isort = ">=4.2.5,<6" +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -4682,4 +4632,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "82851c08f9cad646810c23e6a1efd8138c9c0fab740028341ef97f6c780978e2" +content-hash = "4af35ad403a016437944a4119e43df1c36d47704a02e077c6a0075dfd8b0bcb6" diff --git a/api/pyproject.toml b/api/pyproject.toml index 96fde83a0..e7a854b39 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -121,7 +121,7 @@ pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" pytest-sugar = "==0.9.7" requests-mock = "==1.10.0" -pylint = "==2.17.7" +pylint = "==3.0.3" pylint-django = "==2.5.5" django-extensions = "==3.2.3" From 787acab3abacdae2e6c18842783f0b961b97da73 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Thu, 1 Feb 2024 23:34:38 +0000 Subject: [PATCH 276/371] chore(api): update dependency pytest to v8 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2730> --- api/poetry.lock | 12 ++++++------ api/pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index f6502edfa..b35793c3b 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -2955,13 +2955,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.4.3" +version = "8.0.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] @@ -2969,7 +2969,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] @@ -4632,4 +4632,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "4af35ad403a016437944a4119e43df1c36d47704a02e077c6a0075dfd8b0bcb6" +content-hash = "36e80c68c77f0ea19bc98a14ece11ea132dcf52e626464481bc7236c3a21d516" diff --git a/api/pyproject.toml b/api/pyproject.toml index e7a854b39..b6705895a 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -111,7 +111,7 @@ factory-boy = "==3.2.1" faker = "==22.6.0" flake8 = "==3.9.2" ipdb = "==0.13.13" -pytest = "==7.4.3" +pytest = "==8.0.0" pytest-asyncio = "==0.21.0" prompt-toolkit = "==3.0.41" pytest-cov = "==4.0.0" From 42bf16034b3ace49ce1d14785b1d70ef8d2326b9 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 2 Feb 2024 00:04:24 +0000 Subject: [PATCH 277/371] chore(api): update dependency pytest-env to v1 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2731> --- api/poetry.lock | 17 +++++++++-------- api/pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index b35793c3b..f43fde5d3 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3031,20 +3031,21 @@ testing = ["Django", "django-configurations (>=2.0)"] [[package]] name = "pytest-env" -version = "0.8.2" -description = "py.test plugin that allows you to add environment variables." +version = "1.1.3" +description = "pytest plugin that allows you to add environment variables." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest_env-0.8.2-py3-none-any.whl", hash = "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38"}, - {file = "pytest_env-0.8.2.tar.gz", hash = "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff"}, + {file = "pytest_env-1.1.3-py3-none-any.whl", hash = "sha256:aada77e6d09fcfb04540a6e462c58533c37df35fa853da78707b17ec04d17dfc"}, + {file = "pytest_env-1.1.3.tar.gz", hash = "sha256:fcd7dc23bb71efd3d35632bde1bbe5ee8c8dc4489d6617fb010674880d96216b"}, ] [package.dependencies] -pytest = ">=7.3.1" +pytest = ">=7.4.3" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "pytest-mock (>=3.12)"] [[package]] name = "pytest-mock" @@ -4632,4 +4633,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "36e80c68c77f0ea19bc98a14ece11ea132dcf52e626464481bc7236c3a21d516" +content-hash = "0d84d943c4fb3134a4005ae8ed82aefc7b75b596868a39c7795d7c196ece44f5" diff --git a/api/pyproject.toml b/api/pyproject.toml index b6705895a..2cede9297 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -116,7 +116,7 @@ pytest-asyncio = "==0.21.0" prompt-toolkit = "==3.0.41" pytest-cov = "==4.0.0" pytest-django = "==4.5.2" -pytest-env = "==0.8.2" +pytest-env = "==1.1.3" pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" pytest-sugar = "==0.9.7" From 1f8c03e248f4fbbca9410bd9ce78e500d7ad07ef Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 2 Feb 2024 01:09:28 +0000 Subject: [PATCH 278/371] chore(api): update dependency pytest-sugar to v1 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2732> --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index f43fde5d3..136e288c7 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3081,13 +3081,13 @@ pytest = "*" [[package]] name = "pytest-sugar" -version = "0.9.7" +version = "1.0.0" description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." optional = false python-versions = "*" files = [ - {file = "pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46"}, - {file = "pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062"}, + {file = "pytest-sugar-1.0.0.tar.gz", hash = "sha256:6422e83258f5b0c04ce7c632176c7732cab5fdb909cb39cca5c9139f81276c0a"}, + {file = "pytest_sugar-1.0.0-py3-none-any.whl", hash = "sha256:70ebcd8fc5795dc457ff8b69d266a4e2e8a74ae0c3edc749381c64b5246c8dfd"}, ] [package.dependencies] @@ -4633,4 +4633,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "0d84d943c4fb3134a4005ae8ed82aefc7b75b596868a39c7795d7c196ece44f5" +content-hash = "c55a0a9572b61e139a45c579bf9903370dc9c07c0107c48bbcd879d571f2692a" diff --git a/api/pyproject.toml b/api/pyproject.toml index 2cede9297..ad9cbc67d 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -119,7 +119,7 @@ pytest-django = "==4.5.2" pytest-env = "==1.1.3" pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" -pytest-sugar = "==0.9.7" +pytest-sugar = "==1.0.0" requests-mock = "==1.10.0" pylint = "==3.0.3" pylint-django = "==2.5.5" From c1d91ce4d60725fd4b43fda6241f609d1f7ecbfb Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 2 Feb 2024 01:37:00 +0000 Subject: [PATCH 279/371] chore(api): update dependency redis to v5 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2733> --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 136e288c7..ebb210204 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3242,13 +3242,13 @@ files = [ [[package]] name = "redis" -version = "4.5.5" +version = "5.0.1" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, - {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, + {file = "redis-5.0.1-py3-none-any.whl", hash = "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f"}, + {file = "redis-5.0.1.tar.gz", hash = "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"}, ] [package.dependencies] @@ -4633,4 +4633,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "c55a0a9572b61e139a45c579bf9903370dc9c07c0107c48bbcd879d571f2692a" +content-hash = "bbcefd623537fb23c6fe27207abff9acd1893e2cf3c6af59563ef563eab52ed3" diff --git a/api/pyproject.toml b/api/pyproject.toml index ad9cbc67d..98bef6a1f 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -47,7 +47,7 @@ drf-spectacular = "==0.26.5" markdown = "==3.4.4" persisting-theory = "==1.0" psycopg2 = "==2.9.9" -redis = "==4.5.5" +redis = "==5.0.1" # Django LDAP django-auth-ldap = "==4.1.0" From 81401075aafcc3f48936a596d7107e331e56dfaf Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Sat, 30 Dec 2023 17:34:59 +0100 Subject: [PATCH 280/371] Add OpenSubsonic support Fixes #2270 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/renderers.py | 2 ++ api/funkwhale_api/subsonic/serializers.py | 8 ++++++-- api/funkwhale_api/subsonic/views.py | 14 ++++++++++++++ api/tests/subsonic/test_renderers.py | 13 +++++++++++-- api/tests/subsonic/test_serializers.py | 3 +++ changes/changelog.d/opensubsonic.feature | 1 + 6 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 changes/changelog.d/opensubsonic.feature diff --git a/api/funkwhale_api/subsonic/renderers.py b/api/funkwhale_api/subsonic/renderers.py index f11940222..e9703d48d 100644 --- a/api/funkwhale_api/subsonic/renderers.py +++ b/api/funkwhale_api/subsonic/renderers.py @@ -32,9 +32,11 @@ ET._serialize_xml = ET._serialize["xml"] = _serialize_xml def structure_payload(data): payload = { "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, "status": "ok", "type": "funkwhale", "version": "1.16.0", + "openSubsonic": "true", } payload.update(data) if "detail" in payload: diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index 5a615126b..12255d622 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -126,6 +126,7 @@ def get_track_data(album, track, upload): "albumId": album.pk if album else "", "artistId": album.artist.pk if album else track.artist.pk, "type": "music", + "musicBrainzId": str(track.mbid or ""), } if album and album.attachment_cover_id: data["coverArt"] = f"al-{album.id}" @@ -149,13 +150,16 @@ def get_album2_data(album): "created": to_subsonic_date(album.creation_date), "duration": album.duration, "playCount": album.tracks.aggregate(l=Count("listenings"))["l"] or 0, + "musicBrainzId": str(album.mbid or ""), } if album.attachment_cover_id: payload["coverArt"] = f"al-{album.id}" if album.tagged_items: + genres = [{"name": i.tag.name} for i in album.tagged_items.all()] # exposes only first genre since the specification uses singular noun - first_genre = album.tagged_items.first() - payload["genre"] = first_genre.tag.name if first_genre else "" + payload["genre"] = genres[0]["name"] if len(genres) > 0 else "" + # OpenSubsonic full genre list + payload["genres"] = genres if album.release_date: payload["year"] = album.release_date.year try: diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 316cce706..c859ed7de 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -180,6 +180,20 @@ class SubsonicViewSet(viewsets.GenericViewSet): } return response.Response(data, status=200) + @action( + detail=False, + methods=["get", "post"], + url_name="get_open_subsonic_extensions", + permission_classes=[], + url_path="getOpenSubsonicExtensions", + ) + def get_open_subsonic_extensions(self, request, *args, **kwargs): + data = { + # No specific extensions are currently supported + "openSubsonicExtensions": [""], + } + return response.Response(data, status=200) + @action( detail=False, methods=["get", "post"], diff --git a/api/tests/subsonic/test_renderers.py b/api/tests/subsonic/test_renderers.py index 551f5572c..1b49753e4 100644 --- a/api/tests/subsonic/test_renderers.py +++ b/api/tests/subsonic/test_renderers.py @@ -17,6 +17,8 @@ from funkwhale_api.subsonic import renderers "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", }, ), @@ -30,6 +32,8 @@ from funkwhale_api.subsonic import renderers "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", "error": {"code": 10, "message": "something went wrong"}, }, @@ -41,6 +45,8 @@ from funkwhale_api.subsonic import renderers "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", "error": {"code": 0, "message": "something went wrong"}, }, @@ -59,6 +65,8 @@ def test_json_renderer(): "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", } } @@ -81,8 +89,9 @@ def test_xml_renderer_dict_to_xml(): def test_xml_renderer(): payload = {"hello": "world"} - expected = '<?xml version="1.0" encoding="UTF-8"?>\n<subsonic-response funkwhaleVersion="{}" hello="world" status="ok" type="funkwhale" version="1.16.0" xmlns="http://subsonic.org/restapi" />' # noqa - expected = expected.format(funkwhale_api.__version__).encode() + expected = '<?xml version="1.0" encoding="UTF-8"?>\n<subsonic-response funkwhaleVersion="{}" hello="world" openSubsonic="true" serverVersion="{}" status="ok" type="funkwhale" version="1.16.0" xmlns="http://subsonic.org/restapi" />' # noqa + version = funkwhale_api.__version__ + expected = expected.format(version, version).encode() renderer = renderers.SubsonicXMLRenderer() rendered = renderer.render(payload) diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index bb419e61d..7c54bddd7 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -184,6 +184,8 @@ def test_get_album_serializer(factories): "year": album.release_date.year, "coverArt": f"al-{album.id}", "genre": tagged_item.tag.name, + "genres": [{"name": tagged_item.tag.name}], + "musicBrainzId": album.mbid, "duration": 43, "playCount": album.tracks.aggregate(l=Count("listenings"))["l"] or 0, "song": [ @@ -207,6 +209,7 @@ def test_get_album_serializer(factories): "albumId": album.pk, "artistId": artist.pk, "type": "music", + "musicBrainzId": track.mbid, } ], } diff --git a/changes/changelog.d/opensubsonic.feature b/changes/changelog.d/opensubsonic.feature new file mode 100644 index 000000000..8d28a02cb --- /dev/null +++ b/changes/changelog.d/opensubsonic.feature @@ -0,0 +1 @@ +Extend Subsonic API with OpenSubsonic support (#2270) From 0fab0470c264a864ae4aa8266ce5e00b4047a000 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Sat, 30 Dec 2023 17:42:16 +0100 Subject: [PATCH 281/371] Subsonic: Actually implement getArtistInfo2 endpoint Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/views.py | 15 ++++++++++++++- api/tests/subsonic/test_views.py | 6 +++++- changes/changelog.d/subsonic-artistinfo2.feature | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 changes/changelog.d/subsonic-artistinfo2.feature diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index c859ed7de..55a037009 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -269,7 +269,20 @@ class SubsonicViewSet(viewsets.GenericViewSet): ) @find_object(music_models.Artist.objects.all(), filter_playable=True) def get_artist_info2(self, request, *args, **kwargs): - payload = {"artist-info2": {}} + artist = kwargs.pop("obj") + artist_info = {} + if artist.mbid: + artist_info["musicBrainzId"] = [str(artist.mbid)] + if artist.attachment_cover: + artist_info["mediumImageUrl"] = [ + artist.attachment_cover.download_url_medium_square_crop + ] + artist_info["largeImageUrl"] = [ + artist.attachment_cover.download_url_large_square_crop + ] + if artist.description: + artist_info["biography"] = [artist.description.rendered] + payload = {"artistInfo2": artist_info} return response.Response(payload, status=200) diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index f11f863fa..a1a6708ec 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -166,7 +166,11 @@ def test_get_artist_info2( artist = factories["music.Artist"](playable=True) playable_by = mocker.spy(music_models.ArtistQuerySet, "playable_by") - expected = {"artist-info2": {}} + expected = { + "artistInfo2": { + "musicBrainzId": [artist.mbid], + } + } response = logged_in_api_client.get(url, {"id": artist.pk}) assert response.status_code == 200 diff --git a/changes/changelog.d/subsonic-artistinfo2.feature b/changes/changelog.d/subsonic-artistinfo2.feature new file mode 100644 index 000000000..e01f822f0 --- /dev/null +++ b/changes/changelog.d/subsonic-artistinfo2.feature @@ -0,0 +1 @@ +Implement Subsonic getArtistInfo2 response From e169e8edb1f086f1f6b923f7d3f97d7f5c51ee02 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Sat, 30 Dec 2023 18:45:27 +0100 Subject: [PATCH 282/371] Subsonic: Fixed casing of "bitRate" attribute This follows the Subsonic / OpenSubsonic API spec Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/serializers.py | 4 ++-- api/tests/subsonic/test_serializers.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index 12255d622..65cb2db47 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -131,7 +131,7 @@ def get_track_data(album, track, upload): if album and album.attachment_cover_id: data["coverArt"] = f"al-{album.id}" if upload.bitrate: - data["bitrate"] = int(upload.bitrate / 1000) + data["bitRate"] = int(upload.bitrate / 1000) if upload.size: data["size"] = upload.size if album and album.release_date: @@ -347,7 +347,7 @@ def get_channel_episode_data(upload, channel_id): "genre": "Podcast", "size": upload.size if upload.size else "", "duration": upload.duration if upload.duration else "", - "bitrate": upload.bitrate / 1000 if upload.bitrate else "", + "bitRate": upload.bitrate / 1000 if upload.bitrate else "", "contentType": upload.mimetype or "audio/mpeg", "suffix": upload.extension or "mp3", "status": "completed", diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index 7c54bddd7..ae5999f64 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -202,7 +202,7 @@ def test_get_album_serializer(factories): "contentType": upload.mimetype, "suffix": upload.extension or "", "path": serializers.get_track_path(track, upload.extension), - "bitrate": 42, + "bitRate": 42, "duration": 43, "size": 44, "created": serializers.to_subsonic_date(track.creation_date), @@ -344,7 +344,7 @@ def test_channel_episode_serializer(factories): "genre": "Podcast", "size": upload.size, "duration": upload.duration, - "bitrate": upload.bitrate / 1000, + "bitRate": upload.bitrate / 1000, "contentType": upload.mimetype, "suffix": upload.extension, "status": "completed", From bf8f1e41b98b4a7f818b86f0809227e071d40443 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Wed, 3 Jan 2024 09:50:19 +0100 Subject: [PATCH 283/371] OpenSubsonic: MBID for artist results, added mediaType field Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/serializers.py | 5 ++++- api/funkwhale_api/subsonic/views.py | 2 +- api/tests/subsonic/test_serializers.py | 5 +++++ api/tests/subsonic/test_views.py | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index 65cb2db47..7f54e44ec 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -50,6 +50,7 @@ def get_artist_data(artist_values): "name": artist_values["name"], "albumCount": artist_values["_albums_count"], "coverArt": "ar-{}".format(artist_values["id"]), + "musicBrainzId": str(artist_values.get("mbid", "")), } @@ -58,7 +59,7 @@ class GetArtistsSerializer(serializers.Serializer): payload = {"ignoredArticles": "", "index": []} queryset = queryset.with_albums_count() queryset = queryset.order_by(functions.Lower("name")) - values = queryset.values("id", "_albums_count", "name") + values = queryset.values("id", "_albums_count", "name", "mbid") first_letter_mapping = collections.defaultdict(list) for artist in values: @@ -126,6 +127,7 @@ def get_track_data(album, track, upload): "albumId": album.pk if album else "", "artistId": album.artist.pk if album else track.artist.pk, "type": "music", + "mediaType": "song", "musicBrainzId": str(track.mbid or ""), } if album and album.attachment_cover_id: @@ -150,6 +152,7 @@ def get_album2_data(album): "created": to_subsonic_date(album.creation_date), "duration": album.duration, "playCount": album.tracks.aggregate(l=Count("listenings"))["l"] or 0, + "mediaType": "album", "musicBrainzId": str(album.mbid or ""), } if album.attachment_cover_id: diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 55a037009..3140bb49e 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -550,7 +550,7 @@ class SubsonicViewSet(viewsets.GenericViewSet): "search_fields": ["name"], "queryset": ( music_models.Artist.objects.with_albums_count().values( - "id", "_albums_count", "name" + "id", "_albums_count", "name", "mbid" ) ), "serializer": lambda qs: [serializers.get_artist_data(a) for a in qs], diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index ae5999f64..8e526934f 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -90,12 +90,14 @@ def test_get_artists_serializer(factories): "name": artist1.name, "albumCount": 3, "coverArt": f"ar-{artist1.id}", + "musicBrainzId": artist1.mbid, }, { "id": artist2.pk, "name": artist2.name, "albumCount": 2, "coverArt": f"ar-{artist2.id}", + "musicBrainzId": artist2.mbid, }, ], }, @@ -107,6 +109,7 @@ def test_get_artists_serializer(factories): "name": artist3.name, "albumCount": 0, "coverArt": f"ar-{artist3.id}", + "musicBrainzId": artist3.mbid, } ], }, @@ -185,6 +188,7 @@ def test_get_album_serializer(factories): "coverArt": f"al-{album.id}", "genre": tagged_item.tag.name, "genres": [{"name": tagged_item.tag.name}], + "mediaType": "album", "musicBrainzId": album.mbid, "duration": 43, "playCount": album.tracks.aggregate(l=Count("listenings"))["l"] or 0, @@ -209,6 +213,7 @@ def test_get_album_serializer(factories): "albumId": album.pk, "artistId": artist.pk, "type": "music", + "mediaType": "song", "musicBrainzId": track.mbid, } ], diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index a1a6708ec..576c50005 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -596,7 +596,7 @@ def test_search3(f, db, logged_in_api_client, factories): artist_qs = ( music_models.Artist.objects.with_albums_count() .filter(pk=artist.pk) - .values("_albums_count", "id", "name") + .values("_albums_count", "id", "name", "mbid") ) assert response.status_code == 200 assert response.data == { From d227490f5bfd753bbb26bf873cba7d523295b6db Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Wed, 3 Jan 2024 10:25:38 +0100 Subject: [PATCH 284/371] OpenSubsonic: report HTTP form POST extension as supported Funkwhale already supports passing parameters as application/x-www-form-urlencoded Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/views.py | 3 +-- api/tests/subsonic/test_views.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 3140bb49e..8cfe23926 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -189,8 +189,7 @@ class SubsonicViewSet(viewsets.GenericViewSet): ) def get_open_subsonic_extensions(self, request, *args, **kwargs): data = { - # No specific extensions are currently supported - "openSubsonicExtensions": [""], + "openSubsonicExtensions": [{"name": "formPost", "versions": [1]}], } return response.Response(data, status=200) diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index 576c50005..854703c02 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -97,6 +97,23 @@ def test_ping(f, db, api_client): assert response.data == expected +@pytest.mark.parametrize("f", ["xml", "json"]) +def test_get_open_subsonic_extensions(f, db, api_client): + url = reverse("api:subsonic:subsonic-get_open_subsonic_extensions") + response = api_client.get(url, {"f": f}) + + expected = { + "openSubsonicExtensions": [ + { + "name": "formPost", + "versions": [1], + } + ], + } + assert response.status_code == 200 + assert response.data == expected + + @pytest.mark.parametrize("f", ["json"]) def test_get_artists( f, db, logged_in_api_client, factories, mocker, queryset_equal_queries From a5ee48818eece839ce2058cfee1c5974fd0d6dc3 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Thu, 11 Jan 2024 09:15:03 +0100 Subject: [PATCH 285/371] Extend Subsonic XML renderer to allow explicit XML child tags Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/renderers.py | 8 ++++++++ api/tests/subsonic/test_renderers.py | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/api/funkwhale_api/subsonic/renderers.py b/api/funkwhale_api/subsonic/renderers.py index e9703d48d..51efb4206 100644 --- a/api/funkwhale_api/subsonic/renderers.py +++ b/api/funkwhale_api/subsonic/renderers.py @@ -6,6 +6,10 @@ from rest_framework import renderers import funkwhale_api +class TagValue(str): + """Use this for string values that must be rendered as tags instead of attributes in XML.""" + + # from https://stackoverflow.com/a/8915039 # because I want to avoid a lxml dependency just for outputting cdata properly # in a RSS feed @@ -83,6 +87,10 @@ def dict_to_xml_tree(root_tag, d, parent=None): el = ET.Element(key) el.text = str(obj) root.append(el) + elif isinstance(value, TagValue): + el = ET.Element(key) + el.text = str(value) + root.append(el) else: if key == "value": root.text = str(value) diff --git a/api/tests/subsonic/test_renderers.py b/api/tests/subsonic/test_renderers.py index 1b49753e4..c404555da 100644 --- a/api/tests/subsonic/test_renderers.py +++ b/api/tests/subsonic/test_renderers.py @@ -79,9 +79,10 @@ def test_xml_renderer_dict_to_xml(): "hello": "world", "item": [{"this": 1, "value": "text"}, {"some": "node"}], "list": [1, 2], + "some-tag": renderers.TagValue("foo"), } expected = """<?xml version="1.0" encoding="UTF-8"?> -<key hello="world"><item this="1">text</item><item some="node" /><list>1</list><list>2</list></key>""" +<key hello="world"><item this="1">text</item><item some="node" /><list>1</list><list>2</list><some-tag>foo</some-tag></key>""" # noqa result = renderers.dict_to_xml_tree("key", payload) exp = ET.fromstring(expected) assert ET.tostring(result) == ET.tostring(exp) From 136f24a917cc7453d53df65b37837830e923a596 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Thu, 11 Jan 2024 09:27:38 +0100 Subject: [PATCH 286/371] Move Subsonic getArtistInfo2 serialization to serializer Also fixed JSON serialization by not using lists for the single value fields. Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/serializers.py | 19 +++++++++++++++++++ api/funkwhale_api/subsonic/views.py | 15 ++------------- api/tests/subsonic/test_serializers.py | 20 +++++++++++++++++++- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index 7f54e44ec..d610b61a5 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -7,6 +7,8 @@ from funkwhale_api.history import models as history_models from funkwhale_api.music import models as music_models from funkwhale_api.music import utils as music_utils +from .renderers import TagValue + def to_subsonic_date(date): """ @@ -103,6 +105,23 @@ class GetArtistSerializer(serializers.Serializer): return payload +class GetArtistInfo2Serializer(serializers.Serializer): + def to_representation(self, artist): + payload = {} + if artist.mbid: + payload["musicBrainzId"] = TagValue(artist.mbid) + if artist.attachment_cover: + payload["mediumImageUrl"] = TagValue( + artist.attachment_cover.download_url_medium_square_crop + ) + payload["largeImageUrl"] = TagValue( + artist.attachment_cover.download_url_large_square_crop + ) + if artist.description: + payload["biography"] = TagValue(artist.description.rendered) + return payload + + def get_track_data(album, track, upload): data = { "id": track.pk, diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 8cfe23926..87edc51ed 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -269,19 +269,8 @@ class SubsonicViewSet(viewsets.GenericViewSet): @find_object(music_models.Artist.objects.all(), filter_playable=True) def get_artist_info2(self, request, *args, **kwargs): artist = kwargs.pop("obj") - artist_info = {} - if artist.mbid: - artist_info["musicBrainzId"] = [str(artist.mbid)] - if artist.attachment_cover: - artist_info["mediumImageUrl"] = [ - artist.attachment_cover.download_url_medium_square_crop - ] - artist_info["largeImageUrl"] = [ - artist.attachment_cover.download_url_large_square_crop - ] - if artist.description: - artist_info["biography"] = [artist.description.rendered] - payload = {"artistInfo2": artist_info} + data = serializers.GetArtistInfo2Serializer(artist).data + payload = {"artistInfo2": data} return response.Response(payload, status=200) diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index 8e526934f..507b57bd5 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -4,7 +4,7 @@ import pytest from django.db.models.aggregates import Count from funkwhale_api.music import models as music_models -from funkwhale_api.subsonic import serializers +from funkwhale_api.subsonic import renderers, serializers @pytest.mark.parametrize( @@ -150,6 +150,24 @@ def test_get_artist_serializer(factories): assert serializers.GetArtistSerializer(artist).data == expected +def test_get_artist_info_2_serializer(factories): + content = factories["common.Content"]() + artist = factories["music.Artist"](with_cover=True, description=content) + + expected = { + "musicBrainzId": artist.mbid, + "mediumImageUrl": renderers.TagValue( + artist.attachment_cover.download_url_medium_square_crop + ), + "largeImageUrl": renderers.TagValue( + artist.attachment_cover.download_url_large_square_crop + ), + "biography": renderers.TagValue(artist.description.rendered), + } + + assert serializers.GetArtistInfo2Serializer(artist).data == expected + + @pytest.mark.parametrize( "mimetype, extension, expected", [ From 2371f2a4cbebdfc161c09f40ec55b1598cae7397 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Thu, 11 Jan 2024 12:39:16 +0100 Subject: [PATCH 287/371] Subsonic: Added deprecation notice for funkwhaleVersion field Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/funkwhale_api/subsonic/renderers.py | 2 ++ changes/changelog.d/subsonic-funkwhale-version.deprecation | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 changes/changelog.d/subsonic-funkwhale-version.deprecation diff --git a/api/funkwhale_api/subsonic/renderers.py b/api/funkwhale_api/subsonic/renderers.py index 51efb4206..b715526e0 100644 --- a/api/funkwhale_api/subsonic/renderers.py +++ b/api/funkwhale_api/subsonic/renderers.py @@ -35,6 +35,8 @@ ET._serialize_xml = ET._serialize["xml"] = _serialize_xml def structure_payload(data): payload = { + # funkwhaleVersion is deprecated and will be removed in a future + # release. Use serverVersion instead. "funkwhaleVersion": funkwhale_api.__version__, "serverVersion": funkwhale_api.__version__, "status": "ok", diff --git a/changes/changelog.d/subsonic-funkwhale-version.deprecation b/changes/changelog.d/subsonic-funkwhale-version.deprecation new file mode 100644 index 000000000..6db6e360a --- /dev/null +++ b/changes/changelog.d/subsonic-funkwhale-version.deprecation @@ -0,0 +1,2 @@ +The "funkwhaleVersion" field in Subsonic responses is deprecated. Clients +should use the OpenSubsonic field "serverVersion" instead. From 82fdc82f936f0a15df49630ba720bfe40746a9a4 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Thu, 11 Jan 2024 12:41:44 +0100 Subject: [PATCH 288/371] Subsonic: Fixed getArtistInfo2 view test Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- api/tests/subsonic/test_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index 854703c02..c1a3245dc 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -185,7 +185,7 @@ def test_get_artist_info2( expected = { "artistInfo2": { - "musicBrainzId": [artist.mbid], + "musicBrainzId": artist.mbid, } } response = logged_in_api_client.get(url, {"id": artist.pk}) From b658089e7031b0f4f0d21e50093abd081b3942aa Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Thu, 1 Feb 2024 11:32:54 +0100 Subject: [PATCH 289/371] Subsonic: Note removal of "funkwhaleVersion" in FW 1.7.0 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2695> --- changes/changelog.d/subsonic-funkwhale-version.deprecation | 1 + 1 file changed, 1 insertion(+) diff --git a/changes/changelog.d/subsonic-funkwhale-version.deprecation b/changes/changelog.d/subsonic-funkwhale-version.deprecation index 6db6e360a..483c30d39 100644 --- a/changes/changelog.d/subsonic-funkwhale-version.deprecation +++ b/changes/changelog.d/subsonic-funkwhale-version.deprecation @@ -1,2 +1,3 @@ The "funkwhaleVersion" field in Subsonic responses is deprecated. Clients should use the OpenSubsonic field "serverVersion" instead. +The "funkwhaleVersion" field will get removed in Funkwhale 1.7.0. From abf0edfcdccf551359d8b138922e17184314debb Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 2 Feb 2024 09:06:53 +0000 Subject: [PATCH 290/371] chore(api): update dependency service-identity to v24 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2735> --- api/poetry.lock | 16 ++++++++-------- api/pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index ebb210204..6f3bd9242 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -3616,13 +3616,13 @@ tornado = ["tornado (>=5)"] [[package]] name = "service-identity" -version = "21.1.0" +version = "24.1.0" description = "Service identity verification for pyOpenSSL & cryptography." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "service-identity-21.1.0.tar.gz", hash = "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34"}, - {file = "service_identity-21.1.0-py2.py3-none-any.whl", hash = "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db"}, + {file = "service_identity-24.1.0-py3-none-any.whl", hash = "sha256:a28caf8130c8a5c1c7a6f5293faaf239bbfb7751e4862436920ee6f2616f568a"}, + {file = "service_identity-24.1.0.tar.gz", hash = "sha256:6829c9d62fb832c2e1c435629b0a8c476e1929881f28bee4d20bc24161009221"}, ] [package.dependencies] @@ -3630,12 +3630,12 @@ attrs = ">=19.1.0" cryptography = "*" pyasn1 = "*" pyasn1-modules = "*" -six = "*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "idna", "pyOpenSSL", "pytest", "sphinx"] -docs = ["furo", "sphinx"] +dev = ["pyopenssl", "service-identity[idna,mypy,tests]"] +docs = ["furo", "myst-parser", "pyopenssl", "sphinx", "sphinx-notfound-page"] idna = ["idna"] +mypy = ["idna", "mypy", "types-pyopenssl"] tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] @@ -4633,4 +4633,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "bbcefd623537fb23c6fe27207abff9acd1893e2cf3c6af59563ef563eab52ed3" +content-hash = "ac54d28bf0eecb17a19e25150bfdef13ceb8a2e2978c46038c76a8662079012f" diff --git a/api/pyproject.toml b/api/pyproject.toml index 98bef6a1f..09854d9b2 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -96,7 +96,7 @@ typesense = { version = "==0.15.1", optional = true } # Dependencies pinning ipython = "==8.12.3" pluralizer = "==1.2.0" -service-identity = "==21.1.0" +service-identity = "==24.1.0" unicode-slugify = "==0.1.5" [tool.poetry.group.dev.dependencies] From f58a33ec02893b7506f78afde5e3e8d2c2908cb9 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 2 Feb 2024 13:03:59 +0000 Subject: [PATCH 291/371] chore: update pre-commit hook pycqa/flake8 to v6.1.0 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2737> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4b2994f75..ae2fc6994 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,7 +53,7 @@ repos: - id: isort - repo: https://github.com/pycqa/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 From d82eceecaed4b7bd152a7b83e32b777287094fdf Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 2 Feb 2024 14:36:55 +0100 Subject: [PATCH 292/371] chore: Align with flake8 6.1 rules Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2737> --- api/funkwhale_api/common/management/commands/testdata.py | 2 +- api/funkwhale_api/common/preferences.py | 1 - api/funkwhale_api/music/views.py | 2 -- api/tests/music/test_metadata.py | 4 ++-- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/api/funkwhale_api/common/management/commands/testdata.py b/api/funkwhale_api/common/management/commands/testdata.py index fa7ae631b..f65ef1985 100644 --- a/api/funkwhale_api/common/management/commands/testdata.py +++ b/api/funkwhale_api/common/management/commands/testdata.py @@ -10,7 +10,7 @@ class Command(BaseCommand): self.help = "Helper to generate randomized testdata" self.type_choices = {"notifications": self.handle_notifications} - self.missing_args_message = f"Please specify one of the following sub-commands: { *self.type_choices.keys(), }" + self.missing_args_message = f"Please specify one of the following sub-commands: {*self.type_choices.keys(), }" def add_arguments(self, parser): subparsers = parser.add_subparsers(dest="subcommand") diff --git a/api/funkwhale_api/common/preferences.py b/api/funkwhale_api/common/preferences.py index 930bd9e27..d69a45046 100644 --- a/api/funkwhale_api/common/preferences.py +++ b/api/funkwhale_api/common/preferences.py @@ -93,7 +93,6 @@ class SerializedPreference(types.BasePreferenceType): serializer """ - serializer = JSONSerializer data_serializer_class = None field_class = JSONField widget = forms.Textarea diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 20942a952..282ceca24 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -297,8 +297,6 @@ class LibraryViewSet( ) instance.delete() - follows = action - @extend_schema( responses=federation_api_serializers.LibraryFollowSerializer(many=True) ) diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index fbf448d07..49a7d799f 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -198,8 +198,8 @@ def test_can_get_pictures(name): cover_data = data.get_picture("cover_front", "other") assert cover_data["mimetype"].startswith("image/") assert len(cover_data["content"]) > 0 - assert type(cover_data["content"]) == bytes - assert type(cover_data["description"]) == str + assert type(cover_data["content"]) is bytes + assert type(cover_data["description"]) is str @pytest.mark.parametrize( From 62f7fda42c596a1380ee393a7c96d1505e64e1c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Fri, 2 Feb 2024 19:34:37 +0000 Subject: [PATCH 293/371] chore(api): update dependency watchdog to v3 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2736> --- api/poetry.lock | 61 +++++++++++++++++++++++----------------------- api/pyproject.toml | 2 +- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 6f3bd9242..000a96d15 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -4149,39 +4149,38 @@ files = [ [[package]] name = "watchdog" -version = "2.2.1" +version = "3.0.0" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:102a60093090fc3ff76c983367b19849b7cc24ec414a43c0333680106e62aae1"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:748ca797ff59962e83cc8e4b233f87113f3cf247c23e6be58b8a2885c7337aa3"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ccd8d84b9490a82b51b230740468116b8205822ea5fdc700a553d92661253a3"}, - {file = "watchdog-2.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e01d699cd260d59b84da6bda019dce0a3353e3fcc774408ae767fe88ee096b7"}, - {file = "watchdog-2.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8586d98c494690482c963ffb24c49bf9c8c2fe0589cec4dc2f753b78d1ec301d"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:adaf2ece15f3afa33a6b45f76b333a7da9256e1360003032524d61bdb4c422ae"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a7cead445008e880dbde833cb9e5cc7b9a0958edb697a96b936621975f15b9"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8ac23ff2c2df4471a61af6490f847633024e5aa120567e08d07af5718c9d092"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d0f29fd9f3f149a5277929de33b4f121a04cf84bb494634707cfa8ea8ae106a8"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:967636031fa4c4955f0f3f22da3c5c418aa65d50908d31b73b3b3ffd66d60640"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96cbeb494e6cbe3ae6aacc430e678ce4b4dd3ae5125035f72b6eb4e5e9eb4f4e"}, - {file = "watchdog-2.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61fdb8e9c57baf625e27e1420e7ca17f7d2023929cd0065eb79c83da1dfbeacd"}, - {file = "watchdog-2.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb5ecc332112017fbdb19ede78d92e29a8165c46b68a0b8ccbd0a154f196d5e"}, - {file = "watchdog-2.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a480d122740debf0afac4ddd583c6c0bb519c24f817b42ed6f850e2f6f9d64a8"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:978a1aed55de0b807913b7482d09943b23a2d634040b112bdf31811a422f6344"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:8c28c23972ec9c524967895ccb1954bc6f6d4a557d36e681a36e84368660c4ce"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_i686.whl", hash = "sha256:c27d8c1535fd4474e40a4b5e01f4ba6720bac58e6751c667895cbc5c8a7af33c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d6b87477752bd86ac5392ecb9eeed92b416898c30bd40c7e2dd03c3146105646"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cece1aa596027ff56369f0b50a9de209920e1df9ac6d02c7f9e5d8162eb4f02b"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:8b5cde14e5c72b2df5d074774bdff69e9b55da77e102a91f36ef26ca35f9819c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e038be858425c4f621900b8ff1a3a1330d9edcfeaa1c0468aeb7e330fb87693e"}, - {file = "watchdog-2.2.1-py3-none-win32.whl", hash = "sha256:bc43c1b24d2f86b6e1cc15f68635a959388219426109233e606517ff7d0a5a73"}, - {file = "watchdog-2.2.1-py3-none-win_amd64.whl", hash = "sha256:17f1708f7410af92ddf591e94ae71a27a13974559e72f7e9fde3ec174b26ba2e"}, - {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, - {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, ] [package.extras] @@ -4633,4 +4632,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "ac54d28bf0eecb17a19e25150bfdef13ceb8a2e2978c46038c76a8662079012f" +content-hash = "6d5a57e0bf0af2772e2345b91a1c59b68aa1776fa2dc5c34177c22f6800f2ff0" diff --git a/api/pyproject.toml b/api/pyproject.toml index 09854d9b2..772e2a3e4 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -84,7 +84,7 @@ python-magic = "==0.4.27" requests = "==2.31.0" requests-http-message-signatures = "==0.3.1" sentry-sdk = "==1.19.1" -watchdog = "==2.2.1" +watchdog = "==3.0.0" troi = "==2024.1.26.0" lb-matching-tools = "==2024.1.25.0rc1" unidecode = "==1.3.7" From 825baecf8fdef884f9771f536b1a286172849ed8 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 4 Feb 2024 00:03:52 +0000 Subject: [PATCH 294/371] chore(docs): update dependency sphinx-rtd-theme to v2 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2741> --- docs/poetry.lock | 31 ++++++++++++++++++++++++------- docs/pyproject.toml | 2 +- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index 3e1392bfe..d788f9745 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -427,15 +427,16 @@ transifex = ["transifex_client (>=0.11)"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.1" +version = "2.0.0" description = "Read the Docs theme for Sphinx" category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.6" [package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" +docutils = "<0.21" +sphinx = ">=5,<8" +sphinxcontrib-jquery = ">=4,<5" [package.extras] dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] @@ -476,6 +477,17 @@ python-versions = ">=3.8" lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +description = "Extension to include jQuery on newer Sphinx releases" +category = "main" +optional = false +python-versions = ">=2.7" + +[package.dependencies] +Sphinx = ">=1.8" + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" @@ -576,7 +588,7 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "ece2cc9c958fc0ba6daf1213b80e849dc9357d5fd8bdd09d436dfbf605dccd7c" +content-hash = "325f5c66028bac4903a9f0ad2165e865ff5b19846799d1695df1f90c19b8435b" [metadata.files] alabaster = [ @@ -836,6 +848,7 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -905,8 +918,8 @@ sphinx-intl = [ {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, ] sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, - {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, + {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, + {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, @@ -920,6 +933,10 @@ sphinxcontrib-htmlhelp = [ {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, ] +sphinxcontrib-jquery = [ + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, +] sphinxcontrib-jsmath = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, diff --git a/docs/pyproject.toml b/docs/pyproject.toml index c576081a4..77b174756 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -12,7 +12,7 @@ sphinx = "==5.3.0" sphinx_design = "==0.3.0" sphinx-copybutton = "==0.5.2" sphinx-intl = "2.0.1" -sphinx-rtd-theme = "==1.1.1" +sphinx-rtd-theme = "==2.0.0" sphinxcontrib-mermaid = "0.7.1" myst-parser = "1.0.0" From 6d7a52c5ec9e34bf2c66dbedb27d0b0050d8d924 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 4 Feb 2024 21:34:14 +0000 Subject: [PATCH 295/371] chore(front): update dependency @intlify/unplugin-vue-i18n to v2 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2743> --- front/package.json | 2 +- front/yarn.lock | 256 +++++++++++++++++++++++++++++---------------- 2 files changed, 169 insertions(+), 89 deletions(-) diff --git a/front/package.json b/front/package.json index 12733c90c..c0a3fc587 100644 --- a/front/package.json +++ b/front/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@intlify/eslint-plugin-vue-i18n": "2.0.0", - "@intlify/unplugin-vue-i18n": "0.8.2", + "@intlify/unplugin-vue-i18n": "2.0.0", "@types/diff": "5.0.9", "@types/dompurify": "2.4.0", "@types/jquery": "3.5.29", diff --git a/front/yarn.lock b/front/yarn.lock index 335c119dc..0a9a4f7eb 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -286,6 +286,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== +"@babel/parser@^7.23.6": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" @@ -1295,16 +1300,21 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== -"@intlify/bundle-utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-4.0.0.tgz#29c1d602c7e4e33b516581496a7c6740ed7e2585" - integrity sha512-klXrYT9VXyKEXsD6UY3pShg0O5MPC07n0TZ5RrSs5ry6T1eZVolIFGJi9c3qcDrh1qjJxgikRnPBmD7qGDqbjw== +"@intlify/bundle-utils@^7.4.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.5.0.tgz#fb50947c4e9997228a8abd5775e57a1202f71b09" + integrity sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q== dependencies: - "@intlify/message-compiler" next - "@intlify/shared" next - jsonc-eslint-parser "^1.0.1" - source-map "0.6.1" - yaml-eslint-parser "^0.3.2" + "@intlify/message-compiler" "^9.4.0" + "@intlify/shared" "^9.4.0" + acorn "^8.8.2" + escodegen "^2.0.0" + estree-walker "^2.0.2" + jsonc-eslint-parser "^2.3.0" + magic-string "^0.30.0" + mlly "^1.2.0" + source-map-js "^1.0.1" + yaml-eslint-parser "^1.2.2" "@intlify/core-base@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1368,12 +1378,12 @@ "@intlify/shared" "9.7.1" source-map-js "^1.0.2" -"@intlify/message-compiler@next": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.4.1.tgz#aa00629a455e23cece3464293834a02994b4fb04" - integrity sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw== +"@intlify/message-compiler@^9.4.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz#4cd9c5a408be27784928e4cd57a77ea6ddb17e56" + integrity sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA== dependencies: - "@intlify/shared" "9.4.1" + "@intlify/shared" "9.9.1" source-map-js "^1.0.2" "@intlify/shared@9.3.0-beta.19": @@ -1381,33 +1391,33 @@ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.19.tgz#090bdd5d6ed1eabbb92ee2f2ead2668edc576596" integrity sha512-+lhQggrLvlQ/O5OmIYAc9gadcYXMoaDi0Doef+X/f6TLZFr9PTMjOpBWmpwNNHi026e54jckntUn6GzqDtIN4w== -"@intlify/shared@9.4.1", "@intlify/shared@next": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz#bd0d221aaac476b6778a10ddcd0472f812c64e27" - integrity sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng== - "@intlify/shared@9.7.1": version "9.7.1" resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.7.1.tgz#a4902421aacda2d716981eb9528aef0163c7bb0a" integrity sha512-CBKnHzlUYGrk5QII9q4nElAQKO5cX1rRx8VmSWXltyOZjbkGHXYQTHULn6KwRi+CypuBCfmPkyPBHMzosypIeg== -"@intlify/unplugin-vue-i18n@0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.8.2.tgz#4196cb5bee4243bb3a33af76ce9663f3e106809a" - integrity sha512-cRnzPqSEZQOmTD+p4pwc3RTS9HxreLqfID0keoqZDZweCy/CGRMLLTNd15S4TUf1vSBhPF03DItEFDr1F+8MDA== +"@intlify/shared@9.9.1", "@intlify/shared@^9.4.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.9.1.tgz#b602d012b35f6c336b29a8098296dfac96a005f5" + integrity sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA== + +"@intlify/unplugin-vue-i18n@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-2.0.0.tgz#5b087e17b4eb4381d0a111cd89df4037880e932f" + integrity sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg== dependencies: - "@intlify/bundle-utils" "^4.0.0" - "@intlify/shared" next - "@rollup/pluginutils" "^4.2.0" - "@vue/compiler-sfc" "^3.2.45" - debug "^4.3.1" - fast-glob "^3.2.5" + "@intlify/bundle-utils" "^7.4.0" + "@intlify/shared" "^9.4.0" + "@rollup/pluginutils" "^5.0.2" + "@vue/compiler-sfc" "^3.2.47" + debug "^4.3.3" + fast-glob "^3.2.12" js-yaml "^4.1.0" - json5 "^2.2.0" + json5 "^2.2.3" pathe "^1.0.0" picocolors "^1.0.0" - source-map "0.6.1" - unplugin "^1.0.0" + source-map-js "^1.0.2" + unplugin "^1.1.0" "@intlify/vue-devtools@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1533,14 +1543,6 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - "@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4": version "5.0.5" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.5.tgz#bbb4c175e19ebfeeb8c132c2eea0ecb89941a66c" @@ -2529,6 +2531,17 @@ estree-walker "^2.0.2" source-map-js "^1.0.2" +"@vue/compiler-core@3.4.15": + version "3.4.15" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.15.tgz#be20d1bbe19626052500b48969302cb6f396d36e" + integrity sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw== + dependencies: + "@babel/parser" "^7.23.6" + "@vue/shared" "3.4.15" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + "@vue/compiler-dom@3.3.11": version "3.3.11" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz#36a76ea3a296d41bad133a6912cb0a847d969e4f" @@ -2545,6 +2558,14 @@ "@vue/compiler-core" "3.3.8" "@vue/shared" "3.3.8" +"@vue/compiler-dom@3.4.15": + version "3.4.15" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz#753f5ed55f78d33dff04701fad4d76ff0cf81ee5" + integrity sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ== + dependencies: + "@vue/compiler-core" "3.4.15" + "@vue/shared" "3.4.15" + "@vue/compiler-sfc@3.3.11": version "3.3.11" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz#acfae240c875d067e0e2c9a4e2d910074408c73b" @@ -2561,7 +2582,7 @@ postcss "^8.4.32" source-map-js "^1.0.2" -"@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": +"@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": version "3.3.8" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA== @@ -2577,6 +2598,21 @@ postcss "^8.4.31" source-map-js "^1.0.2" +"@vue/compiler-sfc@^3.2.47": + version "3.4.15" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz#4e5811e681955fcec886cebbec483f6ae463a64b" + integrity sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA== + dependencies: + "@babel/parser" "^7.23.6" + "@vue/compiler-core" "3.4.15" + "@vue/compiler-dom" "3.4.15" + "@vue/compiler-ssr" "3.4.15" + "@vue/shared" "3.4.15" + estree-walker "^2.0.2" + magic-string "^0.30.5" + postcss "^8.4.33" + source-map-js "^1.0.2" + "@vue/compiler-ssr@3.3.11": version "3.3.11" resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz#598942a73b64f2bd3f95908b104a7fbb55fc41a2" @@ -2593,6 +2629,14 @@ "@vue/compiler-dom" "3.3.8" "@vue/shared" "3.3.8" +"@vue/compiler-ssr@3.4.15": + version "3.4.15" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz#a910a5b89ba4f0a776e40b63d69bdae2f50616cf" + integrity sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw== + dependencies: + "@vue/compiler-dom" "3.4.15" + "@vue/shared" "3.4.15" + "@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": version "6.5.1" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" @@ -2729,6 +2773,11 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== +"@vue/shared@3.4.15": + version "3.4.15" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.15.tgz#e7d2ea050c667480cb5e1a6df2ac13bcd03a8f30" + integrity sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g== + "@vue/test-utils@2.2.7": version "2.2.7" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702" @@ -2799,7 +2848,7 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -2809,16 +2858,16 @@ acorn-walk@^8.0.2, acorn-walk@^8.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== -acorn@^7.1.1, acorn@^7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.1.0, acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +acorn@^8.11.3: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -3622,7 +3671,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3816,7 +3865,7 @@ enquirer@^2.3.6: ansi-colors "^4.1.1" strip-ansi "^6.0.1" -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -4160,7 +4209,7 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -4174,7 +4223,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -4234,15 +4283,6 @@ eslint@8.30.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" @@ -4286,7 +4326,7 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -estree-walker@^2.0.1, estree-walker@^2.0.2: +estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -4354,7 +4394,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9: +fast-glob@^3.2.12, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -5296,18 +5336,7 @@ jsonc-eslint-parser@2.1.0: espree "^9.0.0" semver "^7.3.5" -jsonc-eslint-parser@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6" - integrity sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg== - dependencies: - acorn "^7.4.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^6.0.0" - semver "^6.3.0" - -jsonc-eslint-parser@^2.0.0: +jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== @@ -5317,6 +5346,11 @@ jsonc-eslint-parser@^2.0.0: espree "^9.0.0" semver "^7.3.5" +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -5500,6 +5534,13 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" +magic-string@^0.30.0: + version "0.30.6" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.6.tgz#996e21b42f944e45591a68f0905d6a740a12506c" + integrity sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5: version "0.30.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" @@ -5580,6 +5621,16 @@ mitt@^2.1.0: resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230" integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== +mlly@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" + integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + moment@2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" @@ -5852,6 +5903,11 @@ pathe@^1.0.0, pathe@^1.1.1: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.1.0, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -5882,6 +5938,15 @@ pify@^2.2.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + pofile@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" @@ -5918,6 +5983,15 @@ postcss@^8.4.32: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.33: + version "8.4.33" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" + integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -6208,7 +6282,7 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.1.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -6345,7 +6419,7 @@ sortablejs@1.14.0: resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -6824,6 +6898,11 @@ typical@^4.0.0: resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== +ufo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" + integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -6934,7 +7013,17 @@ unplugin-vue-macros@2.4.6: unplugin-combine "^0.7.0" unplugin-vue-define-options "1.3.15" -unplugin@^1.0.0, unplugin@^1.3.2, unplugin@^1.4.0: +unplugin@^1.1.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.6.0.tgz#0bd7c344182c73e685c864f4f7161531f024b942" + integrity sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ== + dependencies: + acorn "^8.11.2" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.1" + +unplugin@^1.3.2, unplugin@^1.4.0: version "1.5.1" resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.1.tgz#806688376fa3dcca4d2fa2c5d27cf6cd0370fbef" integrity sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew== @@ -7253,7 +7342,7 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.6.0: +webpack-virtual-modules@^0.6.0, webpack-virtual-modules@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== @@ -7555,16 +7644,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml-eslint-parser@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz#c7f5f3904f1c06ad55dc7131a731b018426b4898" - integrity sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg== - dependencies: - eslint-visitor-keys "^1.3.0" - lodash "^4.17.20" - yaml "^1.10.0" - -yaml-eslint-parser@^1.0.0: +yaml-eslint-parser@^1.0.0, yaml-eslint-parser@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz#1a9673ebe254328cfc2fa99f297f6d8c9364ccd8" integrity sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg== From 021030433897abdbfd4d69eae145e0d40312ab4c Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 4 Feb 2024 22:33:38 +0000 Subject: [PATCH 296/371] chore(front): update dependency @typescript-eslint/eslint-plugin to v6 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2744> --- front/package.json | 2 +- front/yarn.lock | 160 ++++++++++++++++++++++++--------------------- 2 files changed, 87 insertions(+), 75 deletions(-) diff --git a/front/package.json b/front/package.json index c0a3fc587..6981c8c49 100644 --- a/front/package.json +++ b/front/package.json @@ -68,7 +68,7 @@ "@types/semantic-ui": "2.2.9", "@types/showdown": "2.0.6", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", - "@typescript-eslint/eslint-plugin": "5.48.2", + "@typescript-eslint/eslint-plugin": "6.20.0", "@vitejs/plugin-vue": "4.2.3", "@vitest/coverage-c8": "0.25.8", "@vue-macros/volar": "0.13.3", diff --git a/front/yarn.lock b/front/yarn.lock index 0a9a4f7eb..bdb03405e 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1245,14 +1245,14 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== @@ -1741,7 +1741,7 @@ dependencies: "@types/sizzle" "*" -"@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1980,7 +1980,7 @@ "@types/semantic-ui-transition" "*" "@types/semantic-ui-visibility" "*" -"@types/semver@^7.3.12": +"@types/semver@^7.3.12", "@types/semver@^7.5.0": version "7.5.6" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== @@ -2022,20 +2022,22 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" - integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== +"@typescript-eslint/eslint-plugin@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" + integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== dependencies: - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/type-utils" "5.48.2" - "@typescript-eslint/utils" "5.48.2" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/type-utils" "6.20.0" + "@typescript-eslint/utils" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" debug "^4.3.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" "@typescript-eslint/eslint-plugin@^5.59.1": version "5.62.0" @@ -2063,14 +2065,6 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" - integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== - dependencies: - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/visitor-keys" "5.48.2" - "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" @@ -2079,15 +2073,13 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" - integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== +"@typescript-eslint/scope-manager@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" + integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== dependencies: - "@typescript-eslint/typescript-estree" "5.48.2" - "@typescript-eslint/utils" "5.48.2" - debug "^4.3.4" - tsutils "^3.21.0" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" "@typescript-eslint/type-utils@5.62.0": version "5.62.0" @@ -2099,28 +2091,25 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" - integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== +"@typescript-eslint/type-utils@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" + integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== + dependencies: + "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/utils" "6.20.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" - integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== - dependencies: - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/visitor-keys" "5.48.2" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" +"@typescript-eslint/types@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" + integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2135,19 +2124,19 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" - integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== +"@typescript-eslint/typescript-estree@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" + integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/typescript-estree" "5.48.2" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" "@typescript-eslint/utils@5.62.0": version "5.62.0" @@ -2163,13 +2152,18 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" - integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== +"@typescript-eslint/utils@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" + integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== dependencies: - "@typescript-eslint/types" "5.48.2" - eslint-visitor-keys "^3.3.0" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/typescript-estree" "6.20.0" + semver "^7.5.4" "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" @@ -2179,6 +2173,14 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" + integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== + dependencies: + "@typescript-eslint/types" "6.20.0" + eslint-visitor-keys "^3.4.1" + "@vitejs/plugin-vue@4.2.3": version "4.2.3" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" @@ -4888,6 +4890,11 @@ ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== +ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + immutable@^4.0.0: version "4.3.4" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" @@ -5590,6 +5597,13 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +minimatch@9.0.3, minimatch@^9.0.0: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -5604,13 +5618,6 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -6287,7 +6294,7 @@ semver@^6.1.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: +semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -6778,6 +6785,11 @@ transliteration@2.3.5, transliteration@^2.3.5: dependencies: yargs "^17.5.1" +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" From 446b49fd46af2649f20caa530b77e691dbf74a85 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 4 Feb 2024 23:05:11 +0000 Subject: [PATCH 297/371] chore(front): update dependency @vitejs/plugin-vue to v5 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2745> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 6981c8c49..0d6dba127 100644 --- a/front/package.json +++ b/front/package.json @@ -69,7 +69,7 @@ "@types/showdown": "2.0.6", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", "@typescript-eslint/eslint-plugin": "6.20.0", - "@vitejs/plugin-vue": "4.2.3", + "@vitejs/plugin-vue": "5.0.3", "@vitest/coverage-c8": "0.25.8", "@vue-macros/volar": "0.13.3", "@vue/compiler-sfc": "3.3.11", diff --git a/front/yarn.lock b/front/yarn.lock index bdb03405e..4f1a0d813 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -2181,10 +2181,10 @@ "@typescript-eslint/types" "6.20.0" eslint-visitor-keys "^3.4.1" -"@vitejs/plugin-vue@4.2.3": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" - integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== +"@vitejs/plugin-vue@5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" + integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== "@vitest/coverage-c8@0.25.8": version "0.25.8" From 765bc62a2b38a857a7bf6f2ffe3a0872890bd47c Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Sun, 4 Feb 2024 23:33:21 +0000 Subject: [PATCH 298/371] chore(front): update dependency @vue/eslint-config-typescript to v12 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2746> --- front/package.json | 2 +- front/yarn.lock | 157 +++++++++++---------------------------------- 2 files changed, 37 insertions(+), 122 deletions(-) diff --git a/front/package.json b/front/package.json index 0d6dba127..8a87c4561 100644 --- a/front/package.json +++ b/front/package.json @@ -74,7 +74,7 @@ "@vue-macros/volar": "0.13.3", "@vue/compiler-sfc": "3.3.11", "@vue/eslint-config-standard": "8.0.1", - "@vue/eslint-config-typescript": "11.0.3", + "@vue/eslint-config-typescript": "12.0.0", "@vue/test-utils": "2.2.7", "@vue/tsconfig": "0.1.3", "axios-mock-adapter": "1.21.4", diff --git a/front/yarn.lock b/front/yarn.lock index 4f1a0d813..80612bec4 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1245,14 +1245,14 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": +"@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.1": +"@eslint-community/regexpp@^4.5.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== @@ -1741,7 +1741,7 @@ dependencies: "@types/sizzle" "*" -"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.12": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1980,7 +1980,7 @@ "@types/semantic-ui-transition" "*" "@types/semantic-ui-visibility" "*" -"@types/semver@^7.3.12", "@types/semver@^7.5.0": +"@types/semver@^7.5.0": version "7.5.6" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== @@ -2022,7 +2022,7 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@6.20.0": +"@typescript-eslint/eslint-plugin@6.20.0", "@typescript-eslint/eslint-plugin@^6.7.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== @@ -2039,39 +2039,16 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/eslint-plugin@^5.59.1": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== +"@typescript-eslint/parser@^6.7.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.20.0.tgz#17e314177304bdf498527e3c4b112e41287b7416" + integrity sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w== dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.59.1": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" "@typescript-eslint/scope-manager@6.20.0": version "6.20.0" @@ -2081,16 +2058,6 @@ "@typescript-eslint/types" "6.20.0" "@typescript-eslint/visitor-keys" "6.20.0" -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - "@typescript-eslint/type-utils@6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" @@ -2101,29 +2068,11 @@ debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - "@typescript-eslint/types@6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" @@ -2138,20 +2087,6 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - "@typescript-eslint/utils@6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" @@ -2165,14 +2100,6 @@ "@typescript-eslint/typescript-estree" "6.20.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" @@ -2656,14 +2583,14 @@ eslint-plugin-n "^15.2.4" eslint-plugin-promise "^6.0.0" -"@vue/eslint-config-typescript@11.0.3": - version "11.0.3" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz#c720efa657d102cd2945bc54b4a79f35d57f6307" - integrity sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw== +"@vue/eslint-config-typescript@12.0.0": + version "12.0.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz#0ce22d97af5e4155f3f2e7b21a48cfde8a6f3365" + integrity sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg== dependencies: - "@typescript-eslint/eslint-plugin" "^5.59.1" - "@typescript-eslint/parser" "^5.59.1" - vue-eslint-parser "^9.1.1" + "@typescript-eslint/eslint-plugin" "^6.7.0" + "@typescript-eslint/parser" "^6.7.0" + vue-eslint-parser "^9.3.1" "@vue/language-core@1.8.8": version "1.8.8" @@ -4195,14 +4122,6 @@ eslint-plugin-vue@9.8.0: vue-eslint-parser "^9.0.1" xml-name-validator "^4.0.0" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-scope@^7.1.1: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" @@ -4313,11 +4232,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -5678,11 +5592,6 @@ nanoid@^3.3.6, nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6294,7 +6203,7 @@ semver@^6.1.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -6800,7 +6709,7 @@ tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.3: +tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -6810,13 +6719,6 @@ tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7185,7 +7087,7 @@ vue-demi@^0.12.5: resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== -vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1: +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: version "9.3.2" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== @@ -7198,6 +7100,19 @@ vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1: lodash "^4.17.21" semver "^7.3.6" +vue-eslint-parser@^9.3.1: + version "9.4.2" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d" + integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + vue-gettext@2.1.12: version "2.1.12" resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33" From d7d697622931b5fcae4d1c44ada61c6323a4a20c Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 2 Feb 2024 09:27:22 +0100 Subject: [PATCH 299/371] feat(dev): Make neovim available in gitpod Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2734> --- .gitpod/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index d996a8a13..899bd8520 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -6,6 +6,8 @@ RUN sudo apt update -y \ RUN pyenv install 3.11 && pyenv global 3.11 +RUN brew install neovim + RUN pip install poetry pre-commit jinja2 towncrier \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true From f76a7976384a0db8c7227eab9edfe71f04855383 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 5 Feb 2024 12:04:13 +0000 Subject: [PATCH 300/371] chore(front): update dependency vue-i18n to v9.9.1 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2749> --- front/package.json | 2 +- front/yarn.lock | 59 +++++++++++----------------------------------- 2 files changed, 15 insertions(+), 46 deletions(-) diff --git a/front/package.json b/front/package.json index 8a87c4561..6c3a31a72 100644 --- a/front/package.json +++ b/front/package.json @@ -45,7 +45,7 @@ "universal-cookie": "4.0.4", "vue": "3.3.11", "vue-gettext": "2.1.12", - "vue-i18n": "9.3.0-beta.19", + "vue-i18n": "9.9.1", "vue-router": "4.2.5", "vue-upload-component": "3.1.8", "vue-virtual-scroller": "2.0.0-beta.8", diff --git a/front/yarn.lock b/front/yarn.lock index 80612bec4..004f55be4 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1316,15 +1316,13 @@ source-map-js "^1.0.1" yaml-eslint-parser "^1.2.2" -"@intlify/core-base@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0-beta.19.tgz#f89de10d183f4352500beb9c844632c96c5308b0" - integrity sha512-mlpVZ1w6ZwnP9QZAs+RzGuFMCuYjZPboX3hX7JzhV49vUcsLj0R4667cmcLpPZzXJguIy/zaqbIyoUvLV8HONQ== +"@intlify/core-base@9.9.1": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.9.1.tgz#97ff0a98bf416c3f895e2a4fbcb0da353326b71a" + integrity sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA== dependencies: - "@intlify/devtools-if" "9.3.0-beta.19" - "@intlify/message-compiler" "9.3.0-beta.19" - "@intlify/shared" "9.3.0-beta.19" - "@intlify/vue-devtools" "9.3.0-beta.19" + "@intlify/message-compiler" "9.9.1" + "@intlify/shared" "9.9.1" "@intlify/core-base@^9.1.9": version "9.7.1" @@ -1334,13 +1332,6 @@ "@intlify/message-compiler" "9.7.1" "@intlify/shared" "9.7.1" -"@intlify/devtools-if@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0-beta.19.tgz#d50265591089456d923e0edfb575985b4b9c0b90" - integrity sha512-L4NyqMcuQURejKy9XX0m/2kb37f56NAUvbiXKRx96pahSBclY6T+E0TrKXup0Hx6T0qY55QYGRwyVLeHXIHAMA== - dependencies: - "@intlify/shared" "9.3.0-beta.19" - "@intlify/eslint-plugin-vue-i18n@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-2.0.0.tgz#7308327452742c07e4aef8735f6a4b17cefd58f5" @@ -1362,14 +1353,6 @@ vue-eslint-parser "^9.0.0" yaml-eslint-parser "^1.0.0" -"@intlify/message-compiler@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.19.tgz#1b66bf87d15843c9354a0d07d26e417f44b65182" - integrity sha512-5RBn5tMOsWh5FqM65IfEJvfpRS8R0lHEUVNDa2rNc9Y7oGEI7swezlbFqU9Kc5FyHy5Kx2jHtdgFIipDwnIYFQ== - dependencies: - "@intlify/shared" "9.3.0-beta.19" - source-map "0.6.1" - "@intlify/message-compiler@9.7.1", "@intlify/message-compiler@^9.1.9": version "9.7.1" resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.7.1.tgz#2cd5f26c6b9f19afffd62e69d192cc4e9e51ba9a" @@ -1378,7 +1361,7 @@ "@intlify/shared" "9.7.1" source-map-js "^1.0.2" -"@intlify/message-compiler@^9.4.0": +"@intlify/message-compiler@9.9.1", "@intlify/message-compiler@^9.4.0": version "9.9.1" resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz#4cd9c5a408be27784928e4cd57a77ea6ddb17e56" integrity sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA== @@ -1386,11 +1369,6 @@ "@intlify/shared" "9.9.1" source-map-js "^1.0.2" -"@intlify/shared@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.19.tgz#090bdd5d6ed1eabbb92ee2f2ead2668edc576596" - integrity sha512-+lhQggrLvlQ/O5OmIYAc9gadcYXMoaDi0Doef+X/f6TLZFr9PTMjOpBWmpwNNHi026e54jckntUn6GzqDtIN4w== - "@intlify/shared@9.7.1": version "9.7.1" resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.7.1.tgz#a4902421aacda2d716981eb9528aef0163c7bb0a" @@ -1419,14 +1397,6 @@ source-map-js "^1.0.2" unplugin "^1.1.0" -"@intlify/vue-devtools@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0-beta.19.tgz#e3053ec984d28028a3ce15cffd74ce1af40c37f7" - integrity sha512-7yz8sUbovPUIf8sCX3+sMdw/xEyeHKBCc7Agxcxv54PiQz3zwsVl0hC1X+JXUy46FiPsMEoFfY8O27xOFLupaw== - dependencies: - "@intlify/core-base" "9.3.0-beta.19" - "@intlify/shared" "9.3.0-beta.19" - "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" @@ -6353,7 +6323,7 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -7118,14 +7088,13 @@ vue-gettext@2.1.12: resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33" integrity sha512-7Kw36xtKvARp8ZafQGPK9WR6EM+dhFUikR5f0+etSkiHuvUM3yf1HsRDLYoLLdJ0AMaXxKwgekumzvCk6KX8rA== -vue-i18n@9.3.0-beta.19: - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.3.0-beta.19.tgz#d660d9b342322d8c3ae62965bf6957ff8e52607b" - integrity sha512-1pbEcoAbxaAPuR5hODnQJ5CtIimnVD+aUVnCztuuRaOZPLP1i4FxkWVvb1lu8JIRC5pePyODZxi3yoy3PUYheA== +vue-i18n@9.9.1: + version "9.9.1" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.9.1.tgz#3c2fdf3c9db430572a1246439d541d01e2795c06" + integrity sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw== dependencies: - "@intlify/core-base" "9.3.0-beta.19" - "@intlify/shared" "9.3.0-beta.19" - "@intlify/vue-devtools" "9.3.0-beta.19" + "@intlify/core-base" "9.9.1" + "@intlify/shared" "9.9.1" "@vue/devtools-api" "^6.5.0" vue-observe-visibility@^2.0.0-alpha.1: From 1eaad85c7d0ced496a3ceb2ce01cc912324d186a Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 5 Feb 2024 15:10:13 +0100 Subject: [PATCH 301/371] chore(docs) Update all dependencies Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2750> --- docs/Makefile | 2 +- docs/poetry.lock | 1382 +++++++++++++++++++------------------------ docs/pyproject.toml | 16 +- 3 files changed, 626 insertions(+), 774 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index 055b8cbe2..13e013261 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -14,7 +14,7 @@ $(VENV): $(MAKE) install install: - poetry install + poetry install --no-root poetry run pip install --no-deps --editable ../api clean: diff --git a/docs/poetry.lock b/docs/poetry.lock index d788f9745..f31449978 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -1,613 +1,48 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + [[package]] name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" -category = "main" +version = "0.7.16" +description = "A light, configurable Sphinx theme" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +files = [ + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, +] [[package]] -name = "asgiref" -version = "3.7.2" -description = "ASGI specs, helper code, and adapters" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} - -[package.extras] -tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] - -[[package]] -name = "Babel" -version = "2.13.1" +name = "babel" +version = "2.14.0" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" - -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} -setuptools = {version = "*", markers = "python_version >= \"3.12\""} +files = [ + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, +] [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] [[package]] name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" - -[[package]] -name = "django" -version = "3.2.23" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -asgiref = ">=3.3.2,<4" -pytz = "*" -sqlparse = ">=0.2.2" - -[package.extras] -argon2 = ["argon2-cffi (>=19.1.0)"] -bcrypt = ["bcrypt"] - -[[package]] -name = "django-environ" -version = "0.10.0" -description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." -category = "main" -optional = false -python-versions = ">=3.5,<4" - -[package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] - -[[package]] -name = "docutils" -version = "0.17.1" -description = "Docutils -- Python Documentation Utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "Jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "livereload" -version = "2.6.3" -description = "Python LiveReload is an awesome tool for web developers" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" -tornado = {version = "*", markers = "python_version > \"2.7\""} - -[[package]] -name = "markdown-it-py" -version = "2.2.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "MarkupSafe" -version = "2.1.3" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mdit-py-plugins" -version = "0.3.5" -description = "Collection of plugins for markdown-it-py" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" - -[package.extras] -code-style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "myst-parser" -version = "1.0.0" -description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -docutils = ">=0.15,<0.20" -jinja2 = "*" -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.4,<0.4.0" -pyyaml = "*" -sphinx = ">=5,<7" - -[package.extras] -code-style = ["pre-commit (>=3.0,<4.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] -testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] -testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "Pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pytz" -version = "2023.3.post1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "PyYAML" -version = "6.0.1" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "Sphinx" -version = "5.3.0" -description = "Python documentation generator" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=2.9" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" -imagesize = ">=1.3" -importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} -Jinja2 = ">=3.0" -packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" -snowballstemmer = ">=2.0" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] - -[[package]] -name = "sphinx-autobuild" -version = "2021.3.14" -description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -colorama = "*" -livereload = "*" -sphinx = "*" - -[package.extras] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "sphinx-copybutton" -version = "0.5.2" -description = "Add a copy button to each of your code cells." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -sphinx = ">=1.8" - -[package.extras] -code-style = ["pre-commit (==2.12.1)"] -rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] - -[[package]] -name = "sphinx_design" -version = "0.3.0" -description = "A sphinx extension for designing beautiful, view size responsive web components." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -sphinx = ">=4,<6" - -[package.extras] -code-style = ["pre-commit (>=2.12,<3.0)"] -rtd = ["myst-parser (>=0.18.0,<0.19.0)"] -testing = ["myst-parser (>=0.18.0,<0.19.0)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] -theme-furo = ["furo (>=2022.06.04,<2022.07)"] -theme-pydata = ["pydata-sphinx-theme (>=0.9.0,<0.10.0)"] -theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] -theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] - -[[package]] -name = "sphinx-intl" -version = "2.0.1" -description = "Sphinx utility that make it easy to translate and to apply translation." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -babel = "*" -click = "*" -setuptools = "*" -sphinx = "*" - -[package.extras] -test = ["mock", "pytest"] -transifex = ["transifex_client (>=0.11)"] - -[[package]] -name = "sphinx-rtd-theme" -version = "2.0.0" -description = "Read the Docs theme for Sphinx" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -docutils = "<0.21" -sphinx = ">=5,<8" -sphinxcontrib-jquery = ">=4,<5" - -[package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.4" -description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.1" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jquery" -version = "4.1" -description = "Extension to include jQuery on newer Sphinx releases" -category = "main" -optional = false -python-versions = ">=2.7" - -[package.dependencies] -Sphinx = ">=1.8" - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-mermaid" -version = "0.7.1" -description = "Mermaid diagrams in yours Sphinx powered docs" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sqlparse" -version = "0.4.4" -description = "A non-validating SQL parser." -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["build", "flake8"] -doc = ["sphinx"] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "tornado" -version = "6.3.3" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" -optional = false -python-versions = ">= 3.8" - -[[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" -optional = false -python-versions = ">=3.8" - -[[package]] -name = "urllib3" -version = "2.1.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.8" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[metadata] -lock-version = "1.1" -python-versions = "^3.8" -content-hash = "325f5c66028bac4903a9f0ad2165e865ff5b19846799d1695df1f90c19b8435b" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] -asgiref = [ - {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, - {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, -] -Babel = [ - {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, - {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, -] -certifi = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] -charset-normalizer = [ +files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, @@ -699,143 +134,303 @@ charset-normalizer = [ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] -click = [ + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] -colorama = [ + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -django = [ - {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, - {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, + +[[package]] +name = "docutils" +version = "0.20.1" +description = "Docutils -- Python Documentation Utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] -django-environ = [ - {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, - {file = "django_environ-0.10.0-py2.py3-none-any.whl", hash = "sha256:510f8c9c1d0a38b0815f91504270c29440a0cf44fab07f55942fa8d31bbb9be6"}, + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] -importlib-metadata = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + +[[package]] +name = "importlib-metadata" +version = "7.0.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] -Jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "jinja2" +version = "3.1.3" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] -livereload = [ + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "livereload" +version = "2.6.3" +description = "Python LiveReload is an awesome tool for web developers" +optional = false +python-versions = "*" +files = [ {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, ] -markdown-it-py = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, + +[package.dependencies] +six = "*" +tornado = {version = "*", markers = "python_version > \"2.7\""} + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] -MarkupSafe = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] -mdit-py-plugins = [ - {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, - {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, + +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, ] -mdurl = [ + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -myst-parser = [ - {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, - {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, + +[[package]] +name = "myst-parser" +version = "2.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.8" +files = [ + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, ] -packaging = [ + +[package.dependencies] +docutils = ">=0.16,<0.21" +jinja2 = "*" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" +pyyaml = "*" +sphinx = ">=6,<8" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] -Pygments = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] -pytz = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, -] -PyYAML = [ + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -843,16 +438,8 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -869,7 +456,6 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -877,108 +463,376 @@ PyYAML = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] -requests = [ + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] -setuptools = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "69.0.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] -six = [ + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -snowballstemmer = [ + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +optional = false +python-versions = "*" +files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -Sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, + +[[package]] +name = "sphinx" +version = "7.2.6" +description = "Python documentation generator" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, + {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, ] -sphinx-autobuild = [ - {file = "sphinx-autobuild-2021.3.14.tar.gz", hash = "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05"}, - {file = "sphinx_autobuild-2021.3.14-py3-none-any.whl", hash = "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac"}, + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.18.1,<0.21" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.14" +requests = ">=2.25.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.9" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] + +[[package]] +name = "sphinx-autobuild" +version = "2024.2.4" +description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinx_autobuild-2024.2.4-py3-none-any.whl", hash = "sha256:63fd87ab7505872a89aef468ce6503f65e794a195f4ae62269db3b85b72d4854"}, + {file = "sphinx_autobuild-2024.2.4.tar.gz", hash = "sha256:cb9d2121a176d62d45471624872afc5fad7755ad662738abe400ecf4a7954303"}, ] -sphinx-copybutton = [ + +[package.dependencies] +colorama = "*" +livereload = "*" +sphinx = "*" + +[package.extras] +test = ["pytest (>=6.0)", "pytest-cov"] + +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." +optional = false +python-versions = ">=3.7" +files = [ {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, ] -sphinx_design = [ - {file = "sphinx_design-0.3.0-py3-none-any.whl", hash = "sha256:823c1dd74f31efb3285ec2f1254caefed29d762a40cd676f58413a1e4ed5cc96"}, - {file = "sphinx_design-0.3.0.tar.gz", hash = "sha256:7183fa1fae55b37ef01bda5125a21ee841f5bbcbf59a35382be598180c4cefba"}, + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] + +[[package]] +name = "sphinx-design" +version = "0.5.0" +description = "A sphinx extension for designing beautiful, view size responsive web components." +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinx_design-0.5.0-py3-none-any.whl", hash = "sha256:1af1267b4cea2eedd6724614f19dcc88fe2e15aff65d06b2f6252cee9c4f4c1e"}, + {file = "sphinx_design-0.5.0.tar.gz", hash = "sha256:e8e513acea6f92d15c6de3b34e954458f245b8e761b45b63950f65373352ab00"}, ] -sphinx-intl = [ - {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, + +[package.dependencies] +sphinx = ">=5,<8" + +[package.extras] +code-style = ["pre-commit (>=3,<4)"] +rtd = ["myst-parser (>=1,<3)"] +testing = ["myst-parser (>=1,<3)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2023.7.0,<2023.8.0)"] +theme-pydata = ["pydata-sphinx-theme (>=0.13.0,<0.14.0)"] +theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] +theme-sbt = ["sphinx-book-theme (>=1.0,<2.0)"] + +[[package]] +name = "sphinx-intl" +version = "2.1.0" +description = "Sphinx utility that make it easy to translate and to apply translation." +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx-intl-2.1.0.tar.gz", hash = "sha256:9d9849ae42515b39786824e99f1e30db0404c377b01bb022690fc932b0221c02"}, + {file = "sphinx_intl-2.1.0-py3-none-any.whl", hash = "sha256:9798946b995989de691387651d70c3fc191275b587e2e519655541edfd7bbd68"}, ] -sphinx-rtd-theme = [ + +[package.dependencies] +babel = "*" +click = "*" +setuptools = "*" +sphinx = "*" + +[package.extras] +test = ["mock", "pytest", "six"] + +[[package]] +name = "sphinx-rtd-theme" +version = "2.0.0" +description = "Read the Docs theme for Sphinx" +optional = false +python-versions = ">=3.6" +files = [ {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, ] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + +[package.dependencies] +docutils = "<0.21" +sphinx = ">=5,<8" +sphinxcontrib-jquery = ">=4,<5" + +[package.extras] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.8" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, + {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, ] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.6" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, + {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, ] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.5" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, + {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, ] -sphinxcontrib-jquery = [ + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +description = "Extension to include jQuery on newer Sphinx releases" +optional = false +python-versions = ">=2.7" +files = [ {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, ] -sphinxcontrib-jsmath = [ + +[package.dependencies] +Sphinx = ">=1.8" + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +optional = false +python-versions = ">=3.5" +files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, ] -sphinxcontrib-mermaid = [ - {file = "sphinxcontrib-mermaid-0.7.1.tar.gz", hash = "sha256:aa8a40b50ec86ad12824b62180240ca52a9bda8424455d7eb252eae9aa5d293c"}, - {file = "sphinxcontrib_mermaid-0.7.1-py2.py3-none-any.whl", hash = "sha256:3e20de1937c30dfa807e446bf99983d73d0dd3dc5c6524addda59800fe928762"}, + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-mermaid" +version = "0.9.2" +description = "Mermaid diagrams in yours Sphinx powered docs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinxcontrib-mermaid-0.9.2.tar.gz", hash = "sha256:252ef13dd23164b28f16d8b0205cf184b9d8e2b714a302274d9f59eb708e77af"}, + {file = "sphinxcontrib_mermaid-0.9.2-py3-none-any.whl", hash = "sha256:6795a72037ca55e65663d2a2c1a043d636dc3d30d418e56dd6087d1459d98a5d"}, ] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.7" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, + {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, ] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.10" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, + {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, ] -sqlparse = [ - {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, - {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] +test = ["pytest"] + +[[package]] +name = "tornado" +version = "6.4" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.8" +files = [ + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] -tornado = [ - {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, - {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, - {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, - {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, - {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, - {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, - {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, + +[[package]] +name = "urllib3" +version = "2.2.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, + {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, ] -typing-extensions = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, -] -urllib3 = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, -] -zipp = [ + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "e15a7c2b38f61479b9a52c78cfbd17f78430c6a9ced68642a98ca7ee488b6b9c" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 77b174756..501677ff5 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -6,21 +6,19 @@ authors = ["Funkwhale Collective <contact@funkwhale.audio>"] license = "AGPLv3" [tool.poetry.dependencies] -python = "^3.8" +python = "^3.9" -sphinx = "==5.3.0" -sphinx_design = "==0.3.0" +sphinx = "7.2.6" +sphinx_design = "0.5.0" sphinx-copybutton = "==0.5.2" -sphinx-intl = "2.0.1" +sphinx-intl = "2.1.0" sphinx-rtd-theme = "==2.0.0" -sphinxcontrib-mermaid = "0.7.1" -myst-parser = "1.0.0" +sphinxcontrib-mermaid = "0.9.2" +myst-parser = "2.0.0" -django = "==3.2.23" -django-environ = "==0.10.0" [tool.poetry.group.dev.dependencies] -sphinx-autobuild = "2021.3.14" +sphinx-autobuild = "2024.2.4" [build-system] requires = ["poetry-core>=1.0.0"] From 3b45fde10acd79ba94fd9f7a28c0137c8b4ab347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <cda@sporiff.dev> Date: Mon, 5 Feb 2024 15:46:37 +0100 Subject: [PATCH 302/371] Re-add django dependencies We use Django/django-environ to auto doc FW settings Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2750> --- docs/poetry.lock | 103 +++++++++++++++++++++++++++++++++++++++++++- docs/pyproject.toml | 2 + 2 files changed, 104 insertions(+), 1 deletion(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index f31449978..fae0193f0 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -11,6 +11,23 @@ files = [ {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] +[[package]] +name = "asgiref" +version = "3.7.2" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.7" +files = [ + {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, + {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + [[package]] name = "babel" version = "2.14.0" @@ -160,6 +177,42 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "django" +version = "3.2.23" +description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, + {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, +] + +[package.dependencies] +asgiref = ">=3.3.2,<4" +pytz = "*" +sqlparse = ">=0.2.2" + +[package.extras] +argon2 = ["argon2-cffi (>=19.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +name = "django-environ" +version = "0.11.2" +description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "django-environ-0.11.2.tar.gz", hash = "sha256:f32a87aa0899894c27d4e1776fa6b477e8164ed7f6b3e410a62a6d72caaf64be"}, + {file = "django_environ-0.11.2-py2.py3-none-any.whl", hash = "sha256:0ff95ab4344bfeff693836aa978e6840abef2e2f1145adff7735892711590c05"}, +] + +[package.extras] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] + [[package]] name = "docutils" version = "0.20.1" @@ -419,6 +472,17 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + [[package]] name = "pyyaml" version = "6.0.1" @@ -431,6 +495,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -438,8 +503,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -456,6 +528,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -463,6 +536,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -780,6 +854,22 @@ lint = ["docutils-stubs", "flake8", "mypy"] standalone = ["Sphinx (>=5)"] test = ["pytest"] +[[package]] +name = "sqlparse" +version = "0.4.4" +description = "A non-validating SQL parser." +optional = false +python-versions = ">=3.5" +files = [ + {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, + {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, +] + +[package.extras] +dev = ["build", "flake8"] +doc = ["sphinx"] +test = ["pytest", "pytest-cov"] + [[package]] name = "tornado" version = "6.4" @@ -800,6 +890,17 @@ files = [ {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] +[[package]] +name = "typing-extensions" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + [[package]] name = "urllib3" version = "2.2.0" @@ -835,4 +936,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "e15a7c2b38f61479b9a52c78cfbd17f78430c6a9ced68642a98ca7ee488b6b9c" +content-hash = "e55167dfe5da2005558d60d1d997ddc9e50c93533a285e9c443ef8c95b122878" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 501677ff5..1a3af1120 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -15,6 +15,8 @@ sphinx-intl = "2.1.0" sphinx-rtd-theme = "==2.0.0" sphinxcontrib-mermaid = "0.9.2" myst-parser = "2.0.0" +django-environ = "==0.11.2" +django = "==3.2.23" [tool.poetry.group.dev.dependencies] From e6e1b5cdc4e28c0d01805bcfa2d9d8ae06658cbb Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 5 Feb 2024 15:02:56 +0000 Subject: [PATCH 303/371] chore(front): update dependency cypress to v13 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2748> --- front/package.json | 2 +- front/yarn.lock | 44 ++++++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/front/package.json b/front/package.json index 6c3a31a72..b5aeb4c77 100644 --- a/front/package.json +++ b/front/package.json @@ -78,7 +78,7 @@ "@vue/test-utils": "2.2.7", "@vue/tsconfig": "0.1.3", "axios-mock-adapter": "1.21.4", - "cypress": "12.14.0", + "cypress": "13.6.4", "eslint": "8.30.0", "eslint-config-standard": "17.0.0", "eslint-plugin-html": "7.1.0", diff --git a/front/yarn.lock b/front/yarn.lock index 004f55be4..5b1046acc 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -993,10 +993,10 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cypress/request@^2.88.10": - version "2.88.12" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.12.tgz#ba4911431738494a85e93fb04498cb38bc55d590" - integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== +"@cypress/request@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" + integrity sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -1011,7 +1011,7 @@ json-stringify-safe "~5.0.1" mime-types "~2.1.19" performance-now "^2.1.0" - qs "~6.10.3" + qs "6.10.4" safe-buffer "^5.1.2" tough-cookie "^4.1.3" tunnel-agent "^0.6.0" @@ -1752,11 +1752,6 @@ dependencies: undici-types "~5.26.4" -"@types/node@^14.14.31": - version "14.18.63" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" - integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== - "@types/parse-json@^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" @@ -3496,14 +3491,13 @@ csstype@^3.1.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -cypress@12.14.0: - version "12.14.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.14.0.tgz#37a19b85f5e9d881995e9fee1ddf41b3d3a623dd" - integrity sha512-HiLIXKXZaIT1RT7sw1sVPt+qKtis3uYNm6KwC4qoYjabwLKaqZlyS/P+uVvvlBNcHIwL/BC6nQZajpbUd7hOgQ== +cypress@13.6.4: + version "13.6.4" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.6.4.tgz#42c88d3ee0342f1681abfacabf9c1f082676bc53" + integrity sha512-pYJjCfDYB+hoOoZuhysbbYhEmNW7DEDsqn+ToCLwuVowxUXppIWRr7qk4TVRIU471ksfzyZcH+mkoF0CQUKnpw== dependencies: - "@cypress/request" "^2.88.10" + "@cypress/request" "^3.0.0" "@cypress/xvfb" "^1.2.4" - "@types/node" "^14.14.31" "@types/sinonjs__fake-timers" "8.1.1" "@types/sizzle" "^2.3.2" arch "^2.2.0" @@ -3536,9 +3530,10 @@ cypress@12.14.0: minimist "^1.2.8" ospath "^1.2.2" pretty-bytes "^5.6.0" + process "^0.11.10" proxy-from-env "1.0.0" request-progress "^3.0.0" - semver "^7.3.2" + semver "^7.5.3" supports-color "^8.1.1" tmp "~0.2.1" untildify "^4.0.0" @@ -5893,6 +5888,11 @@ pretty-bytes@^6.0.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" @@ -5921,10 +5921,10 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@~6.10.3: - version "6.10.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" - integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== +qs@6.10.4: + version "6.10.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.4.tgz#6a3003755add91c0ec9eacdc5f878b034e73f9e7" + integrity sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g== dependencies: side-channel "^1.0.4" @@ -6173,7 +6173,7 @@ semver@^6.1.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== From 9853b899115b5b1e7608f0975b29d4510818098f Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 5 Feb 2024 15:03:06 +0000 Subject: [PATCH 304/371] chore: update cypress/included docker tag to v13 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2752> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d5cdcb54e..f24f4e23d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -313,7 +313,7 @@ test_integration: interruptible: true image: - name: cypress/included:12.14.0 + name: cypress/included:13.6.4 entrypoint: [""] cache: - *front_cache From b0423d412fbcbcb1f6517c4e3bf1ab2a581f3725 Mon Sep 17 00:00:00 2001 From: petitminion <pablodurandoz@riseup.net> Date: Mon, 5 Feb 2024 20:25:17 +0000 Subject: [PATCH 305/371] add prune mbid cli doc NOCHANGELOG --- .../administrator/manage-script/mbid_prune.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/administrator/manage-script/mbid_prune.md diff --git a/docs/administrator/manage-script/mbid_prune.md b/docs/administrator/manage-script/mbid_prune.md new file mode 100644 index 000000000..2d5c963af --- /dev/null +++ b/docs/administrator/manage-script/mbid_prune.md @@ -0,0 +1,40 @@ +# Delete funkwhale objects that don't have a Musicbrainz id + +If you enable the option to [only allow MusicBrainz content](../configuration/instance-settings.md) on your pod after you've uploaded content,you can to use this command to prune content that doesn't have a MusicBrainz ID to make your database more consistent. + +```{warning} +This action **does not** send a notification to your users before content is removed. You may want to warm them before. +``` + +```{warning} +Running `prune_non_mbid_content` with the `--no-dry-run` flag is irreversible. Make sure you [back up your data](../upgrade/backup.md). +``` + +::::{tab-set} + +:::{tab-item} Debian +:sync: debian + +```{code-block} sh +venv/bin/funkwhale-manage prune_non_mbid_content +``` + +::: + +:::{tab-item} Docker +:sync: docker + +```{code-block} sh +sudo docker compose run --rm api funkwhale-manage prune_non_mbid_content +``` + +::: +:::: + +```{note} +The command excludes tracks that are in users' favorites, playlists, and listen history. To include these tracks, add the corresponding flags: + +- `--include-favorites-content` +- `--include-listened-content` +- `--include-playlist-content` +``` From fc456e6985f14d6a95e5ba609fa38d0ed47a29dc Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 5 Feb 2024 20:33:30 +0000 Subject: [PATCH 306/371] chore(front): update dependency dompurify to v3 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2753> --- front/package.json | 4 ++-- front/yarn.lock | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/front/package.json b/front/package.json index b5aeb4c77..e155fe668 100644 --- a/front/package.json +++ b/front/package.json @@ -30,7 +30,7 @@ "butterchurn": "3.0.0-beta.4", "butterchurn-presets": "3.0.0-beta.4", "diff": "5.1.0", - "dompurify": "2.4.7", + "dompurify": "3.0.8", "focus-trap": "7.2.0", "fomantic-ui-css": "2.9.3", "idb-keyval": "6.2.1", @@ -60,7 +60,7 @@ "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "2.0.0", "@types/diff": "5.0.9", - "@types/dompurify": "2.4.0", + "@types/dompurify": "3.0.5", "@types/jquery": "3.5.29", "@types/lodash-es": "4.17.12", "@types/moxios": "0.4.17", diff --git a/front/yarn.lock b/front/yarn.lock index 5b1046acc..cac397ec5 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1674,10 +1674,10 @@ resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ== -"@types/dompurify@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.4.0.tgz#fd9706392a88e0e0e6d367f3588482d817df0ab9" - integrity sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg== +"@types/dompurify@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-3.0.5.tgz#02069a2fcb89a163bacf1a788f73cb415dd75cb7" + integrity sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg== dependencies: "@types/trusted-types" "*" @@ -3690,10 +3690,10 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@2.4.7: - version "2.4.7" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" - integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== +dompurify@3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" + integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== "dompurify@^2.4.3 || ^3.0.0": version "3.0.6" From ee0abed0b7596388655b8c5f4ae4e0811e53035f Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 5 Feb 2024 22:03:38 +0000 Subject: [PATCH 307/371] chore(front): update dependency eslint-plugin-n to v16 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2755> --- front/package.json | 2 +- front/yarn.lock | 71 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/front/package.json b/front/package.json index e155fe668..41795cac4 100644 --- a/front/package.json +++ b/front/package.json @@ -83,7 +83,7 @@ "eslint-config-standard": "17.0.0", "eslint-plugin-html": "7.1.0", "eslint-plugin-import": "2.26.0", - "eslint-plugin-n": "15.6.1", + "eslint-plugin-n": "16.6.2", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-vue": "9.8.0", diff --git a/front/yarn.lock b/front/yarn.lock index cac397ec5..82e913329 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1245,14 +1245,14 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@eslint-community/eslint-utils@^4.4.0": +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1": +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== @@ -3156,7 +3156,7 @@ buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^3.1.0: +builtin-modules@^3.1.0, builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== @@ -3930,6 +3930,11 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-compat-utils@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" + integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== + eslint-config-standard@17.0.0: version "17.0.0" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" @@ -3964,6 +3969,15 @@ eslint-module-utils@^2.7.3, eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" +eslint-plugin-es-x@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92" + integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ== + dependencies: + "@eslint-community/eslint-utils" "^4.1.2" + "@eslint-community/regexpp" "^4.6.0" + eslint-compat-utils "^0.1.2" + eslint-plugin-es@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" @@ -4029,19 +4043,22 @@ eslint-plugin-import@^2.26.0: semver "^6.3.1" tsconfig-paths "^3.14.2" -eslint-plugin-n@15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz#f7e77f24abb92a550115cf11e29695da122c398c" - integrity sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA== +eslint-plugin-n@16.6.2: + version "16.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" + integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== dependencies: + "@eslint-community/eslint-utils" "^4.4.0" builtins "^5.0.1" - eslint-plugin-es "^4.1.0" - eslint-utils "^3.0.0" - ignore "^5.1.1" - is-core-module "^2.11.0" + eslint-plugin-es-x "^7.5.0" + get-tsconfig "^4.7.0" + globals "^13.24.0" + ignore "^5.2.4" + is-builtin-module "^3.2.1" + is-core-module "^2.12.1" minimatch "^3.1.2" - resolve "^1.22.1" - semver "^7.3.8" + resolve "^1.22.2" + semver "^7.5.3" eslint-plugin-n@^15.2.4: version "15.7.0" @@ -4509,6 +4526,13 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-tsconfig@^4.7.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" + getos@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" @@ -4592,6 +4616,13 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globals@^13.24.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + globalthis@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" @@ -4865,6 +4896,13 @@ is-buffer@^2.0.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -4877,7 +4915,7 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== @@ -6036,6 +6074,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve.exports@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" From ac743809861eaddbdc56d35bfb2190e3c939c2c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 5 Feb 2024 22:33:28 +0000 Subject: [PATCH 308/371] chore(front): update dependency jsdom to v24 --- front/package.json | 2 +- front/yarn.lock | 224 +++++++++++++++++++-------------------------- 2 files changed, 97 insertions(+), 129 deletions(-) diff --git a/front/package.json b/front/package.json index 41795cac4..57434bd96 100644 --- a/front/package.json +++ b/front/package.json @@ -87,7 +87,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-vue": "9.8.0", - "jsdom": "20.0.3", + "jsdom": "24.0.0", "jsonc-eslint-parser": "2.1.0", "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", diff --git a/front/yarn.lock b/front/yarn.lock index 82e913329..2fd21f3d1 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1647,11 +1647,6 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@types/chai-subset@^1.3.3": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a" @@ -2729,30 +2724,17 @@ dependencies: vue-demi ">=0.14.5" -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.2, acorn-walk@^8.2.0: +acorn-walk@^8.2.0: version "8.3.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== -acorn@^8.1.0, acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -2762,12 +2744,12 @@ acorn@^8.11.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== dependencies: - debug "4" + debug "^4.3.4" aggregate-error@^3.0.0: version "3.1.0" @@ -3469,22 +3451,12 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== +cssstyle@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.0.1.tgz#ef29c598a1e90125c870525490ea4f354db0660a" + integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== dependencies: - cssom "~0.3.6" + rrweb-cssom "^0.6.0" csstype@^3.1.2: version "3.1.2" @@ -3546,14 +3518,13 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" - integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" dayjs@^1.10.4: version "1.11.10" @@ -3586,7 +3557,7 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -decimal.js@^10.4.2, decimal.js@^10.4.3: +decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -3676,13 +3647,6 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" @@ -4720,12 +4684,12 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== dependencies: - whatwg-encoding "^2.0.0" + whatwg-encoding "^3.1.1" html-escaper@^2.0.0: version "2.0.2" @@ -4742,14 +4706,13 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.4.0" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" + agent-base "^7.1.0" + debug "^4.3.4" http-signature@~1.3.6: version "1.3.6" @@ -4760,12 +4723,12 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +https-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== dependencies: - agent-base "6" + agent-base "^7.0.2" debug "4" human-signals@^1.1.1: @@ -5161,37 +5124,32 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" - integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== +jsdom@24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" + integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" + cssstyle "^4.0.1" + data-urls "^5.0.0" + decimal.js "^10.4.3" form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" + nwsapi "^2.2.7" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" + tough-cookie "^4.1.3" + w3c-xmlserializer "^5.0.0" webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + ws "^8.16.0" + xml-name-validator "^5.0.0" jsesc@^2.5.1: version "2.5.2" @@ -5635,7 +5593,7 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -nwsapi@^2.2.2: +nwsapi@^2.2.7: version "2.2.7" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== @@ -5778,7 +5736,7 @@ parse5-htmlparser2-tree-adapter@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^7.0.0, parse5@^7.1.1: +parse5@^7.0.0, parse5@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== @@ -5954,7 +5912,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== @@ -6152,6 +6110,11 @@ rollup@^3.21.0, rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.2: optionalDependencies: fsevents "~2.3.2" +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6676,7 +6639,7 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tough-cookie@^4.1.2, tough-cookie@^4.1.3: +tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -6693,12 +6656,12 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== +tr46@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" + integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== dependencies: - punycode "^2.1.1" + punycode "^2.3.1" transliteration@2.3.5, transliteration@^2.3.5: version "2.3.5" @@ -7259,12 +7222,12 @@ vuex@4.1.0: dependencies: "@vue/devtools-api" "^6.0.0-beta.11" -w3c-xmlserializer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== dependencies: - xml-name-validator "^4.0.0" + xml-name-validator "^5.0.0" webidl-conversions@^4.0.2: version "4.0.2" @@ -7286,24 +7249,24 @@ webpack-virtual-modules@^0.6.0, webpack-virtual-modules@^0.6.1: resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== dependencies: iconv-lite "0.6.3" -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== +whatwg-url@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" + integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== dependencies: - tr46 "^3.0.0" + tr46 "^5.0.0" webidl-conversions "^7.0.0" whatwg-url@^7.0.0: @@ -7553,16 +7516,21 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.11.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" From 4364d82b0bb84a013780121b79c25f4e482c6065 Mon Sep 17 00:00:00 2001 From: petitminion <pablodurandoz@riseup.net> Date: Tue, 6 Feb 2024 11:52:29 +0000 Subject: [PATCH 309/371] Add cli command to prune non mbid content from db (#2083) --- .../commands/prune_non_mbid_content.py | 61 +++++++++++++++++++ api/tests/music/test_commands.py | 43 +++++++++++++ changes/changelog.d/2083.enhancement | 1 + 3 files changed, 105 insertions(+) create mode 100644 api/funkwhale_api/music/management/commands/prune_non_mbid_content.py create mode 100644 changes/changelog.d/2083.enhancement diff --git a/api/funkwhale_api/music/management/commands/prune_non_mbid_content.py b/api/funkwhale_api/music/management/commands/prune_non_mbid_content.py new file mode 100644 index 000000000..b60ed129e --- /dev/null +++ b/api/funkwhale_api/music/management/commands/prune_non_mbid_content.py @@ -0,0 +1,61 @@ +from django.core.management.base import BaseCommand +from django.db import transaction + +from funkwhale_api.music import models + + +class Command(BaseCommand): + help = """Deletes any tracks not tagged with a MusicBrainz ID from the database. By default, any tracks that + have been favorited by a user or added to a playlist are preserved.""" + + def add_arguments(self, parser): + parser.add_argument( + "--no-dry-run", + action="store_true", + dest="no_dry_run", + default=True, + help="Disable dry run mode and apply pruning for real on the database", + ) + + parser.add_argument( + "--include-playlist-content", + action="store_true", + dest="include_playlist_content", + default=False, + help="Allow tracks included in playlists to be pruned", + ) + + parser.add_argument( + "--include-favorites-content", + action="store_true", + dest="include_favorited_content", + default=False, + help="Allow favorited tracks to be pruned", + ) + + parser.add_argument( + "--include-listened-content", + action="store_true", + dest="include_listened_content", + default=False, + help="Allow tracks with listening history to be pruned", + ) + + @transaction.atomic + def handle(self, *args, **options): + tracks = models.Track.objects.filter(mbid__isnull=True) + if not options["include_favorited_content"]: + tracks = tracks.filter(track_favorites__isnull=True) + if not options["include_playlist_content"]: + tracks = tracks.filter(playlist_tracks__isnull=True) + if not options["include_listened_content"]: + tracks = tracks.filter(listenings__isnull=True) + + pruned_total = tracks.count() + total = models.Track.objects.count() + + if options["no_dry_run"]: + self.stdout.write(f"Deleting {pruned_total}/{total} tracksā€¦") + tracks.delete() + else: + self.stdout.write(f"Would prune {pruned_total}/{total} tracks") diff --git a/api/tests/music/test_commands.py b/api/tests/music/test_commands.py index adee497b6..c46d5dad1 100644 --- a/api/tests/music/test_commands.py +++ b/api/tests/music/test_commands.py @@ -7,6 +7,7 @@ from funkwhale_api.music.management.commands import ( check_inplace_files, fix_uploads, prune_library, + prune_non_mbid_content, ) DATA_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -204,3 +205,45 @@ def test_check_inplace_files_no_dry_run(factories, tmpfile): for u in not_prunable: u.refresh_from_db() + + +def test_prune_non_mbid_content(factories): + prunable = factories["music.Track"](mbid=None) + + track = factories["music.Track"](mbid=None) + factories["playlists.PlaylistTrack"](track=track) + not_prunable = [factories["music.Track"](), track] + c = prune_non_mbid_content.Command() + options = { + "include_playlist_content": False, + "include_listened_content": False, + "include_favorited_content": True, + "no_dry_run": True, + } + c.handle(**options) + + with pytest.raises(prunable.DoesNotExist): + prunable.refresh_from_db() + + for t in not_prunable: + t.refresh_from_db() + + track = factories["music.Track"](mbid=None) + factories["playlists.PlaylistTrack"](track=track) + prunable = [factories["music.Track"](mbid=None), track] + + not_prunable = [factories["music.Track"]()] + options = { + "include_playlist_content": True, + "include_listened_content": False, + "include_favorited_content": False, + "no_dry_run": True, + } + c.handle(**options) + + for t in prunable: + with pytest.raises(t.DoesNotExist): + t.refresh_from_db() + + for t in not_prunable: + t.refresh_from_db() diff --git a/changes/changelog.d/2083.enhancement b/changes/changelog.d/2083.enhancement new file mode 100644 index 000000000..62a5c7482 --- /dev/null +++ b/changes/changelog.d/2083.enhancement @@ -0,0 +1 @@ +Add cli command to prune non mbid content from db (#2083) From 6c38bae189af51e35cc248f0cf1d8065a198281a Mon Sep 17 00:00:00 2001 From: petitminion <pablodurandoz@riseup.net> Date: Fri, 16 Feb 2024 09:57:31 +0000 Subject: [PATCH 310/371] add MbidTaggedContent to nodeinfo (#2284) NOCHANGELOG --- api/funkwhale_api/instance/views.py | 3 +++ docs/specs/nodeinfo21/schema.yml | 2 ++ 2 files changed, 5 insertions(+) diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index 3272a95d8..f87704452 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -171,6 +171,9 @@ class NodeInfo21(NodeInfo20): if pref.get("federation__enabled"): data["features"].append("federation") + if pref.get("music__only_allow_musicbrainz_tagged_files"): + data["features"].append("onlyMbidTaggedContent") + serializer = self.serializer_class(data) return Response( serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index e454b24c0..58035c2db 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -580,6 +580,8 @@ components: - "audiobooks" - "federation" - "anonymousCanListen" + - "onlyMbidTaggedContent" + Error: type: object properties: From 84bb893f3ad1694ffa4ff25a1af481edd60cfef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <sporiff@funkwhale.audio> Date: Sun, 18 Feb 2024 18:25:52 +0100 Subject: [PATCH 311/371] Remove deprecated flag for lychee The --exclude-mail flag is deprecated and no longer needed Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2759> --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f24f4e23d..9d1fa574b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -144,7 +144,6 @@ find_broken_links: --cache --no-progress --exclude-all-private - --exclude-mail --exclude 'demo\.funkwhale\.audio' --exclude 'nginx\.com' --exclude-path 'docs/_templates/' From ff6fc46c58c645c91ae9cb292c0c386c7f90e008 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 19 Feb 2024 14:33:16 +0000 Subject: [PATCH 312/371] chore(front): update dependency lru-cache to v10 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- front/package.json | 2 +- front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/front/package.json b/front/package.json index 57434bd96..cbe438630 100644 --- a/front/package.json +++ b/front/package.json @@ -35,7 +35,7 @@ "fomantic-ui-css": "2.9.3", "idb-keyval": "6.2.1", "lodash-es": "4.17.21", - "lru-cache": "7.14.1", + "lru-cache": "10.2.0", "moment": "2.29.4", "showdown": "2.1.0", "stacktrace-js": "2.0.2", diff --git a/front/yarn.lock b/front/yarn.lock index 2fd21f3d1..f55efc756 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -5383,10 +5383,10 @@ loupe@^2.3.6: dependencies: get-func-name "^2.0.1" -lru-cache@7.14.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== +lru-cache@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== lru-cache@^5.1.1: version "5.1.1" From 670b522675e60b1ebd5b87ed104cfaa3773e9e2c Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 14:31:55 +0000 Subject: [PATCH 313/371] refactor: adjust code for lru-cache v10 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- front/src/composables/audio/queue.ts | 5 ++++- front/src/composables/audio/tracks.ts | 15 ++++++++++----- front/src/composables/data/useLRUCache.ts | 11 ----------- 3 files changed, 14 insertions(+), 17 deletions(-) delete mode 100644 front/src/composables/data/useLRUCache.ts diff --git a/front/src/composables/audio/queue.ts b/front/src/composables/audio/queue.ts index b906612a4..9f4659f9c 100644 --- a/front/src/composables/audio/queue.ts +++ b/front/src/composables/audio/queue.ts @@ -101,7 +101,7 @@ export const currentTrack = computed(() => queue.value[currentIndex.value]) // Use Queue export const useQueue = createGlobalState(() => { - const { currentSound } = useTracks() + const { currentSound, clearCache } = useTracks() const createQueueTrack = async (track: Track, skipFetch = false): Promise<QueueTrack> => { const { default: store } = await import('~/store') @@ -341,6 +341,9 @@ export const useQueue = createGlobalState(() => { await delMany(lastTracks) currentIndex.value = 0 + + // Clear track cache + clearCache() } // Radio queue populating diff --git a/front/src/composables/audio/tracks.ts b/front/src/composables/audio/tracks.ts index 8ea991867..aeffe7020 100644 --- a/front/src/composables/audio/tracks.ts +++ b/front/src/composables/audio/tracks.ts @@ -4,13 +4,13 @@ import type { Sound } from '~/api/player' import { createGlobalState, syncRef, useTimeoutFn, whenever } from '@vueuse/core' import { computed, ref, watchEffect } from 'vue' +import { LRUCache } from 'lru-cache' import { connectAudioSource } from '~/composables/audio/audio-api' import { usePlayer } from '~/composables/audio/player' import { useQueue } from '~/composables/audio/queue' import { soundImplementation } from '~/api/player' -import useLRUCache from '~/composables/data/useLRUCache' import useLogger from '~/composables/useLogger' import store from '~/store' @@ -22,11 +22,13 @@ const AUDIO_ELEMENT = document.createElement('audio') const logger = useLogger() const soundPromises = new Map<number, Promise<Sound>>() -const soundCache = useLRUCache<number, Sound>({ +const soundCache = new LRUCache<number, Sound>({ max: 3, dispose: (sound) => sound.dispose() }) +const currentTrack = ref<QueueTrack>() + export const fetchTrackSources = async (id: number): Promise<QueueTrackSource[]> => { const { uploads } = await axios.get(`tracks/${id}/`) .then(response => response.data as Track, () => ({ uploads: [] as Upload[] })) @@ -130,7 +132,7 @@ export const useTracks = createGlobalState(() => { // // This means that the currently playing track (B) is never removed from the cache (and isn't disposed prematurely) during its playback. // However, we end up in a situation where previous track isn't cached anymore but two next tracks are. - // That implies that when user changes to the previous track ( onlybefore track B ends), a new sound instance would be created, + // That implies that when user changes to the previous track (only before track B ends), a new sound instance would be created, // which means that there might be some network requests before playback. if (currentTrack.value) { soundCache.get(currentTrack.value.id) @@ -195,8 +197,6 @@ export const useTracks = createGlobalState(() => { } } - const currentTrack = ref<QueueTrack>() - // NOTE: We want to have it called only once, hence we're using createGlobalState const initialize = createGlobalState(() => { const { currentIndex, currentTrack: track, queue, hasNext } = useQueue() @@ -226,10 +226,15 @@ export const useTracks = createGlobalState(() => { const currentSound = computed(() => soundCache.get(currentTrack.value?.id ?? -1)) + const clearCache = () => { + return soundCache.clear() + } + return { initialize, createSound, createTrack, + clearCache, currentSound } }) diff --git a/front/src/composables/data/useLRUCache.ts b/front/src/composables/data/useLRUCache.ts deleted file mode 100644 index 14c4de962..000000000 --- a/front/src/composables/data/useLRUCache.ts +++ /dev/null @@ -1,11 +0,0 @@ -import LRU from 'lru-cache' -import { reactive } from 'vue' - -export default <T, K>(options: LRU.Options<T, K>) => { - const cache = new LRU(options) - - // @ts-expect-error keyMap is used internally so it is not defined in the types - cache.keyMap = reactive(cache.keyMap) - - return cache -} From 243f2a57e33dd88b35ca0d132817edd3e388d87d Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 14:39:55 +0000 Subject: [PATCH 314/371] test: add track cache tests and mock test server Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- api/funkwhale_api/music/serializers.py | 29 +- front/package.json | 6 +- front/src/composables/useLogger.ts | 5 +- front/test/msw-server.ts | 11749 ++++++++++++++++ front/test/setup/mock-lru-cache.ts | 20 + front/test/setup/mock-server.ts | 17 + .../specs/composables/audio/tracks.test.ts | 130 + front/vite.config.ts | 22 +- front/yarn.lock | 1025 +- 9 files changed, 12969 insertions(+), 34 deletions(-) create mode 100644 front/test/msw-server.ts create mode 100644 front/test/setup/mock-lru-cache.ts create mode 100644 front/test/setup/mock-server.ts create mode 100644 front/test/specs/composables/audio/tracks.test.ts diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 46a118817..3e183b907 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -226,17 +226,19 @@ class TrackAlbumSerializer(serializers.ModelSerializer): ) -def serialize_upload(upload) -> object: - return { - "uuid": str(upload.uuid), - "listen_url": upload.listen_url, - "size": upload.size, - "duration": upload.duration, - "bitrate": upload.bitrate, - "mimetype": upload.mimetype, - "extension": upload.extension, - "is_local": federation_utils.is_local(upload.fid), - } +class UploadSerializer(serializers.Serializer): + uuid = serializers.UUIDField() + listen_url = serializers.URLField() + size = serializers.IntegerField() + duration = serializers.IntegerField() + bitrate = serializers.IntegerField() + mimetype = serializers.CharField() + extension = serializers.CharField() + is_local = serializers.SerializerMethodField() + + @extend_schema_field(serializers.BooleanField()) + def get_is_local(self, upload): + return federation_utils.is_local(upload.fid) def sort_uploads_for_listen(uploads): @@ -281,11 +283,12 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer): def get_listen_url(self, obj): return obj.listen_url - @extend_schema_field({"type": "array", "items": {"type": "object"}}) + # @extend_schema_field({"type": "array", "items": {"type": "object"}}) + @extend_schema_field(UploadSerializer(many=True)) def get_uploads(self, obj): uploads = getattr(obj, "playable_uploads", []) # we put local uploads first - uploads = [serialize_upload(u) for u in sort_uploads_for_listen(uploads)] + uploads = [UploadSerializer(u).data for u in sort_uploads_for_listen(uploads)] uploads = sorted(uploads, key=lambda u: u["is_local"], reverse=True) return list(uploads) diff --git a/front/package.json b/front/package.json index cbe438630..64080710a 100644 --- a/front/package.json +++ b/front/package.json @@ -11,6 +11,7 @@ "serve": "vite preview", "test": "vitest run", "test:unit": "vitest run --coverage", + "test:generate-mock-server": "msw-auto-mock ../docs/schema.yml -o test/msw-server.ts --node", "lint": "eslint --cache --cache-strategy content --ext .ts,.js,.vue,.json,.html src test cypress public/embed.html", "lint:tsc": "vue-tsc --noEmit --incremental && tsc --noEmit --incremental -p cypress", "fix-fomantic-css": "scripts/fix-fomantic-css.sh", @@ -57,6 +58,7 @@ "vuex-router-sync": "5.0.0" }, "devDependencies": { + "@faker-js/faker": "8.4.1", "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "2.0.0", "@types/diff": "5.0.9", @@ -89,6 +91,8 @@ "eslint-plugin-vue": "9.8.0", "jsdom": "24.0.0", "jsonc-eslint-parser": "2.1.0", + "msw": "2.2.1", + "msw-auto-mock": "0.18.0", "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", "sinon": "15.0.2", @@ -98,7 +102,7 @@ "utility-types": "3.10.0", "vite": "4.3.5", "vite-plugin-pwa": "0.14.4", - "vitest": "0.25.8", + "vitest": "1.3.0", "vue-tsc": "1.6.5", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4", diff --git a/front/src/composables/useLogger.ts b/front/src/composables/useLogger.ts index cdb14464e..116255049 100644 --- a/front/src/composables/useLogger.ts +++ b/front/src/composables/useLogger.ts @@ -46,7 +46,10 @@ const FILETYPE_COLOR: Record<string, string> = { // NOTE: We're pushing all logs to the end of the event loop const createLoggerFn = (level: LogLevel) => { - // NOTE: Don't log time and debug in production + // @ts-expect-error Use console in test environment + if (import.meta.env.VITEST) return console[level] + + // NOTE: Don't log time and debug in production environment if (level === 'time' || level === 'debug') { if (import.meta.env.PROD) return () => undefined } diff --git a/front/test/msw-server.ts b/front/test/msw-server.ts new file mode 100644 index 000000000..f2bc1b08d --- /dev/null +++ b/front/test/msw-server.ts @@ -0,0 +1,11749 @@ +/** + * This file is AUTO GENERATED by [msw-auto-mock](https://github.com/zoubingwu/msw-auto-mock) + * Feel free to commit/edit it as you need. + */ +/* eslint-disable */ +/* tslint:disable */ +import { HttpResponse, http } from "msw"; +import { faker } from "@faker-js/faker"; +import { setupServer } from "msw/node"; + +faker.seed(1); + +const baseURL = ""; +const MAX_ARRAY_LENGTH = 20; + +let i = 0; +const next = () => { + if (i === Number.MAX_SAFE_INTEGER - 1) { + i = 0; + } + return i++; +}; + +export const handlers = [ + http.get(`${baseURL}/api/v1/activity/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/`, () => { + const resultArray = [[getGetAlbums200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/albums/`, () => { + const resultArray = [[getCreateAlbum201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/`, () => { + const resultArray = [[getGetAlbum200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/albums/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/fetches/`, () => { + const resultArray = [[getGetAlbumFetches200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/albums/:id/fetches/`, () => { + const resultArray = [[getCreateAlbumFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/libraries/`, () => { + const resultArray = [[getGetAlbumLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/mutations/`, () => { + const resultArray = [[getGetAlbumMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/albums/:id/mutations/`, () => { + const resultArray = [ + [getCreateAlbumMutation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/`, () => { + const resultArray = [[getGetArtists200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/`, () => { + const resultArray = [[getGetArtist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/fetches/`, () => { + const resultArray = [[getGetArtistFetches200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/artists/:id/fetches/`, () => { + const resultArray = [[getCreateArtistFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/libraries/`, () => { + const resultArray = [[getGetArtistLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/mutations/`, () => { + const resultArray = [[getGetArtistMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/artists/:id/mutations/`, () => { + const resultArray = [ + [getCreateArtistMutation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/attachments/`, () => { + const resultArray = [[getCreateAttachment201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/attachments/:uuid/`, () => { + const resultArray = [[getGetAttachment200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/attachments/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/attachments/:uuid/proxy/`, () => { + const resultArray = [[getGetAttachmentProxy200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/password/change/`, () => { + const resultArray = [[getChangePassword200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/password/reset/`, () => { + const resultArray = [[getResetPassword200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/password/reset/confirm/`, () => { + const resultArray = [ + [getConfirmPasswordReset200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/registration/`, () => { + const resultArray = [[getRegister201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/registration/change-password/`, () => { + const resultArray = [[getChangePassword2200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/registration/verify-email/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/auth/user/`, () => { + const resultArray = [[getGetAuthUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/auth/user/`, () => { + const resultArray = [[getUpdateAuthUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/auth/user/`, () => { + const resultArray = [ + [getPartialUpdateAuthUser200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/`, () => { + const resultArray = [[getGetChannels200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/`, () => { + const resultArray = [[getCreateChannel201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [[getGetChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [[getUpdateChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [ + [getPartialUpdateChannel200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/:composite/rss/`, () => { + const resultArray = [[getGetChannelRss200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/:composite/subscribe/`, () => { + const resultArray = [[getSubscribeChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/:composite/unsubscribe/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/channels/:composite/unsubscribe/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/metadata-choices/`, () => { + const resultArray = [ + [getGetChannelMetadataChoices200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/rss-subscribe/`, () => { + const resultArray = [ + [getSubscribeChannelRss200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/favorites/tracks/`, () => { + const resultArray = [[getGetFavoriteTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/favorites/tracks/`, () => { + const resultArray = [[getFavoriteTrack201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/favorites/tracks/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/favorites/tracks/all/`, () => { + const resultArray = [ + [getGetAllFavoriteTracks200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/favorites/tracks/remove/`, () => { + const resultArray = [[getUnfavoriteTrack2200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/favorites/tracks/remove/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/actors/:fullUsername/`, () => { + const resultArray = [[getGetFederationActor200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get( + `${baseURL}/api/v1/federation/actors/:fullUsername/libraries/`, + () => { + const resultArray = [ + [getGetFederationActorLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/federation/domains/`, () => { + const resultArray = [ + [getGetFederationDomains200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/domains/:name/`, () => { + const resultArray = [ + [getGetFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/fetches/`, () => { + const resultArray = [ + [getCreateFederationFetch201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/fetches/:id/`, () => { + const resultArray = [[getGetFederationFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/follows/library/`, () => { + const resultArray = [ + [getGetFederationLibraryFollows200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/follows/library/`, () => { + const resultArray = [ + [getCreateFederationLibraryFollow201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/follows/library/:uuid/`, () => { + const resultArray = [ + [getGetFederationLibraryFollow200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/federation/follows/library/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post( + `${baseURL}/api/v1/federation/follows/library/:uuid/accept/`, + () => { + const resultArray = [ + [null, { status: 204 }], + [null, { status: 404 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.post( + `${baseURL}/api/v1/federation/follows/library/:uuid/reject/`, + () => { + const resultArray = [ + [getRejectFederationLibraryFollow200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/federation/follows/library/all/`, () => { + const resultArray = [ + [getGetAllFederationLibraryFollows200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/inbox/`, () => { + const resultArray = [ + [getGetFederationInboxes200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/inbox/:id/`, () => { + const resultArray = [[getGetFederationInbox200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/federation/inbox/:id/`, () => { + const resultArray = [ + [getUpdateFederationInbox200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/federation/inbox/:id/`, () => { + const resultArray = [ + [getPartialUpdateFederationInbox200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/inbox/action/`, () => { + const resultArray = [ + [getCreateFederationInboxAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/libraries/:uuid/`, () => { + const resultArray = [ + [getGetFederationLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/libraries/:uuid/scan/`, () => { + const resultArray = [ + [getCreateFederationLibraryScan200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/libraries/fetch/`, () => { + const resultArray = [ + [getCreateFederationLibraryFetch200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/history/listenings/`, () => { + const resultArray = [ + [getGetHistoryListenings200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/history/listenings/`, () => { + const resultArray = [ + [getCreateHistoryListening201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/history/listenings/:id/`, () => { + const resultArray = [ + [getGetHistoryListening200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/admin/settings/`, () => { + const resultArray = [ + [getGetInstanceAdminSettings200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/admin/settings/:id/`, () => { + const resultArray = [ + [getGetInstanceAdminSetting200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/instance/admin/settings/:id/`, () => { + const resultArray = [ + [getUpdateInstanceAdminSetting200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/instance/admin/settings/:id/`, () => { + const resultArray = [ + [getPartialUpdateInstanceAdminSetting200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/instance/admin/settings/bulk/`, () => { + const resultArray = [ + [getCreateInstanceAdminSettingBulk200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/nodeinfo/2.0/`, () => { + const resultArray = [[getGetNodeInfo20200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/settings/`, () => { + const resultArray = [ + [getGetInstanceSettings200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/spa-manifest.json`, () => { + const resultArray = [[getGetSpaManifest200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/`, () => { + const resultArray = [[getGetLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/libraries/`, () => { + const resultArray = [[getCreateLibrary201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [[getGetLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [[getUpdateLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [ + [getPartialUpdateLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/:uuid/follows/`, () => { + const resultArray = [[getGetLibraryFollows200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/fs-import/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/libraries/fs-import/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/libraries/fs-import/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/licenses/`, () => { + const resultArray = [[getGetLicenses200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/licenses/:code/`, () => { + const resultArray = [[getGetLicense200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/listen/:uuid/`, () => { + const resultArray = [[getGetListen200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/accounts/`, () => { + const resultArray = [[getAdminGetAccounts200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/accounts/:id/`, () => { + const resultArray = [[getAdminGetAccount200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/accounts/:id/stats/`, () => { + const resultArray = [ + [getAdminGetAccountStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/accounts/action/`, () => { + const resultArray = [ + [getAdminCreateAccountAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/channels/`, () => { + const resultArray = [[getAdminGetChannels200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/channels/:composite/`, () => { + const resultArray = [[getAdminGetChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/channels/:composite/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/channels/:composite/stats/`, () => { + const resultArray = [ + [getAdminGetChannelStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/federation/domains/`, () => { + const resultArray = [ + [getAdminGetFederationDomains200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/federation/domains/`, () => { + const resultArray = [ + [getAdminCreateFederationDomain201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/federation/domains/:name/`, () => { + const resultArray = [ + [getAdminGetFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/federation/domains/:name/`, () => { + const resultArray = [ + [getAdminUpdateFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/federation/domains/:name/`, () => { + const resultArray = [ + [getAdminPartialUpdateFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get( + `${baseURL}/api/v1/manage/federation/domains/:name/nodeinfo/`, + () => { + const resultArray = [ + [getAdminGetFederationDomainNodeinfo200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/manage/federation/domains/:name/stats/`, () => { + const resultArray = [ + [getAdminGetFederationDomainStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/federation/domains/action/`, () => { + const resultArray = [ + [getAdminCreateFederationDomainAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/albums/`, () => { + const resultArray = [[getAdminGetAlbums200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/albums/:id/`, () => { + const resultArray = [[getAdminGetAlbum200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/albums/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/albums/:id/stats/`, () => { + const resultArray = [ + [getAdminGetLibraryAlbumStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/albums/action/`, () => { + const resultArray = [ + [getAdminCreateAlbumAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/artists/`, () => { + const resultArray = [[getAdminGetArtists200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/artists/:id/`, () => { + const resultArray = [[getAdminGetArtist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/artists/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/artists/:id/stats/`, () => { + const resultArray = [ + [getAdminGetLibraryArtistStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/artists/action/`, () => { + const resultArray = [ + [getAdminCreateArtistAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/libraries/`, () => { + const resultArray = [[getAdminGetLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [[getAdminGetLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [[getAdminUpdateLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [ + [getAdminPartialUpdateLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/libraries/:uuid/stats/`, () => { + const resultArray = [ + [getAdminGetLibraryStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/libraries/action/`, () => { + const resultArray = [ + [getAdminCreateLibraryAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/tracks/`, () => { + const resultArray = [[getAdminGetTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/tracks/:id/`, () => { + const resultArray = [[getAdminGetTrack200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/tracks/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/tracks/:id/stats/`, () => { + const resultArray = [[getAdminGetTrackStats200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/tracks/action/`, () => { + const resultArray = [ + [getAdminCreateTrackAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/uploads/`, () => { + const resultArray = [[getAdminGetUploads200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/uploads/:uuid/`, () => { + const resultArray = [[getAdminGetUpload200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/uploads/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/uploads/action/`, () => { + const resultArray = [ + [getAdminCreateUploadAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/instance-policies/`, () => { + const resultArray = [ + [getModerationGetInstancePolicies200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/moderation/instance-policies/`, () => { + const resultArray = [ + [getModerationCreateInstancePolicy201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, () => { + const resultArray = [ + [getModerationGetInstancePolicy200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, () => { + const resultArray = [ + [getModerationUpdateInstancePolicy200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch( + `${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, + () => { + const resultArray = [ + [ + getModerationPartialUpdateInstancePolicy200Response(), + { status: 200 }, + ], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.delete( + `${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, + () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/manage/moderation/notes/`, () => { + const resultArray = [[getModerationGetNotes200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/moderation/notes/`, () => { + const resultArray = [ + [getModerationCreateNote201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/notes/:uuid/`, () => { + const resultArray = [[getModerationGetNote200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/moderation/notes/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/reports/`, () => { + const resultArray = [ + [getModerationGetReports200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/reports/:uuid/`, () => { + const resultArray = [ + [getModerationGetReport200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/moderation/reports/:uuid/`, () => { + const resultArray = [ + [getModerationUpdateReport200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/moderation/reports/:uuid/`, () => { + const resultArray = [ + [getModerationPartialUpdateReport200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/requests/`, () => { + const resultArray = [ + [getModerationGetRequests200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/requests/:uuid/`, () => { + const resultArray = [ + [getModerationGetRequest200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/moderation/requests/:uuid/`, () => { + const resultArray = [ + [getModerationUpdateRequest200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/moderation/requests/:uuid/`, () => { + const resultArray = [ + [getModerationPartialUpdateRequest200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/tags/`, () => { + const resultArray = [[getAdminGetTags200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/tags/`, () => { + const resultArray = [[getAdminCreateTag201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/tags/:name/`, () => { + const resultArray = [[getAdminGetTag200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/tags/:name/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/tags/action/`, () => { + const resultArray = [ + [getAdminCreateTagAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/invitations/`, () => { + const resultArray = [ + [getAdminGetInvitations200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/users/invitations/`, () => { + const resultArray = [ + [getAdminCreateInvitation201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/invitations/:id/`, () => { + const resultArray = [[getAdminGetInvitation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/users/invitations/:id/`, () => { + const resultArray = [ + [getAdminUpdateInvitation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/users/invitations/:id/`, () => { + const resultArray = [ + [getAdminPartialUpdateInvitation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/users/invitations/action/`, () => { + const resultArray = [ + [getAdminCreateInvitationAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/users/`, () => { + const resultArray = [[getAdminGetUsers200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/users/:id/`, () => { + const resultArray = [[getAdminGetUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/users/users/:id/`, () => { + const resultArray = [[getAdminUpdateUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/users/users/:id/`, () => { + const resultArray = [ + [getAdminPartialUpdateUser200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/moderation/content-filters/`, () => { + const resultArray = [ + [getGetModerationContentFilters200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/moderation/content-filters/`, () => { + const resultArray = [ + [getCreateModerationContentFilter201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/moderation/content-filters/:uuid/`, () => { + const resultArray = [ + [getGetModerationContentFilter200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/moderation/content-filters/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/moderation/reports/`, () => { + const resultArray = [ + [getCreateModerationReport201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/mutations/`, () => { + const resultArray = [[getGetMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/mutations/:uuid/`, () => { + const resultArray = [[getGetMutation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/mutations/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/mutations/:uuid/approve/`, () => { + const resultArray = [[getApproveMutation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/mutations/:uuid/reject/`, () => { + const resultArray = [[getRejectMutation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/apps/`, () => { + const resultArray = [[getGetOauthApps200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/oauth/apps/`, () => { + const resultArray = [[getCreateOauthApp201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [[getGetOauthApp200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [[getUpdateOauthApp200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [ + [getPartialUpdateOauthApp200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/oauth/apps/:clientId/refresh-token/`, () => { + const resultArray = [[getRefreshOauthToken200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/grants/`, () => { + const resultArray = [[getGetOauthGrants200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/grants/:clientId/`, () => { + const resultArray = [[getGetOauthGrant200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/oauth/grants/:clientId/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oembed/`, () => { + const resultArray = [[getGetOembed200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/playlists/`, () => { + const resultArray = [[getGetPlaylists200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/`, () => { + const resultArray = [[getCreatePlaylist201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [[getGetPlaylist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [[getUpdatePlaylist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [ + [getPartialUpdatePlaylist200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/:id/add/`, () => { + const resultArray = [[getAddToPlaylist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/playlists/:id/clear/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/:id/move/`, () => { + const resultArray = [ + [getReorderTrackInPlaylist200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/:id/remove/`, () => { + const resultArray = [ + [getRemoveFromPlaylist2200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/playlists/:id/remove/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/playlists/:id/tracks/`, () => { + const resultArray = [[getGetPlaylistTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/plugins/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/`, () => { + const resultArray = [[null, { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/plugins/:id/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/:id/disable/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/:id/enable/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/:id/scan/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/`, () => { + const resultArray = [[getGetRadios200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/radios/`, () => { + const resultArray = [[getCreateRadio201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[getGetRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[getUpdateRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[getPartialUpdateRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/:id/tracks/`, () => { + const resultArray = [[getGetRadioTrack200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/filters/`, () => { + const resultArray = [[getGetRadioFilter200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/radios/validate/`, () => { + const resultArray = [[getValidateRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/sessions/`, () => { + const resultArray = [[getCreateRadioSession201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/sessions/:id/`, () => { + const resultArray = [[getGetRadioSession200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/tracks/`, () => { + const resultArray = [[getGetNextRadioTrack201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/rate-limit/`, () => { + const resultArray = [[getGetRateLimit200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/search`, () => { + const resultArray = [[getGetSearchResults200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/stream/:uuid/`, () => { + const resultArray = [[getGetTrackStream200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/subscriptions/`, () => { + const resultArray = [[getGetSubscriptions200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/subscriptions/:uuid/`, () => { + const resultArray = [[getGetSubscription200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/subscriptions/all/`, () => { + const resultArray = [ + [getGetAllSubscriptions200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tags/`, () => { + const resultArray = [[getGetTags200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tags/:name/`, () => { + const resultArray = [[getGetTag200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/text-preview/`, () => { + const resultArray = [ + [getPreviewText200Response(), { status: 200 }], + [getPreviewText400Response(), { status: 400 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/`, () => { + const resultArray = [[getGetTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/`, () => { + const resultArray = [[getGetTrack200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/tracks/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/fetches/`, () => { + const resultArray = [[getGetTrackFetches200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/tracks/:id/fetches/`, () => { + const resultArray = [[getCreateTrackFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/libraries/`, () => { + const resultArray = [[getGetTrackLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/mutations/`, () => { + const resultArray = [[getGetTrackMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/tracks/:id/mutations/`, () => { + const resultArray = [ + [getCreateTrackMutation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/uploads/`, () => { + const resultArray = [[getGetUploads200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/uploads/`, () => { + const resultArray = [[getCreateUpload201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [[getGetUpload200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [[getUpdateUpload200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [ + [getPartialUpdateUpload200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/uploads/:uuid/audio-file-metadata/`, () => { + const resultArray = [[getGetUploadMetadata200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/uploads/action/`, () => { + const resultArray = [[getCreateUploadAction200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/users/:username/`, () => { + const resultArray = [[getUpdateUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/users/:username/`, () => { + const resultArray = [[getPartialUpdateUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/users/:username/subsonic-token/`, () => { + const resultArray = [ + [getGetUserSubsonicToken200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/users/:username/subsonic-token/`, () => { + const resultArray = [ + [getCreateUserSubsonicToken200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/users/:username/subsonic-token/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/users/change-email/`, () => { + const resultArray = [ + [null, { status: 200 }], + [null, { status: 403 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/users/me/`, () => { + const resultArray = [ + [getGetAuthenticatedUser200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/users/me/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/users/settings/`, () => { + const resultArray = [[getUpdateSettings200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), +]; + +export function getGetAlbums200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + release_date: faker.date.past(), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + duration: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getCreateAlbum201Response() { + return { + title: faker.lorem.slug(1), + release_date: faker.date.past(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + artist: faker.lorem.slug(1), + }; +} + +export function getGetAlbum200Response() { + return { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + release_date: faker.date.past(), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + duration: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetAlbumFetches200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + })), + }; +} + +export function getCreateAlbumFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetAlbumLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + })), + }; +} + +export function getGetAlbumMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getCreateAlbumMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetArtists200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + albums: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + tracks_count: faker.number.int({ min: undefined, max: undefined }), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: faker.number.int({ min: undefined, max: undefined }), + release_date: faker.date.past(), + creation_date: faker.date.past(), + })), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + channel: { + uuid: faker.lorem.slug(1), + actor: { + full_username: faker.person.fullName(), + preferred_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + }, + }, + tracks_count: faker.number.int({ min: undefined, max: undefined }), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + content_category: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + })), + }; +} + +export function getGetArtist200Response() { + return { + albums: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + tracks_count: faker.number.int({ min: undefined, max: undefined }), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: faker.number.int({ min: undefined, max: undefined }), + release_date: faker.date.past(), + creation_date: faker.date.past(), + })), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + channel: { + uuid: faker.lorem.slug(1), + actor: { + full_username: faker.person.fullName(), + preferred_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + }, + }, + tracks_count: faker.number.int({ min: undefined, max: undefined }), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + content_category: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getGetArtistFetches200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + })), + }; +} + +export function getCreateArtistFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetArtistLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + })), + }; +} + +export function getGetArtistMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getCreateArtistMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getCreateAttachment201Response() { + return { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetAttachment200Response() { + return { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetAttachmentProxy200Response() { + return { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getChangePassword200Response() { + return { + new_password1: faker.lorem.slug(1), + new_password2: faker.lorem.slug(1), + }; +} + +export function getResetPassword200Response() { + return { + email: faker.internet.email(), + }; +} + +export function getConfirmPasswordReset200Response() { + return { + new_password1: faker.lorem.slug(1), + new_password2: faker.lorem.slug(1), + uid: faker.lorem.slug(1), + token: faker.lorem.slug(1), + }; +} + +export function getRegister201Response() { + return { + username: faker.person.fullName(), + email: faker.internet.email(), + invitation: faker.lorem.slug(1), + }; +} + +export function getChangePassword2200Response() { + return { + new_password1: faker.lorem.slug(1), + new_password2: faker.lorem.slug(1), + }; +} + +export function getGetAuthUser200Response() { + return { + pk: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + first_name: faker.person.fullName(), + last_name: faker.person.fullName(), + }; +} + +export function getUpdateAuthUser200Response() { + return { + pk: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + first_name: faker.person.fullName(), + last_name: faker.person.fullName(), + }; +} + +export function getPartialUpdateAuthUser200Response() { + return { + pk: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + first_name: faker.person.fullName(), + last_name: faker.person.fullName(), + }; +} + +export function getGetChannels200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getCreateChannel201Response() { + return { + name: faker.person.fullName(), + username: faker.person.fullName(), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetChannel200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getUpdateChannel200Response() { + return { + name: faker.person.fullName(), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getPartialUpdateChannel200Response() { + return { + name: faker.person.fullName(), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetChannelRss200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getSubscribeChannel200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetChannelMetadataChoices200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getSubscribeChannelRss200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetFavoriteTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getFavoriteTrack201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + }; +} + +export function getGetAllFavoriteTracks200Response() { + return { + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + })), + count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getUnfavoriteTrack2200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + }; +} + +export function getGetFederationActor200Response() { + return { + fid: faker.internet.url(), + url: faker.internet.url(), + domain: faker.lorem.slug(1), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + name: faker.person.fullName(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + type: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + is_channel: faker.datatype.boolean(), + manually_approves_followers: faker.datatype.boolean(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + icon: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getGetFederationActorLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetFederationDomains200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + })), + }; +} + +export function getGetFederationDomain200Response() { + return { + name: faker.person.fullName(), + }; +} + +export function getCreateFederationFetch201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetFederationFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetFederationLibraryFollows200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + })), + }; +} + +export function getCreateFederationLibraryFollow201Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getGetFederationLibraryFollow200Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getRejectFederationLibraryFollow200Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getGetAllFederationLibraryFollows200Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getGetFederationInboxes200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + })), + }; +} + +export function getGetFederationInbox200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getUpdateFederationInbox200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getPartialUpdateFederationInbox200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getCreateFederationInboxAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getGetFederationLibrary200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + }; +} + +export function getCreateFederationLibraryScan200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + }; +} + +export function getCreateFederationLibraryFetch200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + }; +} + +export function getGetHistoryListenings200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getCreateHistoryListening201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + user: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + }; +} + +export function getGetHistoryListening200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetInstanceAdminSettings200Response() { + return [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + })); +} + +export function getGetInstanceAdminSetting200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getUpdateInstanceAdminSetting200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getPartialUpdateInstanceAdminSetting200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getCreateInstanceAdminSettingBulk200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getGetNodeInfo20200Response() { + return { + version: faker.lorem.slug(1), + software: { + name: faker.person.fullName(), + version: faker.lorem.slug(1), + }, + protocols: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => null), + services: { + inbound: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + outbound: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + openRegistrations: faker.datatype.boolean(), + usage: { + users: { + total: faker.number.int({ min: undefined, max: undefined }), + activeHalfyear: faker.number.int({ min: undefined, max: undefined }), + activeMonth: faker.number.int({ min: undefined, max: undefined }), + }, + localPosts: faker.number.int({ min: undefined, max: undefined }), + localComments: faker.number.int({ min: undefined, max: undefined }), + }, + metadata: { + actorId: faker.lorem.slug(1), + private: faker.datatype.boolean(), + shortDescription: faker.lorem.slug(1), + longDescription: faker.lorem.slug(1), + contactEmail: faker.internet.email(), + nodeName: faker.person.fullName(), + banner: faker.lorem.slug(1), + defaultUploadQuota: faker.number.int({ min: undefined, max: undefined }), + supportedUploadExtensions: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + allowList: { + enabled: faker.datatype.boolean(), + domains: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + funkwhaleSupportMessageEnabled: faker.datatype.boolean(), + instanceSupportMessage: faker.lorem.slug(1), + usage: { + favorites: { + tracks: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + }, + listenings: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + downloads: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + }, + library: { + federationEnabled: faker.datatype.boolean(), + anonymousCanListen: faker.datatype.boolean(), + tracks: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + artists: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + albums: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + music: { + hours: faker.number.int({ min: undefined, max: undefined }), + }, + }, + reportTypes: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + type: faker.lorem.slug(1), + label: faker.lorem.slug(1), + anonymous: faker.datatype.boolean(), + })), + endpoints: { + knownNodes: faker.internet.url(), + channels: faker.internet.url(), + libraries: faker.internet.url(), + }, + rules: faker.lorem.slug(1), + terms: faker.lorem.slug(1), + }, + }; +} + +export function getGetInstanceSettings200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getGetSpaManifest200Response() { + return null; +} + +export function getGetLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getCreateLibrary201Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getUpdateLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getPartialUpdateLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetLibraryFollows200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + })), + }; +} + +export function getGetLicenses200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.lorem.slug(1), + url: faker.internet.url(), + code: faker.lorem.slug(1), + name: faker.person.fullName(), + redistribute: faker.datatype.boolean(), + derivative: faker.datatype.boolean(), + commercial: faker.datatype.boolean(), + attribution: faker.datatype.boolean(), + copyleft: faker.datatype.boolean(), + })), + }; +} + +export function getGetLicense200Response() { + return { + id: faker.lorem.slug(1), + url: faker.internet.url(), + code: faker.lorem.slug(1), + name: faker.person.fullName(), + redistribute: faker.datatype.boolean(), + derivative: faker.datatype.boolean(), + commercial: faker.datatype.boolean(), + attribution: faker.datatype.boolean(), + copyleft: faker.datatype.boolean(), + }; +} + +export function getGetListen200Response() { + return null; +} + +export function getAdminGetAccounts200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getAdminGetAccount200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetAccountStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminCreateAccountAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetChannels200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + rss_url: faker.internet.url(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getAdminGetChannel200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + rss_url: faker.internet.url(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getAdminGetChannelStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + rss_url: faker.internet.url(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getAdminGetFederationDomains200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + })), + }; +} + +export function getAdminCreateFederationDomain201Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetFederationDomain200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminUpdateFederationDomain200Response() { + return { + name: faker.person.fullName(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminPartialUpdateFederationDomain200Response() { + return { + name: faker.person.fullName(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetFederationDomainNodeinfo200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetFederationDomainStats200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminCreateFederationDomainAction200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetAlbums200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + })), + }; +} + +export function getAdminGetAlbum200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + }; +} + +export function getAdminGetLibraryAlbumStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + }; +} + +export function getAdminCreateAlbumAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + }; +} + +export function getAdminGetArtists200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + })), + }; +} + +export function getAdminGetArtist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + }; +} + +export function getAdminGetLibraryArtistStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + }; +} + +export function getAdminCreateArtistAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + }; +} + +export function getAdminGetLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getAdminGetLibrary200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminUpdateLibrary200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminPartialUpdateLibrary200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminGetLibraryStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminCreateLibraryAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminGetTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + })), + }; +} + +export function getAdminGetTrack200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getAdminGetTrackStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getAdminCreateTrackAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getAdminGetUploads200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + audio_file: faker.internet.url(), + listen_url: faker.internet.url(), + source: faker.lorem.slug(1), + filename: faker.person.fullName(), + mimetype: faker.lorem.slug(1), + duration: faker.number.int({ min: -2147483648, max: 2147483647 }), + bitrate: faker.number.int({ min: -2147483648, max: 2147483647 }), + size: faker.number.int({ min: -2147483648, max: 2147483647 }), + creation_date: faker.date.past(), + accessed_date: faker.date.past(), + modification_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_date: faker.date.past(), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + track: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + }, + library: { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "instance", + "everyone", + ]), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }, + })), + }; +} + +export function getAdminGetUpload200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + audio_file: faker.internet.url(), + listen_url: faker.internet.url(), + source: faker.lorem.slug(1), + filename: faker.person.fullName(), + mimetype: faker.lorem.slug(1), + duration: faker.number.int({ min: -2147483648, max: 2147483647 }), + bitrate: faker.number.int({ min: -2147483648, max: 2147483647 }), + size: faker.number.int({ min: -2147483648, max: 2147483647 }), + creation_date: faker.date.past(), + accessed_date: faker.date.past(), + modification_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_date: faker.date.past(), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + track: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + }, + library: { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }, + }; +} + +export function getAdminCreateUploadAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + audio_file: faker.internet.url(), + listen_url: faker.internet.url(), + source: faker.lorem.slug(1), + filename: faker.person.fullName(), + mimetype: faker.lorem.slug(1), + duration: faker.number.int({ min: -2147483648, max: 2147483647 }), + bitrate: faker.number.int({ min: -2147483648, max: 2147483647 }), + size: faker.number.int({ min: -2147483648, max: 2147483647 }), + creation_date: faker.date.past(), + accessed_date: faker.date.past(), + modification_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_date: faker.date.past(), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + track: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + }, + library: { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }, + }; +} + +export function getModerationGetInstancePolicies200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + })), + }; +} + +export function getModerationCreateInstancePolicy201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationGetInstancePolicy200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationUpdateInstancePolicy200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationPartialUpdateInstancePolicy200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationGetNotes200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getModerationCreateNote201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getModerationGetNote200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getModerationGetReports200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + })), + }; +} + +export function getModerationGetReport200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getModerationUpdateReport200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getModerationPartialUpdateReport200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getModerationGetRequests200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getModerationGetRequest200Response() { + return { + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getModerationUpdateRequest200Response() { + return { + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getModerationPartialUpdateRequest200Response() { + return { + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetTags200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getAdminCreateTag201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetTag200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminCreateTagAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetInvitations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + })), + }; +} + +export function getAdminCreateInvitation201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminGetInvitation200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminUpdateInvitation200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminPartialUpdateInvitation200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminCreateInvitationAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminGetUsers200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + })), + }; +} + +export function getAdminGetUser200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }; +} + +export function getAdminUpdateUser200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }; +} + +export function getAdminPartialUpdateUser200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }; +} + +export function getGetModerationContentFilters200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["artist"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + })), + }; +} + +export function getCreateModerationContentFilter201Response() { + return { + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["artist"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + }; +} + +export function getGetModerationContentFilter200Response() { + return { + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["artist"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + }; +} + +export function getCreateModerationReport201Response() { + return { + uuid: faker.datatype.uuid(), + summary: faker.lorem.slug(1), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + is_handled: faker.datatype.boolean(), + submitter_email: faker.internet.email(), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + }; +} + +export function getGetMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getGetMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getApproveMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getRejectMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetOauthApps200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + })), + }; +} + +export function getCreateOauthApp201Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + client_secret: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + redirect_uris: faker.lorem.slug(1), + }; +} + +export function getGetOauthApp200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getUpdateOauthApp200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getPartialUpdateOauthApp200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getRefreshOauthToken200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + client_secret: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + redirect_uris: faker.lorem.slug(1), + }; +} + +export function getGetOauthGrants200Response() { + return [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + })); +} + +export function getGetOauthGrant200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getGetOembed200Response() { + return { + format: faker.helpers.arrayElement(["json"]), + url: faker.internet.url(), + maxheight: faker.number.int({ min: undefined, max: undefined }), + maxwidth: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetPlaylists200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getCreatePlaylist201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetPlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getUpdatePlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getPartialUpdatePlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAddToPlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getReorderTrackInPlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getRemoveFromPlaylist2200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetPlaylistTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + track: faker.lorem.slug(1), + index: faker.number.int({ min: 0, max: 2147483647 }), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetRadios200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + })), + }; +} + +export function getCreateRadio201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getGetRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getUpdateRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getPartialUpdateRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getGetRadioTrack200Response() { + return { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }; +} + +export function getGetRadioFilter200Response() { + return { + type: faker.lorem.slug(1), + label: faker.lorem.slug(1), + help_text: faker.lorem.slug(1), + fields: faker.lorem.slug(1), + }; +} + +export function getValidateRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getCreateRadioSession201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + radio_type: faker.lorem.slug(1), + related_object_id: faker.lorem.slug(1), + user: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + custom_radio: faker.number.int({ min: undefined, max: undefined }), + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetRadioSession200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + radio_type: faker.lorem.slug(1), + related_object_id: faker.lorem.slug(1), + user: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + custom_radio: faker.number.int({ min: undefined, max: undefined }), + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetNextRadioTrack201Response() { + return { + session: faker.number.int({ min: undefined, max: undefined }), + count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetRateLimit200Response() { + return { + enabled: faker.datatype.boolean(), + ident: { + type: faker.lorem.slug(1), + id: faker.lorem.slug(1), + }, + scopes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.lorem.slug(1), + rate: faker.lorem.slug(1), + description: faker.lorem.slug(1), + limit: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + remaining: faker.number.int({ min: undefined, max: undefined }), + available: faker.number.int({ min: undefined, max: undefined }), + available_seconds: faker.number.int({ min: undefined, max: undefined }), + reset: faker.number.int({ min: undefined, max: undefined }), + reset_seconds: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getGetSearchResults200Response() { + return { + artists: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + albums: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + tracks_count: faker.number.int({ min: undefined, max: undefined }), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: faker.number.int({ min: undefined, max: undefined }), + release_date: faker.date.past(), + creation_date: faker.date.past(), + })), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + channel: { + uuid: faker.lorem.slug(1), + actor: { + full_username: faker.person.fullName(), + preferred_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + }, + }, + tracks_count: faker.number.int({ min: undefined, max: undefined }), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + content_category: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + })), + tracks: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + })), + albums: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + release_date: faker.date.past(), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + duration: faker.number.int({ min: undefined, max: undefined }), + })), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetTrackStream200Response() { + return null; +} + +export function getGetSubscriptions200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + approved: faker.datatype.boolean(), + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetSubscription200Response() { + return { + approved: faker.datatype.boolean(), + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + }; +} + +export function getGetAllSubscriptions200Response() { + return { + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + channel: faker.datatype.uuid(), + })), + count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetTags200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetTag200Response() { + return { + name: faker.person.fullName(), + creation_date: faker.date.past(), + }; +} + +export function getPreviewText200Response() { + return { + rendered: faker.lorem.slug(1), + }; +} + +export function getPreviewText400Response() { + return { + detail: faker.lorem.slug(1), + }; +} + +export function getGetTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + })), + }; +} + +export function getGetTrack200Response() { + return { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }; +} + +export function getGetTrackFetches200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + })), + }; +} + +export function getCreateTrackFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetTrackLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + })), + }; +} + +export function getGetTrackMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getCreateTrackMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetUploads200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + })), + }; +} + +export function getCreateUpload201Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getGetUpload200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getUpdateUpload200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getPartialUpdateUpload200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getGetUploadMetadata200Response() { + return { + title: faker.lorem.slug(1), + position: faker.lorem.slug(1), + disc_number: faker.lorem.slug(1), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + mbid: faker.datatype.uuid(), + tags: faker.lorem.slug(1), + description: faker.lorem.slug(1), + album: faker.lorem.slug(1), + artists: faker.lorem.slug(1), + cover_data: faker.lorem.slug(1), + }; +} + +export function getCreateUploadAction200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getUpdateUser200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getPartialUpdateUser200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getGetUserSubsonicToken200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getCreateUserSubsonicToken200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getGetAuthenticatedUser200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getUpdateSettings200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +// This configures a Service Worker with the given request handlers. +export const startWorker = () => { + const server = setupServer(...handlers); + server.listen(); +}; diff --git a/front/test/setup/mock-lru-cache.ts b/front/test/setup/mock-lru-cache.ts new file mode 100644 index 000000000..b267bcd1d --- /dev/null +++ b/front/test/setup/mock-lru-cache.ts @@ -0,0 +1,20 @@ +import { vi } from 'vitest' + +vi.doMock('lru-cache', async (importOriginal) => { + const mod = await importOriginal<typeof import('lru-cache')>() + + class LRUCacheMock<K extends NonNullable<unknown>, V extends NonNullable<unknown>, FC> { + static caches: typeof mod.LRUCache[] = [] + + constructor (...args: ConstructorParameters<typeof mod.LRUCache<K, V, FC>>) { + const cache = new mod.LRUCache<K, V, FC>(...args) + LRUCacheMock.caches.push(cache as any) + return cache + } + } + + return { + ...mod, + LRUCache: LRUCacheMock + } +}) diff --git a/front/test/setup/mock-server.ts b/front/test/setup/mock-server.ts new file mode 100644 index 000000000..95b8e65b5 --- /dev/null +++ b/front/test/setup/mock-server.ts @@ -0,0 +1,17 @@ +import { handlers } from '../msw-server' +import { setupServer } from 'msw/node' + +import.meta.env.VUE_APP_INSTANCE_URL = 'http://localhost:3000/' + +const server = setupServer( + // We need to map the urls and remove /api/v1 prefix + ...handlers.map((handler) => { + handler.info.path = handler.info.path.replace('/api/v1', '') + handler.info.header = handler.info.header.replace('/api/v1', '') + return handler + }) +) + +beforeAll(() => server.listen()) +afterEach(() => server.resetHandlers()) +afterAll(() => server.close()) diff --git a/front/test/specs/composables/audio/tracks.test.ts b/front/test/specs/composables/audio/tracks.test.ts new file mode 100644 index 000000000..283828ad9 --- /dev/null +++ b/front/test/specs/composables/audio/tracks.test.ts @@ -0,0 +1,130 @@ +import { LRUCache } from 'lru-cache' +import { currentIndex, useQueue } from '~/composables/audio/queue' +import { useTracks } from '~/composables/audio/tracks' +import { sleep } from '?/utils' +import type { Sound } from '~/api/player' +import type { Track } from '~/types' + +const { enqueue, enqueueAt, clear } = useQueue() + +// @ts-expect-error We've added caches array in the mock file +const cache: LRUCache<number, Sound> = LRUCache.caches[0] + +type CreateTrackFn = { + (): Track + id?: number +} + +const createTrack = <CreateTrackFn>(() => { + createTrack.id = createTrack.id ?? 0 + return { id: createTrack.id++, uploads: [] } as any as Track +}) + + +beforeAll(() => { + const { initialize } = useTracks() + initialize() +}) + + +describe('cache', () => { + beforeEach(async () => { + createTrack.id = 0 + + await clear() + await enqueue( + createTrack(), + createTrack(), + createTrack(), + createTrack(), + createTrack(), + ) + }) + + it('useQueue().clear() clears track cache', async () => { + expect(cache.size).toBe(1) + await clear() + expect(cache.size).toBe(0) + }) + + it('caches next track after 100ms', async () => { + expect(cache.size).toBe(1) + + await sleep(110) + expect(cache.size).toBe(2) + }) + + it('preserves previous track in cache, when next track is playing', async () => { + expect(cache.size).toBe(1) + + await sleep(110) + expect(cache.size).toBe(2) + currentIndex.value += 1 + + await sleep(110) + expect(cache.size).toBe(3) + }) + + it('maxes at 3 cache elements', async () => { + expect(cache.size).toBe(1) + const [[firstCachedId]] = cache.dump() + + await sleep(110) + expect(cache.size).toBe(2) + currentIndex.value += 1 + + await sleep(110) + expect(cache.size).toBe(3) + currentIndex.value += 1 + + await sleep(110) + expect(cache.size).toBe(3) + expect(cache.dump().map(([id]) => id)).not.toContain(firstCachedId) + }) + + it('jumping around behaves correctly', async () => { + currentIndex.value = 2 + await sleep(110) + expect([...cache.rkeys()]).toEqual([0, 2, 3]) + + currentIndex.value = 3 + await sleep(110) + expect([...cache.rkeys()]).toEqual([2, 3, 4]) + + // We change to the first song + currentIndex.value = 0 + await sleep(0) // Wait until next macro task + expect([...cache.rkeys()]).toEqual([3, 4, 0]) + + // Now the next song should be enqueued + await sleep(110) + expect([...cache.rkeys()]).toEqual([4, 0, 1]) + }) + + describe('track enqueueing', () => { + // NOTE: We always want to have tracks 0, 1, 2 in the cache + beforeEach(async () => { + currentIndex.value += 1 + await sleep(110) + expect(cache.size).toBe(3) + }) + + it('enqueueing track as next adds it to the cache', async () => { + enqueueAt(currentIndex.value + 1, createTrack()) // id: 5 + await sleep(210) + const newIds = [...cache.rkeys()] + expect(newIds).toEqual([2, 1, 5]) + }) + + it('edge case: enqueueing track as next multiple times does not remove dispose current track', async () => { + enqueueAt(currentIndex.value + 1, createTrack()) // id: 5 + await sleep(210) + enqueueAt(currentIndex.value + 1, createTrack()) // id: 6 + await sleep(210) + enqueueAt(currentIndex.value + 1, createTrack()) // id: 7 + await sleep(210) + const newIds = [...cache.rkeys()] + expect(newIds).toEqual([6, 1, 7]) + }) + }) +}) diff --git a/front/vite.config.ts b/front/vite.config.ts index f46eb8807..e9dc4e23a 100644 --- a/front/vite.config.ts +++ b/front/vite.config.ts @@ -19,7 +19,7 @@ export default defineConfig(({ mode }) => ({ VueMacros({ plugins: { // https://github.com/vitejs/vite/tree/main/packages/plugin-vue - vue: Vue(), + vue: Vue() } }), @@ -61,14 +61,14 @@ export default defineConfig(({ mode }) => ({ rollupOptions: { output: { manualChunks: { - 'axios': ['axios', 'axios-auth-refresh'], - 'dompurify': ['dompurify'], - 'jquery': ['jquery'], - 'lodash': ['lodash-es'], - 'moment': ['moment'], - 'sentry': ['@sentry/vue', '@sentry/tracing'], + axios: ['axios', 'axios-auth-refresh'], + dompurify: ['dompurify'], + jquery: ['jquery'], + lodash: ['lodash-es'], + moment: ['moment'], + sentry: ['@sentry/vue', '@sentry/tracing'], 'standardized-audio-context': ['standardized-audio-context'], - 'vue-router': ['vue-router'], + 'vue-router': ['vue-router'] } } } @@ -77,15 +77,17 @@ export default defineConfig(({ mode }) => ({ environment: 'jsdom', globals: true, reporters: ['default', 'junit'], - outputFile: "./test_results.xml", + outputFile: './test_results.xml', coverage: { src: './src', all: true, reporter: ['text', 'cobertura'] }, setupFiles: [ + './test/setup/mock-server.ts', './test/setup/mock-audio-context.ts', - './test/setup/mock-vue-i18n.ts' + './test/setup/mock-vue-i18n.ts', + './test/setup/mock-lru-cache.ts' ] } })) diff --git a/front/yarn.lock b/front/yarn.lock index f55efc756..91afcb03f 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -29,6 +29,38 @@ jsonpointer "^5.0.0" leven "^3.1.0" +"@apidevtools/json-schema-ref-parser@9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" + integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== + dependencies: + "@jsdevtools/ono" "^7.1.3" + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" + integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.6" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + ajv "^8.6.3" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.1" + "@assemblyscript/loader@^0.17.11": version "0.17.14" resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" @@ -988,6 +1020,20 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bundled-es-modules/cookie@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz#c3b82703969a61cf6a46e959a012b2c257f6b164" + integrity sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw== + dependencies: + cookie "^0.5.0" + +"@bundled-es-modules/statuses@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" + integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + dependencies: + statuses "^2.0.1" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -1025,6 +1071,11 @@ debug "^3.1.0" lodash.once "^4.1.1" +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + "@esbuild/android-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" @@ -1035,6 +1086,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + "@esbuild/android-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" @@ -1045,6 +1101,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + "@esbuild/android-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" @@ -1055,6 +1116,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + "@esbuild/darwin-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" @@ -1065,6 +1131,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + "@esbuild/darwin-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" @@ -1075,6 +1146,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + "@esbuild/freebsd-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" @@ -1085,6 +1161,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + "@esbuild/freebsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" @@ -1095,6 +1176,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + "@esbuild/linux-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" @@ -1105,6 +1191,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + "@esbuild/linux-arm@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" @@ -1115,6 +1206,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + "@esbuild/linux-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" @@ -1125,6 +1221,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + "@esbuild/linux-loong64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" @@ -1135,6 +1236,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + "@esbuild/linux-mips64el@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" @@ -1145,6 +1251,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + "@esbuild/linux-ppc64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" @@ -1155,6 +1266,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + "@esbuild/linux-riscv64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" @@ -1165,6 +1281,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + "@esbuild/linux-s390x@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" @@ -1175,6 +1296,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + "@esbuild/linux-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" @@ -1185,6 +1311,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + "@esbuild/netbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" @@ -1195,6 +1326,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + "@esbuild/openbsd-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" @@ -1205,6 +1341,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + "@esbuild/sunos-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" @@ -1215,6 +1356,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + "@esbuild/win32-arm64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" @@ -1225,6 +1371,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + "@esbuild/win32-ia32@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" @@ -1235,6 +1386,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + "@esbuild/win32-x64@0.17.19": version "0.17.19" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" @@ -1245,6 +1401,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + "@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1272,6 +1433,16 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" + integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== + +"@faker-js/faker@8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.4.1.tgz#5d5e8aee8fce48f5e189bf730ebd1f758f491451" + integrity sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg== + "@funkwhale/ui@0.2.2": version "0.2.2" resolved "https://registry.yarnpkg.com/@funkwhale/ui/-/ui-0.2.2.tgz#09a5f8e6b30d7a898b50f5fdcfce9b09b3071c5b" @@ -1300,6 +1471,39 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@inquirer/confirm@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.0.0.tgz#6e1e35d18675fe659752d11021f9fddf547950b7" + integrity sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg== + dependencies: + "@inquirer/core" "^7.0.0" + "@inquirer/type" "^1.2.0" + +"@inquirer/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-7.0.0.tgz#18d2d2bb5cc6858765b4dcf3dce544ad15898e81" + integrity sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA== + dependencies: + "@inquirer/type" "^1.2.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.11.16" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + figures "^3.2.0" + mute-stream "^1.0.0" + run-async "^3.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +"@inquirer/type@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.2.0.tgz#a569613628a881c2104289ca868a7def54e5c49d" + integrity sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA== + "@intlify/bundle-utils@^7.4.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.5.0.tgz#fb50947c4e9997228a8abd5775e57a1202f71b09" @@ -1402,6 +1606,13 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1442,6 +1653,28 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@mswjs/cookies@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b" + integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw== + +"@mswjs/interceptors@^0.25.16": + version "0.25.16" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.25.16.tgz#7955fbb8da479bc691df117dd4c8d889e507ecc2" + integrity sha512-8QC8JyKztvoGAdPgyZy49c9vSHHAZjHagwl4RY9E8carULk8ym3iTaiawrT1YoLF/qb449h48f71XDPgkUSOUg== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.2.1" + strict-event-emitter "^0.5.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1463,6 +1696,24 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + +"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + "@polka/url@^1.0.0-next.20": version "1.0.0-next.23" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" @@ -1522,6 +1773,71 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@rollup/rollup-android-arm-eabi@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" + integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== + +"@rollup/rollup-android-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" + integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== + +"@rollup/rollup-darwin-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" + integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== + +"@rollup/rollup-darwin-x64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" + integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== + +"@rollup/rollup-linux-arm-gnueabihf@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" + integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== + +"@rollup/rollup-linux-arm64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" + integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== + +"@rollup/rollup-linux-arm64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" + integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== + +"@rollup/rollup-linux-riscv64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" + integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== + +"@rollup/rollup-linux-x64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" + integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== + +"@rollup/rollup-linux-x64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" + integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== + +"@rollup/rollup-win32-arm64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" + integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== + +"@rollup/rollup-win32-ia32-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" + integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== + +"@rollup/rollup-win32-x64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" + integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== + "@sentry-internal/tracing@7.47.0": version "7.47.0" resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.47.0.tgz#45e92eb4c8d049d93bd4fab961eaa38a4fb680f3" @@ -1593,6 +1909,11 @@ "@sentry/utils" "7.47.0" tslib "^1.9.3" +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -1664,6 +1985,11 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + "@types/diff@5.0.9": version "5.0.9" resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" @@ -1681,7 +2007,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^1.0.0": +"@types/estree@1.0.5", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -1740,6 +2066,13 @@ dependencies: axios ">=0.13.0" +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + "@types/node@*": version "20.9.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.4.tgz#cc8f970e869c26834bdb7ed480b30ede622d74c7" @@ -1747,6 +2080,13 @@ dependencies: undici-types "~5.26.4" +"@types/node@^20.11.16": + version "20.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== + dependencies: + undici-types "~5.26.4" + "@types/parse-json@^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" @@ -1960,6 +2300,11 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== +"@types/statuses@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315" + integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== + "@types/trusted-types@*", "@types/trusted-types@^2.0.2": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" @@ -1975,6 +2320,11 @@ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + "@types/yauzl@^2.9.1": version "2.10.3" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" @@ -2081,6 +2431,50 @@ c8 "^7.12.0" vitest "0.25.8" +"@vitest/expect@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.0.tgz#09b374357b51be44f4fba9336d59024756f902dc" + integrity sha512-7bWt0vBTZj08B+Ikv70AnLRicohYwFgzNjFqo9SxxqHHxSlUJGSXmCRORhOnRMisiUryKMdvsi1n27Bc6jL9DQ== + dependencies: + "@vitest/spy" "1.3.0" + "@vitest/utils" "1.3.0" + chai "^4.3.10" + +"@vitest/runner@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.0.tgz#1fabbe8d13642473e1acc3450b4df67cf40ae9d1" + integrity sha512-1Jb15Vo/Oy7mwZ5bXi7zbgszsdIBNjc4IqP8Jpr/8RdBC4nF1CTzIAn2dxYvpF1nGSseeL39lfLQ2uvs5u1Y9A== + dependencies: + "@vitest/utils" "1.3.0" + p-limit "^5.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.0.tgz#016b34289d87ef0c64f4cdb9173086c2edf1db7b" + integrity sha512-swmktcviVVPYx9U4SEQXLV6AEY51Y6bZ14jA2yo6TgMxQ3h+ZYiO0YhAHGJNp0ohCFbPAis1R9kK0cvN6lDPQA== + dependencies: + magic-string "^0.30.5" + pathe "^1.1.1" + pretty-format "^29.7.0" + +"@vitest/spy@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.0.tgz#1faab30e364324e9826887d479e71c03299fe77b" + integrity sha512-AkCU0ThZunMvblDpPKgjIi025UxR8V7MZ/g/EwmAGpjIujLVV2X6rGYGmxE2D4FJbAy0/ijdROHMWa2M/6JVMw== + dependencies: + tinyspy "^2.2.0" + +"@vitest/utils@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.0.tgz#7d46aa00617c1720b075eaeb4c4979a712d86c8e" + integrity sha512-/LibEY/fkaXQufi4GDlQZhikQsPO2entBKtfuyIpr1jV4DpaeasqkeHjhdOhU24vSHshcSuEyVlWdzvv2XmYCw== + dependencies: + diff-sequences "^29.6.3" + estree-walker "^3.0.3" + loupe "^2.3.7" + pretty-format "^29.7.0" + "@volar/language-core@1.10.0": version "1.10.0" resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.0.tgz#fb6b3ad22e75c53a1ae4d644c4a788b47d411b9d" @@ -2734,6 +3128,11 @@ acorn-walk@^8.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== +acorn-walk@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" @@ -2759,6 +3158,11 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv-draft-04@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2769,7 +3173,7 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.6.0: +ajv@^8.6.0, ajv@^8.6.3: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2784,7 +3188,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.3.0: +ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2810,6 +3214,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2823,6 +3232,13 @@ arch@^2.2.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -3185,6 +3601,11 @@ c8@^7.12.0: yargs "^16.2.0" yargs-parser "^20.2.9" +cac@^6.7.12, cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cachedir@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" @@ -3199,6 +3620,11 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: get-intrinsic "^1.2.1" set-function-length "^1.1.1" +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3214,6 +3640,19 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +chai@^4.3.10: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + chai@^4.3.7: version "4.3.10" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" @@ -3288,6 +3727,11 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -3305,6 +3749,11 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3404,6 +3853,11 @@ cookie@^0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + core-js-compat@^3.31.0, core-js-compat@^3.33.1: version "3.33.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" @@ -3427,7 +3881,7 @@ cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3607,6 +4061,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + diff@5.1.0, diff@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" @@ -3812,6 +4271,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + esbuild@^0.17.5: version "0.17.19" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" @@ -3868,6 +4332,35 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.20" "@esbuild/win32-x64" "0.18.20" +esbuild@^0.19.3: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4159,7 +4652,7 @@ espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.1: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -4193,6 +4686,13 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4218,6 +4718,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -4277,6 +4792,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -4420,7 +4940,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -4482,6 +5002,11 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -4628,6 +5153,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphql@^16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -4684,6 +5214,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +headers-polyfill@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a" + integrity sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw== + html-encoding-sniffer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" @@ -4723,6 +5258,11 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + https-proxy-agent@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" @@ -4736,6 +5276,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -4939,6 +5484,11 @@ is-negative-zero@^2.0.2: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-node-process@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== + is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" @@ -4991,6 +5541,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -5112,6 +5667,19 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^8.0.2: + version "8.0.3" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" + integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -5311,6 +5879,14 @@ local-pkg@^0.4.2, local-pkg@^0.4.3: resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -5376,7 +5952,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loupe@^2.3.6: +loupe@^2.3.6, loupe@^2.3.7: version "2.3.7" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== @@ -5472,6 +6048,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + minimatch@9.0.3, minimatch@^9.0.0: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -5503,7 +6084,7 @@ mitt@^2.1.0: resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230" integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== -mlly@^1.2.0: +mlly@^1.2.0, mlly@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== @@ -5538,6 +6119,41 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +msw-auto-mock@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/msw-auto-mock/-/msw-auto-mock-0.18.0.tgz#2d67d01aa1d2454a55e4efa53caea51b0c055136" + integrity sha512-mFpsq+EM2W05Vb07VMRbJJarahUtxzq4hapwUYhoLM5MtU6tM2D5tRK9xEP7hBRZc6rWT+tfCwvjB0KhxoNEPQ== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + cac "^6.7.12" + lodash "^4.17.21" + oazapfts "^4.5.2" + prettier "3.1.0" + swagger2openapi "^7.0.8" + +msw@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.2.1.tgz#5ece7ee81331aabe632fe331f07e71e8a3949499" + integrity sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w== + dependencies: + "@bundled-es-modules/cookie" "^2.0.0" + "@bundled-es-modules/statuses" "^1.0.1" + "@inquirer/confirm" "^3.0.0" + "@mswjs/cookies" "^1.1.0" + "@mswjs/interceptors" "^0.25.16" + "@open-draft/until" "^2.1.0" + "@types/cookie" "^0.6.0" + "@types/statuses" "^2.0.4" + chalk "^4.1.2" + graphql "^16.8.1" + headers-polyfill "^4.0.2" + is-node-process "^1.2.0" + outvariant "^1.4.2" + path-to-regexp "^6.2.0" + strict-event-emitter "^0.5.1" + type-fest "^4.9.0" + yargs "^17.7.2" + muggle-string@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" @@ -5548,6 +6164,11 @@ muggle-string@^0.3.1: resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + nanoid@^3.3.6, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -5569,6 +6190,27 @@ nise@^5.1.4: just-extend "^4.0.2" path-to-regexp "^1.7.0" +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" @@ -5586,6 +6228,13 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== + dependencies: + path-key "^4.0.0" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -5598,6 +6247,63 @@ nwsapi@^2.2.7: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" + integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== + dependencies: + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.2.2" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + reftools "^1.1.9" + should "^13.2.1" + yaml "^1.10.0" + +oazapfts@^4.5.2: + version "4.12.0" + resolved "https://registry.yarnpkg.com/oazapfts/-/oazapfts-4.12.0.tgz#8a86c5fe5a1237b16b05d06d05815cffa2a2b949" + integrity sha512-hNKRG4eLYceuJuqDDx7Uqsi8p3j5k83gNKSo2qnUOTiiU03sCQOjXxOqCXDbzRcuDFyK94+1PBIpotK4NoxIjw== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + swagger2openapi "^7.0.8" + typescript "^5.2.2" + object-inspect@^1.13.1, object-inspect@^1.9.0: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" @@ -5660,6 +6366,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -5686,6 +6399,11 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== +outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" + integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -5693,6 +6411,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-limit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -5758,6 +6483,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -5770,6 +6500,11 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -5869,11 +6604,25 @@ postcss@^8.4.33: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== + pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -5884,6 +6633,15 @@ pretty-bytes@^6.0.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -5941,6 +6699,11 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -5948,6 +6711,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" @@ -6110,11 +6878,38 @@ rollup@^3.21.0, rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.2: optionalDependencies: fsevents "~2.3.2" +rollup@^4.2.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" + integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.12.0" + "@rollup/rollup-android-arm64" "4.12.0" + "@rollup/rollup-darwin-arm64" "4.12.0" + "@rollup/rollup-darwin-x64" "4.12.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" + "@rollup/rollup-linux-arm64-gnu" "4.12.0" + "@rollup/rollup-linux-arm64-musl" "4.12.0" + "@rollup/rollup-linux-riscv64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-musl" "4.12.0" + "@rollup/rollup-win32-arm64-msvc" "4.12.0" + "@rollup/rollup-win32-ia32-msvc" "4.12.0" + "@rollup/rollup-win32-x64-msvc" "4.12.0" + fsevents "~2.3.2" + rrweb-cssom@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6224,6 +7019,50 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + showdown@2.1.0, showdown@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" @@ -6245,11 +7084,21 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sinon@15.0.2: version "15.0.2" resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.2.tgz#f3e3aacb990bbaa8a7bb976e86118c5dc0154e66" @@ -6351,6 +7200,11 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + sshpk@^1.14.1: version "1.18.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" @@ -6373,6 +7227,11 @@ stack-generator@^2.0.5: dependencies: stackframe "^1.3.4" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + stackframe@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" @@ -6416,6 +7275,21 @@ standardized-audio-context@25.3.60, standardized-audio-context@^25.3.60: automation-events "^6.0.13" tslib "^2.6.2" +statuses@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +std-env@^3.5.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -6498,6 +7372,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -6510,6 +7389,13 @@ strip-literal@^1.0.0: dependencies: acorn "^8.10.0" +strip-literal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" + integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== + dependencies: + js-tokens "^8.0.2" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6536,6 +7422,23 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +swagger2openapi@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" + integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== + dependencies: + call-me-maybe "^1.0.1" + node-fetch "^2.6.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + oas-validator "^5.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -6605,16 +7508,31 @@ tinybench@^2.3.1: resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== +tinybench@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" + integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== + tinypool@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.1.tgz#a99c2e446aba9be05d3e1cb756d6aed7af4723b6" integrity sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ== +tinypool@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" + integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== + tinyspy@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== +tinyspy@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== + tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" @@ -6663,6 +7581,11 @@ tr46@^5.0.0: dependencies: punycode "^2.3.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + transliteration@2.3.5, transliteration@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.3.5.tgz#8f92309575f69e4a8a525dab4ff705ebcf961c45" @@ -6734,6 +7657,11 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^4.9.0: + version "4.10.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.10.2.tgz#3abdb144d93c5750432aac0d73d3e85fcab45738" + integrity sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw== + typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" @@ -6783,6 +7711,11 @@ typescript@4.9.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + typical@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" @@ -6998,6 +7931,17 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vite-node@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.0.tgz#618cc26d83545cfbd4e2c3014678257496d2bd00" + integrity sha512-D/oiDVBw75XMnjAXne/4feCkCEwcbr2SU1bjAhCcfI5Bq3VoOHji8/wCPAfUkDIeohJ5nSZ39fNxM3dNZ6OBOA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^5.0.0" + vite-plugin-pwa@0.14.4: version "0.14.4" resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" @@ -7033,6 +7977,17 @@ vite@4.3.5: optionalDependencies: fsevents "~2.3.2" +vite@^5.0.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" + integrity sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew== + dependencies: + esbuild "^0.19.3" + postcss "^8.4.35" + rollup "^4.2.0" + optionalDependencies: + fsevents "~2.3.3" + vitest@0.25.8: version "0.25.8" resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.8.tgz#9b57e0b41cd6f2d2d92aa94a39b35c36f715f8cc" @@ -7053,6 +8008,32 @@ vitest@0.25.8: tinyspy "^1.0.2" vite "^3.0.0 || ^4.0.0" +vitest@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.0.tgz#3b04e2a8270b2db0929829cb8f03df7bffd1b5a2" + integrity sha512-V9qb276J1jjSx9xb75T2VoYXdO1UKi+qfflY7V7w93jzX7oA/+RtYE6TcifxksxsZvygSSMwu2Uw6di7yqDMwg== + dependencies: + "@vitest/expect" "1.3.0" + "@vitest/runner" "1.3.0" + "@vitest/snapshot" "1.3.0" + "@vitest/spy" "1.3.0" + "@vitest/utils" "1.3.0" + acorn-walk "^8.3.2" + chai "^4.3.10" + debug "^4.3.4" + execa "^8.0.1" + local-pkg "^0.5.0" + magic-string "^0.30.5" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.5.0" + strip-literal "^2.0.0" + tinybench "^2.5.1" + tinypool "^0.8.2" + vite "^5.0.0" + vite-node "1.3.0" + why-is-node-running "^2.2.2" + vue-demi@>=0.14.5: version "0.14.6" resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92" @@ -7229,6 +8210,11 @@ w3c-xmlserializer@^5.0.0: dependencies: xml-name-validator "^5.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -7269,6 +8255,14 @@ whatwg-url@^14.0.0: tr46 "^5.0.0" webidl-conversions "^7.0.0" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -7307,6 +8301,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + workbox-background-sync@6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" @@ -7593,7 +8595,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.5.1: +yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -7618,3 +8620,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 9e2d47f6981f510bdb0b9593082b24b51debc6e4 Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 14:45:33 +0000 Subject: [PATCH 315/371] chore: add changelog snippets Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- changes/changelog.d/2757.enhancement | 1 + changes/changelog.d/2757.feature | 1 + changes/changelog.d/2757.refactoring | 1 + 3 files changed, 3 insertions(+) create mode 100644 changes/changelog.d/2757.enhancement create mode 100644 changes/changelog.d/2757.feature create mode 100644 changes/changelog.d/2757.refactoring diff --git a/changes/changelog.d/2757.enhancement b/changes/changelog.d/2757.enhancement new file mode 100644 index 000000000..dd9d34ecb --- /dev/null +++ b/changes/changelog.d/2757.enhancement @@ -0,0 +1 @@ +Add tests for track cache diff --git a/changes/changelog.d/2757.feature b/changes/changelog.d/2757.feature new file mode 100644 index 000000000..d0d957458 --- /dev/null +++ b/changes/changelog.d/2757.feature @@ -0,0 +1 @@ +Generate mock test server from openapi schema diff --git a/changes/changelog.d/2757.refactoring b/changes/changelog.d/2757.refactoring new file mode 100644 index 000000000..26cfe8dc7 --- /dev/null +++ b/changes/changelog.d/2757.refactoring @@ -0,0 +1 @@ +Add compatibility for lru-cache v10 From 7957661573818919c71221f5c396bcf27c5e8e03 Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 16:39:18 +0000 Subject: [PATCH 316/371] style: fix linting errors Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- front/src/composables/useLogger.ts | 3 ++- front/test/setup/mock-server.ts | 6 ++++-- front/test/specs/composables/audio/tracks.test.ts | 4 +--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/front/src/composables/useLogger.ts b/front/src/composables/useLogger.ts index 116255049..86161d830 100644 --- a/front/src/composables/useLogger.ts +++ b/front/src/composables/useLogger.ts @@ -46,7 +46,8 @@ const FILETYPE_COLOR: Record<string, string> = { // NOTE: We're pushing all logs to the end of the event loop const createLoggerFn = (level: LogLevel) => { - // @ts-expect-error Use console in test environment + // NOTE: Use console in test environment + // eslint-disable-next-line no-console if (import.meta.env.VITEST) return console[level] // NOTE: Don't log time and debug in production environment diff --git a/front/test/setup/mock-server.ts b/front/test/setup/mock-server.ts index 95b8e65b5..5b9806780 100644 --- a/front/test/setup/mock-server.ts +++ b/front/test/setup/mock-server.ts @@ -4,9 +4,11 @@ import { setupServer } from 'msw/node' import.meta.env.VUE_APP_INSTANCE_URL = 'http://localhost:3000/' const server = setupServer( - // We need to map the urls and remove /api/v1 prefix ...handlers.map((handler) => { - handler.info.path = handler.info.path.replace('/api/v1', '') + if (typeof handler.info.path === 'string') { + handler.info.path = handler.info.path.replace('/api/v1', '') + } + handler.info.header = handler.info.header.replace('/api/v1', '') return handler }) diff --git a/front/test/specs/composables/audio/tracks.test.ts b/front/test/specs/composables/audio/tracks.test.ts index 283828ad9..5663aa7bb 100644 --- a/front/test/specs/composables/audio/tracks.test.ts +++ b/front/test/specs/composables/audio/tracks.test.ts @@ -20,13 +20,11 @@ const createTrack = <CreateTrackFn>(() => { return { id: createTrack.id++, uploads: [] } as any as Track }) - beforeAll(() => { const { initialize } = useTracks() initialize() }) - describe('cache', () => { beforeEach(async () => { createTrack.id = 0 @@ -37,7 +35,7 @@ describe('cache', () => { createTrack(), createTrack(), createTrack(), - createTrack(), + createTrack() ) }) From 367ba84f13874a5aa6abbfc1e9d17898ec523e5f Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 16:41:34 +0000 Subject: [PATCH 317/371] fix(tests): replace serialize_upload with UploadSerializer Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- api/funkwhale_api/music/serializers.py | 6 +++--- api/tests/music/test_serializers.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 3e183b907..d0e08a0a0 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -226,7 +226,7 @@ class TrackAlbumSerializer(serializers.ModelSerializer): ) -class UploadSerializer(serializers.Serializer): +class TrackUploadSerializer(serializers.Serializer): uuid = serializers.UUIDField() listen_url = serializers.URLField() size = serializers.IntegerField() @@ -284,11 +284,11 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer): return obj.listen_url # @extend_schema_field({"type": "array", "items": {"type": "object"}}) - @extend_schema_field(UploadSerializer(many=True)) + @extend_schema_field(TrackUploadSerializer(many=True)) def get_uploads(self, obj): uploads = getattr(obj, "playable_uploads", []) # we put local uploads first - uploads = [UploadSerializer(u).data for u in sort_uploads_for_listen(uploads)] + uploads = [TrackUploadSerializer(u).data for u in sort_uploads_for_listen(uploads)] uploads = sorted(uploads, key=lambda u: u["is_local"], reverse=True) return list(uploads) diff --git a/api/tests/music/test_serializers.py b/api/tests/music/test_serializers.py index c5cc40464..7df47e537 100644 --- a/api/tests/music/test_serializers.py +++ b/api/tests/music/test_serializers.py @@ -245,7 +245,7 @@ def test_track_serializer(factories, to_api_date): "title": track.title, "position": track.position, "disc_number": track.disc_number, - "uploads": [serializers.serialize_upload(upload)], + "uploads": [serializers.TrackUploadSerializer(upload).data], "creation_date": to_api_date(track.creation_date), "listen_url": track.listen_url, "license": upload.track.license.code, @@ -373,7 +373,7 @@ def test_manage_upload_action_publish(factories, mocker): m.assert_any_call(tasks.process_upload.delay, upload_id=draft.pk) -def test_serialize_upload(factories): +def test_track_upload_serializer(factories): upload = factories["music.Upload"]() expected = { @@ -387,7 +387,7 @@ def test_serialize_upload(factories): "is_local": False, } - data = serializers.serialize_upload(upload) + data = serializers.TrackUploadSerializer(upload).data assert data == expected From 83120cced257fd220a2084f06c890927fe870700 Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 18:28:13 +0000 Subject: [PATCH 318/371] fix(tests): fix coverage in node tests Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- front/package.json | 6 +- front/yarn.lock | 575 ++++++++------------------------------------- 2 files changed, 98 insertions(+), 483 deletions(-) diff --git a/front/package.json b/front/package.json index 64080710a..dadee7f33 100644 --- a/front/package.json +++ b/front/package.json @@ -72,7 +72,7 @@ "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", "@typescript-eslint/eslint-plugin": "6.20.0", "@vitejs/plugin-vue": "5.0.3", - "@vitest/coverage-c8": "0.25.8", + "@vitest/coverage-v8": "1.3.1", "@vue-macros/volar": "0.13.3", "@vue/compiler-sfc": "3.3.11", "@vue/eslint-config-standard": "8.0.1", @@ -100,9 +100,9 @@ "typescript": "4.9.5", "unplugin-vue-macros": "2.4.6", "utility-types": "3.10.0", - "vite": "4.3.5", + "vite": "5.1.3", "vite-plugin-pwa": "0.14.4", - "vitest": "1.3.0", + "vitest": "1.3.1", "vue-tsc": "1.6.5", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4", diff --git a/front/yarn.lock b/front/yarn.lock index 91afcb03f..66c240cda 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0": +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -1015,6 +1015,15 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.23.6": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1076,331 +1085,111 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== - "@esbuild/android-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== - "@esbuild/android-arm@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== - "@esbuild/android-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== - "@esbuild/darwin-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - "@esbuild/darwin-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== - "@esbuild/freebsd-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - "@esbuild/freebsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== - "@esbuild/linux-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== - "@esbuild/linux-arm@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - "@esbuild/linux-ia32@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== - "@esbuild/linux-loong64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - "@esbuild/linux-mips64el@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - "@esbuild/linux-ppc64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - "@esbuild/linux-riscv64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - "@esbuild/linux-s390x@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - "@esbuild/linux-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - "@esbuild/netbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - "@esbuild/openbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - "@esbuild/sunos-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - "@esbuild/win32-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - "@esbuild/win32-ia32@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - "@esbuild/win32-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" @@ -1601,7 +1390,7 @@ source-map-js "^1.0.2" unplugin "^1.1.0" -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": +"@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1968,18 +1757,6 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@types/chai-subset@^1.3.3": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a" - integrity sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.3.4": - version "4.3.11" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" - integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== - "@types/cookie@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" @@ -2423,52 +2200,63 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== -"@vitest/coverage-c8@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@vitest/coverage-c8/-/coverage-c8-0.25.8.tgz#a46d171b1b2291089dd5518642bbbec9890617e5" - integrity sha512-fWgzQoK2KNzTTNnDcLCyibfO9/pbcpPOMtZ9Yvq/Eggpi2X8lewx/OcKZkO5ba5q9dl6+BBn6d5hTcS1709rZw== +"@vitest/coverage-v8@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz#cf5ed8eb5bff6658cea126d0f8fcd2872de0b59f" + integrity sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg== dependencies: - c8 "^7.12.0" - vitest "0.25.8" + "@ampproject/remapping" "^2.2.1" + "@bcoe/v8-coverage" "^0.2.3" + debug "^4.3.4" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-report "^3.0.1" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.1.6" + magic-string "^0.30.5" + magicast "^0.3.3" + picocolors "^1.0.0" + std-env "^3.5.0" + test-exclude "^6.0.0" + v8-to-istanbul "^9.2.0" -"@vitest/expect@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.0.tgz#09b374357b51be44f4fba9336d59024756f902dc" - integrity sha512-7bWt0vBTZj08B+Ikv70AnLRicohYwFgzNjFqo9SxxqHHxSlUJGSXmCRORhOnRMisiUryKMdvsi1n27Bc6jL9DQ== +"@vitest/expect@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.1.tgz#d4c14b89c43a25fd400a6b941f51ba27fe0cb918" + integrity sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw== dependencies: - "@vitest/spy" "1.3.0" - "@vitest/utils" "1.3.0" + "@vitest/spy" "1.3.1" + "@vitest/utils" "1.3.1" chai "^4.3.10" -"@vitest/runner@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.0.tgz#1fabbe8d13642473e1acc3450b4df67cf40ae9d1" - integrity sha512-1Jb15Vo/Oy7mwZ5bXi7zbgszsdIBNjc4IqP8Jpr/8RdBC4nF1CTzIAn2dxYvpF1nGSseeL39lfLQ2uvs5u1Y9A== +"@vitest/runner@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.1.tgz#e7f96cdf74842934782bfd310eef4b8695bbfa30" + integrity sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg== dependencies: - "@vitest/utils" "1.3.0" + "@vitest/utils" "1.3.1" p-limit "^5.0.0" pathe "^1.1.1" -"@vitest/snapshot@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.0.tgz#016b34289d87ef0c64f4cdb9173086c2edf1db7b" - integrity sha512-swmktcviVVPYx9U4SEQXLV6AEY51Y6bZ14jA2yo6TgMxQ3h+ZYiO0YhAHGJNp0ohCFbPAis1R9kK0cvN6lDPQA== +"@vitest/snapshot@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.1.tgz#193a5d7febf6ec5d22b3f8c5a093f9e4322e7a88" + integrity sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ== dependencies: magic-string "^0.30.5" pathe "^1.1.1" pretty-format "^29.7.0" -"@vitest/spy@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.0.tgz#1faab30e364324e9826887d479e71c03299fe77b" - integrity sha512-AkCU0ThZunMvblDpPKgjIi025UxR8V7MZ/g/EwmAGpjIujLVV2X6rGYGmxE2D4FJbAy0/ijdROHMWa2M/6JVMw== +"@vitest/spy@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.1.tgz#814245d46d011b99edd1c7528f5725c64e85a88b" + integrity sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig== dependencies: tinyspy "^2.2.0" -"@vitest/utils@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.0.tgz#7d46aa00617c1720b075eaeb4c4979a712d86c8e" - integrity sha512-/LibEY/fkaXQufi4GDlQZhikQsPO2entBKtfuyIpr1jV4DpaeasqkeHjhdOhU24vSHshcSuEyVlWdzvv2XmYCw== +"@vitest/utils@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.1.tgz#7b05838654557544f694a372de767fcc9594d61a" + integrity sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ== dependencies: diff-sequences "^29.6.3" estree-walker "^3.0.3" @@ -3123,17 +2911,12 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" - integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== - acorn-walk@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -3583,24 +3366,6 @@ butterchurn@3.0.0-beta.4: ecma-proposal-math-extensions "0.0.2" eel-wasm "^0.0.15" -c8@^7.12.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" - integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.3" - find-up "^5.0.0" - foreground-child "^2.0.0" - istanbul-lib-coverage "^3.2.0" - istanbul-lib-report "^3.0.0" - istanbul-reports "^3.1.4" - rimraf "^3.0.2" - test-exclude "^6.0.0" - v8-to-istanbul "^9.0.0" - yargs "^16.2.0" - yargs-parser "^20.2.9" - cac@^6.7.12, cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" @@ -3653,19 +3418,6 @@ chai@^4.3.10: pathval "^1.1.1" type-detect "^4.0.8" -chai@^4.3.7: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3754,15 +3506,6 @@ cli-width@^4.1.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -4276,62 +4019,6 @@ es6-promise@^3.2.1: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== -esbuild@^0.17.5: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -esbuild@^0.18.10: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== - optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" - esbuild@^0.19.3: version "0.19.12" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" @@ -4894,14 +4581,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5611,12 +5290,12 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-report@^3.0.0: +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== @@ -5625,10 +5304,19 @@ istanbul-lib-report@^3.0.0: make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-reports@^3.1.4: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.6: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -5874,7 +5562,7 @@ listr2@^3.8.3: through "^2.3.8" wrap-ansi "^7.0.0" -local-pkg@^0.4.2, local-pkg@^0.4.3: +local-pkg@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== @@ -6006,6 +5694,15 @@ magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +magicast@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" + integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== + dependencies: + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + source-map-js "^1.0.2" + make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -6577,7 +6274,7 @@ postcss-selector-parser@^6.0.9: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.4.23, postcss@^8.4.27, postcss@^8.4.31: +postcss@^8.4.31: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -6871,7 +6568,7 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" -rollup@^3.21.0, rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.2: +rollup@^3.29.1, rollup@^3.7.2: version "3.29.4" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== @@ -7382,13 +7079,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" - integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== - dependencies: - acorn "^8.10.0" - strip-literal@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" @@ -7503,31 +7193,16 @@ through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tinybench@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== - tinybench@^2.5.1: version "2.6.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== -tinypool@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.1.tgz#a99c2e446aba9be05d3e1cb756d6aed7af4723b6" - integrity sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ== - tinypool@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== -tinyspy@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" - integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== - tinyspy@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" @@ -7904,7 +7579,7 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^9.0.0: +v8-to-istanbul@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== @@ -7931,10 +7606,10 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vite-node@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.0.tgz#618cc26d83545cfbd4e2c3014678257496d2bd00" - integrity sha512-D/oiDVBw75XMnjAXne/4feCkCEwcbr2SU1bjAhCcfI5Bq3VoOHji8/wCPAfUkDIeohJ5nSZ39fNxM3dNZ6OBOA== +vite-node@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.1.tgz#a93f7372212f5d5df38e945046b945ac3f4855d2" + integrity sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng== dependencies: cac "^6.7.14" debug "^4.3.4" @@ -7955,29 +7630,7 @@ vite-plugin-pwa@0.14.4: workbox-build "^6.5.4" workbox-window "^6.5.4" -vite@4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.5.tgz#3871fe0f4b582ea7f49a85386ac80e84826367d9" - integrity sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA== - dependencies: - esbuild "^0.17.5" - postcss "^8.4.23" - rollup "^3.21.0" - optionalDependencies: - fsevents "~2.3.2" - -"vite@^3.0.0 || ^4.0.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26" - integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== - dependencies: - esbuild "^0.18.10" - postcss "^8.4.27" - rollup "^3.27.1" - optionalDependencies: - fsevents "~2.3.2" - -vite@^5.0.0: +vite@5.1.3, vite@^5.0.0: version "5.1.3" resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" integrity sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew== @@ -7988,36 +7641,16 @@ vite@^5.0.0: optionalDependencies: fsevents "~2.3.3" -vitest@0.25.8: - version "0.25.8" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.8.tgz#9b57e0b41cd6f2d2d92aa94a39b35c36f715f8cc" - integrity sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg== +vitest@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" + integrity sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ== dependencies: - "@types/chai" "^4.3.4" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - acorn "^8.8.1" - acorn-walk "^8.2.0" - chai "^4.3.7" - debug "^4.3.4" - local-pkg "^0.4.2" - source-map "^0.6.1" - strip-literal "^1.0.0" - tinybench "^2.3.1" - tinypool "^0.3.0" - tinyspy "^1.0.2" - vite "^3.0.0 || ^4.0.0" - -vitest@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.0.tgz#3b04e2a8270b2db0929829cb8f03df7bffd1b5a2" - integrity sha512-V9qb276J1jjSx9xb75T2VoYXdO1UKi+qfflY7V7w93jzX7oA/+RtYE6TcifxksxsZvygSSMwu2Uw6di7yqDMwg== - dependencies: - "@vitest/expect" "1.3.0" - "@vitest/runner" "1.3.0" - "@vitest/snapshot" "1.3.0" - "@vitest/spy" "1.3.0" - "@vitest/utils" "1.3.0" + "@vitest/expect" "1.3.1" + "@vitest/runner" "1.3.1" + "@vitest/snapshot" "1.3.1" + "@vitest/spy" "1.3.1" + "@vitest/utils" "1.3.1" acorn-walk "^8.3.2" chai "^4.3.10" debug "^4.3.4" @@ -8031,7 +7664,7 @@ vitest@1.3.0: tinybench "^2.5.1" tinypool "^0.8.2" vite "^5.0.0" - vite-node "1.3.0" + vite-node "1.3.1" why-is-node-running "^2.2.2" vue-demi@>=0.14.5: @@ -8572,29 +8205,11 @@ yaml@^2.0.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yargs-parser@^20.2.2, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" From 2b1228e620189ab897d9243354c6371d1ce01847 Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 18:42:27 +0000 Subject: [PATCH 319/371] fix(ci): ignore `afterall` in codespell Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- .codespellignore | 1 + api/funkwhale_api/music/serializers.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.codespellignore b/.codespellignore index 6022867e9..4e872e52b 100644 --- a/.codespellignore +++ b/.codespellignore @@ -7,6 +7,7 @@ nd readby serie upto +afterall # Names nin diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index d0e08a0a0..ed2e18de2 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -288,7 +288,9 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer): def get_uploads(self, obj): uploads = getattr(obj, "playable_uploads", []) # we put local uploads first - uploads = [TrackUploadSerializer(u).data for u in sort_uploads_for_listen(uploads)] + uploads = [ + TrackUploadSerializer(u).data for u in sort_uploads_for_listen(uploads) + ] uploads = sorted(uploads, key=lambda u: u["is_local"], reverse=True) return list(uploads) From 6aa609970fe5774929f294ed1bf59258152fbaad Mon Sep 17 00:00:00 2001 From: wvffle <wvffle@funkwhale.audio> Date: Tue, 20 Feb 2024 20:52:29 +0000 Subject: [PATCH 320/371] fix(tests): don't wait arbitrary time Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- front/package.json | 1 - .../specs/composables/audio/tracks.test.ts | 43 ++++++++++++------- front/test/specs/views/admin/library.test.ts | 14 +----- front/test/utils.ts | 1 - front/yarn.lock | 13 ------ 5 files changed, 29 insertions(+), 43 deletions(-) delete mode 100644 front/test/utils.ts diff --git a/front/package.json b/front/package.json index dadee7f33..41ec1c14f 100644 --- a/front/package.json +++ b/front/package.json @@ -79,7 +79,6 @@ "@vue/eslint-config-typescript": "12.0.0", "@vue/test-utils": "2.2.7", "@vue/tsconfig": "0.1.3", - "axios-mock-adapter": "1.21.4", "cypress": "13.6.4", "eslint": "8.30.0", "eslint-config-standard": "17.0.0", diff --git a/front/test/specs/composables/audio/tracks.test.ts b/front/test/specs/composables/audio/tracks.test.ts index 5663aa7bb..7ae65a06b 100644 --- a/front/test/specs/composables/audio/tracks.test.ts +++ b/front/test/specs/composables/audio/tracks.test.ts @@ -1,7 +1,7 @@ import { LRUCache } from 'lru-cache' import { currentIndex, useQueue } from '~/composables/audio/queue' import { useTracks } from '~/composables/audio/tracks' -import { sleep } from '?/utils' +import { isEqual } from 'lodash-es' import type { Sound } from '~/api/player' import type { Track } from '~/types' @@ -20,6 +20,11 @@ const createTrack = <CreateTrackFn>(() => { return { id: createTrack.id++, uploads: [] } as any as Track }) +const waitUntilCacheUpdated = async () => { + const keys = [...cache.rkeys()] + return vi.waitUntil(() => !isEqual(keys, [...cache.rkeys()]), { interval: 5 }) +} + beforeAll(() => { const { initialize } = useTracks() initialize() @@ -48,18 +53,18 @@ describe('cache', () => { it('caches next track after 100ms', async () => { expect(cache.size).toBe(1) - await sleep(110) + await waitUntilCacheUpdated() expect(cache.size).toBe(2) }) it('preserves previous track in cache, when next track is playing', async () => { expect(cache.size).toBe(1) - await sleep(110) + await waitUntilCacheUpdated() expect(cache.size).toBe(2) currentIndex.value += 1 - await sleep(110) + await waitUntilCacheUpdated() expect(cache.size).toBe(3) }) @@ -67,35 +72,38 @@ describe('cache', () => { expect(cache.size).toBe(1) const [[firstCachedId]] = cache.dump() - await sleep(110) + await waitUntilCacheUpdated() expect(cache.size).toBe(2) currentIndex.value += 1 - await sleep(110) + await waitUntilCacheUpdated() expect(cache.size).toBe(3) currentIndex.value += 1 - await sleep(110) + await waitUntilCacheUpdated() expect(cache.size).toBe(3) expect(cache.dump().map(([id]) => id)).not.toContain(firstCachedId) }) it('jumping around behaves correctly', async () => { currentIndex.value = 2 - await sleep(110) + // NOTE: waitUntilCacheUpdated() returns when first cache update is found + // That's why we need to call it twice after skipping the track + await waitUntilCacheUpdated() + await waitUntilCacheUpdated() expect([...cache.rkeys()]).toEqual([0, 2, 3]) currentIndex.value = 3 - await sleep(110) + await waitUntilCacheUpdated() expect([...cache.rkeys()]).toEqual([2, 3, 4]) // We change to the first song currentIndex.value = 0 - await sleep(0) // Wait until next macro task + await waitUntilCacheUpdated() expect([...cache.rkeys()]).toEqual([3, 4, 0]) // Now the next song should be enqueued - await sleep(110) + await waitUntilCacheUpdated() expect([...cache.rkeys()]).toEqual([4, 0, 1]) }) @@ -103,24 +111,27 @@ describe('cache', () => { // NOTE: We always want to have tracks 0, 1, 2 in the cache beforeEach(async () => { currentIndex.value += 1 - await sleep(110) + // NOTE: waitUntilCacheUpdated() returns when first cache update is found + // That's why we need to call it twice after skipping the track + await waitUntilCacheUpdated() + await waitUntilCacheUpdated() expect(cache.size).toBe(3) }) it('enqueueing track as next adds it to the cache', async () => { enqueueAt(currentIndex.value + 1, createTrack()) // id: 5 - await sleep(210) + await waitUntilCacheUpdated() const newIds = [...cache.rkeys()] expect(newIds).toEqual([2, 1, 5]) }) it('edge case: enqueueing track as next multiple times does not remove dispose current track', async () => { enqueueAt(currentIndex.value + 1, createTrack()) // id: 5 - await sleep(210) + await waitUntilCacheUpdated() enqueueAt(currentIndex.value + 1, createTrack()) // id: 6 - await sleep(210) + await waitUntilCacheUpdated() enqueueAt(currentIndex.value + 1, createTrack()) // id: 7 - await sleep(210) + await waitUntilCacheUpdated() const newIds = [...cache.rkeys()] expect(newIds).toEqual([6, 1, 7]) }) diff --git a/front/test/specs/views/admin/library.test.ts b/front/test/specs/views/admin/library.test.ts index 8e8583afa..dca3aaa2f 100644 --- a/front/test/specs/views/admin/library.test.ts +++ b/front/test/specs/views/admin/library.test.ts @@ -3,25 +3,15 @@ import AlbumDetail from '~/views/admin/library/AlbumDetail.vue' import SanitizedHtml from '~/components/SanitizedHtml.vue' import HumanDate from '~/components/common/HumanDate.vue' -import MockAdapter from 'axios-mock-adapter' -import axios from 'axios' - import { shallowMount } from '@vue/test-utils' -import { sleep } from '?/utils' +import { vi } from 'vitest' import router from '~/router' import store from '~/store' -const axiosMock = new MockAdapter(axios) - describe('views/admin/library', () => { describe('Album details', () => { it('displays default cover', async () => { - const album = { cover: null, artist: { id: 1 }, title: 'dummy', id: 1, creation_date: '2020-01-01' } - - axiosMock.onGet('manage/library/albums/1/').reply(200, album) - axiosMock.onGet('manage/library/albums/1/stats/').reply(200, {}) - const wrapper = shallowMount(AlbumDetail, { props: { id: 1 }, directives: { @@ -35,7 +25,7 @@ describe('views/admin/library', () => { } }) - await sleep() + await vi.waitUntil(() => wrapper.find('img').exists()) expect(wrapper.find('img').attributes('src')).to.include('default-cover') }) }) diff --git a/front/test/utils.ts b/front/test/utils.ts deleted file mode 100644 index febf34fdf..000000000 --- a/front/test/utils.ts +++ /dev/null @@ -1 +0,0 @@ -export const sleep = (ms = 0) => new Promise<void>(resolve => setTimeout(resolve, ms)) diff --git a/front/yarn.lock b/front/yarn.lock index 66c240cda..1c8dfd5ea 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -3200,14 +3200,6 @@ axios-auth-refresh@3.3.6: resolved "https://registry.yarnpkg.com/axios-auth-refresh/-/axios-auth-refresh-3.3.6.tgz#a879f6296a889d6616e51069c2a8135b697966e7" integrity sha512-2CeBUce/SxIfFxow5/n8vApJ97yYF6qoV4gh1UrswT7aEOnlOdBLxxyhOI4IaxGs6BY0l8YujU2jlc4aCmK17Q== -axios-mock-adapter@1.21.4: - version "1.21.4" - resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.21.4.tgz#ced09b54b245b338422e3af425ae529bfa26e051" - integrity sha512-ztnENm28ONAKeRXC/6SUW6pcsaXbThKq93MRDRAA47LYTzrGSDoO/DCr1NHz7jApEl95DrBoGPvZ0r9xtSbjqw== - dependencies: - fast-deep-equal "^3.1.3" - is-buffer "^2.0.5" - axios@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff" @@ -5078,11 +5070,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-builtin-module@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" From 06cfe8da95212a01efb2d278306c6feec3ed5a5d Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 21 Feb 2024 08:19:29 +0100 Subject: [PATCH 321/371] ci: Report frontend test coverage to gitlab Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9d1fa574b..8f7031d9c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -287,6 +287,7 @@ test_front: coverage_report: coverage_format: cobertura path: front/coverage/cobertura-coverage.xml + coverage: '/All files\s+\|\s+\d+\.\d+\s+\|\s+\d+\.\d+\s+\|\s+\d+\.\d+\s+\|\s+(\d+\.\d+)\s+.*/' build_metadata: stage: build From b1eba58dccefd33622ee4b3844e661bb3a663a3a Mon Sep 17 00:00:00 2001 From: Georg Krause <georg@funkwhale.audio> Date: Wed, 21 Feb 2024 08:34:57 +0000 Subject: [PATCH 322/371] feat: add a type hint Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- api/funkwhale_api/music/serializers.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index ed2e18de2..5b6abf21d 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -236,8 +236,7 @@ class TrackUploadSerializer(serializers.Serializer): extension = serializers.CharField() is_local = serializers.SerializerMethodField() - @extend_schema_field(serializers.BooleanField()) - def get_is_local(self, upload): + def get_is_local(self, upload) -> bool: return federation_utils.is_local(upload.fid) From de232cb749aee67d5be365ca4edbf30fe90297e4 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 21 Feb 2024 10:13:32 +0000 Subject: [PATCH 323/371] ci: Adjust coverage regex to also match int Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2757> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8f7031d9c..53d0a9adb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -287,7 +287,7 @@ test_front: coverage_report: coverage_format: cobertura path: front/coverage/cobertura-coverage.xml - coverage: '/All files\s+\|\s+\d+\.\d+\s+\|\s+\d+\.\d+\s+\|\s+\d+\.\d+\s+\|\s+(\d+\.\d+)\s+.*/' + coverage: '/All files\s+(?:\|\s+((?:\d+\.)?\d+)\s+){4}.*/' build_metadata: stage: build From 5647a1072d989fa7ad5bc11da89a9990a135996f Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 19:17:52 +0100 Subject: [PATCH 324/371] feat: add tauri Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .envrc | 2 + .gitignore | 3 + flake.lock | 130 + flake.nix | 91 + front/package.json | 2 + front/src/App.vue | 4 - front/src/components/SetInstanceModal.vue | 160 - front/src/components/Sidebar.vue | 15 +- front/src/init/serviceWorker.ts | 6 + front/src/router/guards.ts | 13 +- front/src/router/index.ts | 9 +- front/src/router/routes/index.ts | 5 + front/src/store/instance.ts | 29 +- front/src/views/ChooseInstance.vue | 189 + front/tauri/.gitignore | 3 + front/tauri/Cargo.lock | 4533 ++++++++++++ front/tauri/Cargo.toml | 30 + front/tauri/build.rs | 3 + front/tauri/favicon.png | Bin 0 -> 8599 bytes front/tauri/favicon.svg | 3 + front/tauri/icons/128x128.png | Bin 0 -> 12247 bytes front/tauri/icons/128x128@2x.png | Bin 0 -> 31626 bytes front/tauri/icons/32x32.png | Bin 0 -> 2376 bytes front/tauri/icons/Square107x107Logo.png | Bin 0 -> 10130 bytes front/tauri/icons/Square142x142Logo.png | Bin 0 -> 13801 bytes front/tauri/icons/Square150x150Logo.png | Bin 0 -> 14631 bytes front/tauri/icons/Square284x284Logo.png | Bin 0 -> 37323 bytes front/tauri/icons/Square30x30Logo.png | Bin 0 -> 2177 bytes front/tauri/icons/Square310x310Logo.png | Bin 0 -> 43145 bytes front/tauri/icons/Square44x44Logo.png | Bin 0 -> 3666 bytes front/tauri/icons/Square71x71Logo.png | Bin 0 -> 6524 bytes front/tauri/icons/Square89x89Logo.png | Bin 0 -> 8302 bytes front/tauri/icons/StoreLogo.png | Bin 0 -> 4264 bytes front/tauri/icons/icon.icns | Bin 0 -> 547860 bytes front/tauri/icons/icon.ico | Bin 0 -> 47720 bytes front/tauri/icons/icon.png | Bin 0 -> 95368 bytes front/tauri/src/lib.rs | 6 + front/tauri/src/main.rs | 6 + front/tauri/tauri.conf.json | 68 + front/vite.config.ts | 2 +- front/yarn.lock | 8229 --------------------- 41 files changed, 5126 insertions(+), 8415 deletions(-) create mode 100644 .envrc create mode 100644 flake.lock create mode 100644 flake.nix delete mode 100644 front/src/components/SetInstanceModal.vue create mode 100644 front/src/views/ChooseInstance.vue create mode 100644 front/tauri/.gitignore create mode 100644 front/tauri/Cargo.lock create mode 100644 front/tauri/Cargo.toml create mode 100644 front/tauri/build.rs create mode 100644 front/tauri/favicon.png create mode 100644 front/tauri/favicon.svg create mode 100644 front/tauri/icons/128x128.png create mode 100644 front/tauri/icons/128x128@2x.png create mode 100644 front/tauri/icons/32x32.png create mode 100644 front/tauri/icons/Square107x107Logo.png create mode 100644 front/tauri/icons/Square142x142Logo.png create mode 100644 front/tauri/icons/Square150x150Logo.png create mode 100644 front/tauri/icons/Square284x284Logo.png create mode 100644 front/tauri/icons/Square30x30Logo.png create mode 100644 front/tauri/icons/Square310x310Logo.png create mode 100644 front/tauri/icons/Square44x44Logo.png create mode 100644 front/tauri/icons/Square71x71Logo.png create mode 100644 front/tauri/icons/Square89x89Logo.png create mode 100644 front/tauri/icons/StoreLogo.png create mode 100644 front/tauri/icons/icon.icns create mode 100644 front/tauri/icons/icon.ico create mode 100644 front/tauri/icons/icon.png create mode 100644 front/tauri/src/lib.rs create mode 100644 front/tauri/src/main.rs create mode 100644 front/tauri/tauri.conf.json delete mode 100644 front/yarn.lock diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..03bb5edd5 --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +watch_file flake.nix +use flake diff --git a/.gitignore b/.gitignore index 944b37ae7..1603297e0 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,6 @@ tsconfig.tsbuildinfo # Vscode .vscode/ + +# Direnv +.direnv/ diff --git a/flake.lock b/flake.lock new file mode 100644 index 000000000..040ba3368 --- /dev/null +++ b/flake.lock @@ -0,0 +1,130 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1705856552, + "narHash": "sha256-JXfnuEf5Yd6bhMs/uvM67/joxYKoysyE3M2k6T3eWbg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "612f97239e2cc474c13c9dafa0df378058c5ad8d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1681358109, + "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1705889935, + "narHash": "sha256-77KPBK5e0ACNzIgJDMuptTtEqKvHBxTO3ksqXHHVO+4=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "e36f66bb10b09f5189dc3b1706948eaeb9a1c555", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 000000000..09d7fb9d4 --- /dev/null +++ b/flake.nix @@ -0,0 +1,91 @@ +{ + description = "Build tauri desktop application"; + + inputs = { + nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; + flake-utils = { + url = "github:numtide/flake-utils"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + rust-overlay.url = "github:oxalica/rust-overlay"; + }; + + outputs = inputs: with inputs; flake-utils.lib.eachDefaultSystem (system: let + pkgs = import nixpkgs { + inherit system; + overlays = [ + rust-overlay.overlays.default + ]; + }; + lib = nixpkgs.lib; + + commonLibraries = with pkgs;[ + # Tauri dependencies + webkitgtk_4_1 + gtk3 + cairo + gdk-pixbuf + glib + dbus + openssl_3 + librsvg + libclang + libappindicator + + # GStreamer required for audio playback JS-side + gst_all_1.gstreamer + gst_all_1.gst-vaapi + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-ugly + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-base + ]; + + + packages = with pkgs; [ + # More tauri dependencies + curl + wget + pkg-config + libsoup_3 + clang + rustup + + # Frontend dependencies + nodejs + corepack + + # API dependencies / Frontend scripts + python3 + ]; + + in { + devShell = pkgs.mkShell { + buildInputs = commonLibraries ++ packages; + + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath commonLibraries; + + XDG_DATA_DIRS = let + base = pkgs.lib.concatMapStringsSep ":" (x: "${x}/share") [ + pkgs.gnome.adwaita-icon-theme + pkgs.shared-mime-info + ]; + + gsettings-schema = pkgs.lib.concatMapStringsSep ":" (x: "${x}/share/gsettings-schemas/${x.name}") [ + pkgs.glib + pkgs.gsettings-desktop-schemas + pkgs.gtk3 + ]; + + in "${base}:${gsettings-schema}:$XDG_DATA_DIRS"; + + GIO_MODULE_DIR = "${pkgs.glib-networking}/lib/gio/modules/"; + + + # Avoid white screen running with Nix + # https://github.com/tauri-apps/tauri/issues/4315#issuecomment-1207755694 + WEBKIT_DISABLE_COMPOSITING_MODE = 1; + }; + }); +} diff --git a/front/package.json b/front/package.json index 41ec1c14f..d9df6c420 100644 --- a/front/package.json +++ b/front/package.json @@ -21,6 +21,7 @@ "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", + "@tauri-apps/api": "1.5.3", "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", @@ -61,6 +62,7 @@ "@faker-js/faker": "8.4.1", "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "2.0.0", + "@tauri-apps/cli": "2.0.0-alpha.21", "@types/diff": "5.0.9", "@types/dompurify": "3.0.5", "@types/jquery": "3.5.29", diff --git a/front/src/App.vue b/front/src/App.vue index 37b9f48a7..4e4f27b53 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -14,7 +14,6 @@ const ChannelUploadModal = defineAsyncComponent(() => import('~/components/chann const PlaylistModal = defineAsyncComponent(() => import('~/components/playlists/PlaylistModal.vue')) const FilterModal = defineAsyncComponent(() => import('~/components/moderation/FilterModal.vue')) const ReportModal = defineAsyncComponent(() => import('~/components/moderation/ReportModal.vue')) -const SetInstanceModal = defineAsyncComponent(() => import('~/components/SetInstanceModal.vue')) const ServiceMessages = defineAsyncComponent(() => import('~/components/ServiceMessages.vue')) const ShortcutsModal = defineAsyncComponent(() => import('~/components/ShortcutsModal.vue')) const AudioPlayer = defineAsyncComponent(() => import('~/components/audio/Player.vue')) @@ -72,7 +71,6 @@ const [showShortcutsModal, toggleShortcutsModal] = useToggle(false) onKeyboardShortcut('h', () => toggleShortcutsModal()) const { width } = useWindowSize() -const showSetInstanceModal = ref(false) // Fetch user data on startup // NOTE: We're not checking if we're authenticated in the store, @@ -99,10 +97,8 @@ store.dispatch('auth/fetchUser') <sidebar :width="width" - @show:set-instance-modal="showSetInstanceModal = !showSetInstanceModal" @show:shortcuts-modal="toggleShortcutsModal" /> - <set-instance-modal v-model:show="showSetInstanceModal" /> <service-messages /> <transition name="queue"> <queue v-show="store.state.ui.queueFocused" /> diff --git a/front/src/components/SetInstanceModal.vue b/front/src/components/SetInstanceModal.vue deleted file mode 100644 index 43b1662e9..000000000 --- a/front/src/components/SetInstanceModal.vue +++ /dev/null @@ -1,160 +0,0 @@ -<script setup lang="ts"> -import { ref, computed, watch, nextTick } from 'vue' -import { useI18n } from 'vue-i18n' -import { useVModel } from '@vueuse/core' -import { useStore } from '~/store' -import { uniq } from 'lodash-es' - -import axios from 'axios' - -import SemanticModal from '~/components/semantic/Modal.vue' - -interface Events { - (e: 'update:show', show: boolean): void -} - -interface Props { - show: boolean -} - -const emit = defineEmits<Events>() -const props = defineProps<Props>() - -const show = useVModel(props, 'show', emit) - -const instanceUrl = ref('') - -const store = useStore() -const suggestedInstances = computed(() => { - const serverUrl = store.state.instance.frontSettings.defaultServerUrl - - return uniq([ - store.state.instance.instanceUrl, - ...store.state.instance.knownInstances, - serverUrl.endsWith('/') ? serverUrl : serverUrl + '/', - store.getters['instance/defaultInstance'] - ]) -}) - -watch(() => store.state.instance.instanceUrl, () => store.dispatch('instance/fetchSettings')) - -const { t } = useI18n() -const isError = ref(false) -const isLoading = ref(false) -const checkAndSwitch = async (url: string) => { - isError.value = false - isLoading.value = true - - try { - const instanceUrl = new URL(url.startsWith('https://') || url.startsWith('http://') ? url : `https://${url}`).origin - await axios.get(instanceUrl + '/api/v1/instance/nodeinfo/2.0/') - - show.value = false - store.commit('ui/addMessage', { - content: t('components.SetInstanceModal.message.newUrl', { url: instanceUrl }), - date: new Date() - }) - - await nextTick() - store.dispatch('instance/setUrl', instanceUrl) - } catch (error) { - isError.value = true - } - - isLoading.value = false -} -</script> - -<template> - <semantic-modal - v-model:show="show" - @update:show="isError = false" - > - <h3 class="header"> - {{ $t('components.SetInstanceModal.header.chooseInstance') }} - </h3> - <div class="scrolling content"> - <div - v-if="isError" - role="alert" - class="ui negative message" - > - <h4 class="header"> - {{ $t('components.SetInstanceModal.header.failure') }} - </h4> - <ul class="list"> - <li> - {{ $t('components.SetInstanceModal.help.serverDown') }} - </li> - <li> - {{ $t('components.SetInstanceModal.help.notFunkwhaleServer') }} - </li> - </ul> - </div> - <form - class="ui form" - @submit.prevent="checkAndSwitch(instanceUrl)" - > - <p - v-if="$store.state.instance.instanceUrl" - class="description" - > - <i18n-t keypath="components.SetInstanceModal.message.currentConnection"> - <a - :href="$store.state.instance.instanceUrl" - target="_blank" - > - {{ $store.getters['instance/domain'] }} - <i class="external icon" /> - </a> - </i18n-t> - {{ $t('', {url: $store.state.instance.instanceUrl, hostname: $store.getters['instance/domain']}) }} - </p> - <p v-else> - {{ $t('components.SetInstanceModal.help.selectPod') }} - </p> - <div class="field"> - <label for="instance-picker">{{ $t('components.SetInstanceModal.label.url') }}</label> - <div class="ui action input"> - <input - id="instance-picker" - v-model="instanceUrl" - type="text" - placeholder="https://funkwhale.server" - > - <button - type="submit" - :class="['ui', 'icon', {loading: isLoading}, 'button']" - > - {{ $t('components.SetInstanceModal.button.submit') }} - </button> - </div> - </div> - </form> - <div class="ui hidden divider" /> - <form - class="ui form" - @submit.prevent="" - > - <div class="field"> - <h4> - {{ $t('components.SetInstanceModal.header.suggestions') }} - </h4> - <button - v-for="(url, key) in suggestedInstances" - :key="key" - class="ui basic button" - @click="checkAndSwitch(url)" - > - {{ url }} - </button> - </div> - </form> - </div> - <div class="actions"> - <button class="ui basic cancel button"> - {{ $t('components.SetInstanceModal.button.cancel') }} - </button> - </div> - </semantic-modal> -</template> diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index a3cd9ca78..a598adf57 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -18,15 +18,10 @@ import Logo from '~/components/Logo.vue' import useThemeList from '~/composables/useThemeList' import useTheme from '~/composables/useTheme' -interface Events { - (e: 'show:set-instance-modal'): void -} - interface Props { width: number } -const emit = defineEmits<Events>() defineProps<Props>() const store = useStore() @@ -543,12 +538,12 @@ onMounted(() => { v-if="!isProduction" class="item" > - <a - role="button" - href="" + <router-link + to="/instance-chooser" class="link item" - @click.prevent="emit('show:set-instance-modal')" - >{{ $t('components.Sidebar.link.switchInstance') }}</a> + > + {{ $t('components.Sidebar.link.switchInstance') }} + </router-link> </div> </nav> </section> diff --git a/front/src/init/serviceWorker.ts b/front/src/init/serviceWorker.ts index d5f7195ed..23fdb14a0 100644 --- a/front/src/init/serviceWorker.ts +++ b/front/src/init/serviceWorker.ts @@ -9,6 +9,12 @@ const { t } = i18n.global const logger = useLogger() export const install: InitModule = ({ store }) => { + // NOTE: Return early if we're not running in a browser + if ('TAURI_PLATFORM' in import.meta.env) { + logger.info('Tauri detected, skipping service worker registration') + // return + } + const updateSW = registerSW({ onRegisterError (error) { const importStatementsSupported = navigator.userAgent.includes('Chrome') diff --git a/front/src/router/guards.ts b/front/src/router/guards.ts index 46804b98c..988cb5c51 100644 --- a/front/src/router/guards.ts +++ b/front/src/router/guards.ts @@ -3,6 +3,7 @@ import type { Permission } from '~/store/auth' import useLogger from '~/composables/useLogger' import store from '~/store' +import { TAURI_DEFAULT_INSTANCE_URL } from '~/store/instance' const logger = useLogger() @@ -17,7 +18,6 @@ export const hasPermissions = (permission: Permission) => (to: RouteLocationNorm export const requireLoggedIn = (fallbackLocation?: RouteLocationNamedRaw) => (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { if (store.state.auth.authenticated) return next() - logger.debug('!', to) return next(fallbackLocation ?? { name: 'login', query: { next: to.fullPath } }) } @@ -25,3 +25,14 @@ export const requireLoggedOut = (fallbackLocation: RouteLocationNamedRaw) => (to if (!store.state.auth.authenticated) return next() return next(fallbackLocation) } + +export const forceInstanceChooser = (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { + if (to.path === '/instance-chooser') return next() + + // Force instance chooser if unset by tauri + if (store.getters['instance/url'].href === TAURI_DEFAULT_INSTANCE_URL) { + return next(`/instance-chooser?next=${encodeURIComponent(to.fullPath)}`) + } + + return next() +} diff --git a/front/src/router/index.ts b/front/src/router/index.ts index 67927a799..ce71293fa 100644 --- a/front/src/router/index.ts +++ b/front/src/router/index.ts @@ -1,7 +1,8 @@ import { createRouter, createWebHistory } from 'vue-router' +import { forceInstanceChooser } from './guards' import routes from './routes' -export default createRouter({ +const router = createRouter({ history: createWebHistory(import.meta.env.VUE_APP_ROUTER_BASE_URL as string ?? '/'), linkActiveClass: 'active', routes, @@ -22,3 +23,9 @@ export default createRouter({ }) } }) + +router.beforeEach((to, from, next) => { + return forceInstanceChooser(to, from, next) +}) + +export default router diff --git a/front/src/router/routes/index.ts b/front/src/router/routes/index.ts index 7eead6a53..9aae990be 100644 --- a/front/src/router/routes/index.ts +++ b/front/src/router/routes/index.ts @@ -19,6 +19,11 @@ export default [ return next() } }, + { + path: '/instance-chooser', + name: 'instance-chooser', + component: () => import('~/views/ChooseInstance.vue'), + }, { path: '/index.html', redirect: to => { diff --git a/front/src/store/instance.ts b/front/src/store/instance.ts index 540d85e90..559b54865 100644 --- a/front/src/store/instance.ts +++ b/front/src/store/instance.ts @@ -122,16 +122,27 @@ interface Settings { const logger = useLogger() +// Use some arbitrary url that will trigger the instance chooser, this needs to be a valid url +export const TAURI_DEFAULT_INSTANCE_URL = 'tauri://force-instance-chooser/' + // We have several way to guess the API server url. By order of precedence: -// 1. use the url provided in settings.json, if any -// 2. use the url specified when building via VUE_APP_INSTANCE_URL -// 3. use the current url -let DEFAULT_INSTANCE_URL = `${location.origin}/` -try { - DEFAULT_INSTANCE_URL = new URL(import.meta.env.VUE_APP_INSTANCE_URL as string).href -} catch (e) { - logger.warn('Invalid VUE_APP_INSTANCE_URL, falling back to current url', e) -} +// 1. force instance chooser, if in tauri app +// 2. use the url provided in settings.json, if any +// 3. use the url specified when building via VUE_APP_INSTANCE_URL +// 4. use the current url +const DEFAULT_INSTANCE_URL = (() => { + if ('TAURI_PLATFORM' in import.meta.env) { + return TAURI_DEFAULT_INSTANCE_URL + } + + try { + return new URL(import.meta.env.VUE_APP_INSTANCE_URL as string).href + } catch (e) { + logger.warn('Invalid VUE_APP_INSTANCE_URL, falling back to current url', e) + } + + return `${location.origin}/` +})() const store: Module<State, RootState> = { namespaced: true, diff --git a/front/src/views/ChooseInstance.vue b/front/src/views/ChooseInstance.vue new file mode 100644 index 000000000..fdb11abfc --- /dev/null +++ b/front/src/views/ChooseInstance.vue @@ -0,0 +1,189 @@ +<script setup lang="ts"> +import { ref, computed, watch, nextTick } from 'vue' +import { useI18n } from 'vue-i18n' +import { useStore } from '~/store' +import { TAURI_DEFAULT_INSTANCE_URL } from '~/store/instance' +import { uniq } from 'lodash-es' +import { useRoute, useRouter } from 'vue-router' + +import axios from 'axios' + +const instanceUrl = ref('') + +const store = useStore() +const suggestedInstances = computed(() => { + const serverUrl = store.state.instance.frontSettings.defaultServerUrl + return uniq([ + store.state.instance.instanceUrl, + ...store.state.instance.knownInstances, + serverUrl.endsWith('/') ? serverUrl : serverUrl + '/', + store.getters['instance/defaultInstance'] + ]).filter(url => url !== TAURI_DEFAULT_INSTANCE_URL) +}) + +watch(() => store.state.instance.instanceUrl, () => store.dispatch('instance/fetchSettings')) + +const route = useRoute() +const router = useRouter() + +const { t } = useI18n() +const isError = ref(false) +const isLoading = ref(false) +const checkAndSwitch = async (url: string) => { + isError.value = false + isLoading.value = true + + try { + const instanceUrl = new URL(url.startsWith('https://') || url.startsWith('http://') ? url : `https://${url}`).origin + await axios.get(instanceUrl + '/api/v1/instance/nodeinfo/2.0/') + + store.commit('ui/addMessage', { + content: t('components.SetInstanceModal.message.newUrl', { url: instanceUrl }), + date: new Date() + }) + + await nextTick() + await store.dispatch('instance/setUrl', instanceUrl) + router.push(route.query.next as string || '/') + } catch (error) { + isError.value = true + } + + isLoading.value = false +} + +const isTauriInstance = computed(() => store.getters['instance/url'].href === TAURI_DEFAULT_INSTANCE_URL) +</script> + +<template> + <div class="instance-chooser"> + <img src="../assets/logo/logo-full-500.png" /> + + <div class="card"> + <h3 class="header"> + {{ t('components.SetInstanceModal.header.chooseInstance') }} + </h3> + + <div class="scrolling content"> + <div + v-if="isError" + role="alert" + class="ui negative message" + > + <h4 class="header"> + {{ t('components.SetInstanceModal.header.failure') }} + </h4> + <ul class="list"> + <li> + {{ t('components.SetInstanceModal.help.serverDown') }} + </li> + <li> + {{ t('components.SetInstanceModal.help.notFunkwhaleServer') }} + </li> + </ul> + </div> + + <form + class="ui form" + @submit.prevent="checkAndSwitch(instanceUrl)" + > + <p + v-if="store.state.instance.instanceUrl && !isTauriInstance" + class="description" + > + <i18n-t keypath="components.SetInstanceModal.message.currentConnection"> + <a + :href="store.state.instance.instanceUrl" + target="_blank" + > + {{ store.getters['instance/domain'] }} + <i class="external icon" /> + </a> + </i18n-t> + {{ t('', {url: store.state.instance.instanceUrl, hostname: store.getters['instance/domain']}) }} + </p> + <p v-else class="description"> + {{ t('components.SetInstanceModal.help.selectPod') }} + </p> + + <div class="field"> + <label for="instance-picker">{{ t('components.SetInstanceModal.label.url') }}</label> + <div class="ui action input"> + <input + id="instance-picker" + v-model="instanceUrl" + type="text" + placeholder="https://funkwhale.server" + > + <button + type="submit" + :class="['ui', 'icon', {loading: isLoading}, 'button']" + > + {{ t('components.SetInstanceModal.button.submit') }} + </button> + </div> + </div> + </form> + + <div class="ui hidden divider" /> + + <form + v-if="suggestedInstances.length > 0" + class="ui form" + @submit.prevent="" + > + <div class="field"> + <h4> + {{ t('components.SetInstanceModal.header.suggestions') }} + </h4> + <div class="h-scroll"> + <button + v-for="(url, key) in suggestedInstances" + :key="key" + class="ui basic button" + @click="checkAndSwitch(url)" + > + {{ url }} + </button> + </div> + </div> + </form> + </div> + </div> + </div> +</template> + +<style scoped lang="scss"> +.instance-chooser { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 99000; + + background: var(--main-background); + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + > .card { + margin-top: 2rem; + max-width: 30rem; + width: 100%; + background: #fff; + padding: 1rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); + + .h-scroll { + max-width: 100%; + overflow-x: auto; + display: flex; + padding: 0 6px 6px; + } + } +} +</style> diff --git a/front/tauri/.gitignore b/front/tauri/.gitignore new file mode 100644 index 000000000..aba21e242 --- /dev/null +++ b/front/tauri/.gitignore @@ -0,0 +1,3 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ diff --git a/front/tauri/Cargo.lock b/front/tauri/Cargo.lock new file mode 100644 index 000000000..7579cae65 --- /dev/null +++ b/front/tauri/Cargo.lock @@ -0,0 +1,4533 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +dependencies = [ + "concurrent-queue", + "event-listener 4.0.3", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock 3.3.0", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite 2.2.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.2.0", + "parking", + "polling 3.3.2", + "rustix 0.38.30", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.30", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.3.0", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.30", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" + +[[package]] +name = "async-trait" +version = "0.1.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "atk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel", + "async-lock 3.3.0", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.2.0", + "piper", + "tracing", +] + +[[package]] +name = "brotli" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.4.2", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "cargo_toml" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" +dependencies = [ + "serde", + "toml 0.8.8", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.48.5", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.48", +] + +[[package]] +name = "ctor" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +dependencies = [ + "quote", + "syn 2.0.48", +] + +[[package]] +name = "darling" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dtoa-short" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "embed-resource" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bde55e389bea6a966bd467ad1ad7da0ae14546a5bc794d16d1e55e7fca44881" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.8.8", + "vswhom", + "winreg 0.51.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enumflags2" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset 0.9.0", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funkwhale" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.4.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck", + "proc-macro-crate 2.0.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.1.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.10", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.10", + "pin-project-lite", + "socket2 0.5.5", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "infer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "treediff", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.4.2", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "muda" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e406691fa7749604bbc7964bde28a300572d52621bb84540f6907c0f8fe08737" +dependencies = [ + "cocoa", + "crossbeam-channel", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" + +[[package]] +name = "plist" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +dependencies = [ + "base64", + "indexmap 2.1.0", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6c3c3e617595665b8ea2ff95a86066be38fb121ff920a9c0eb282abcd1da5a" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.30", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.12", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom 0.2.12", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.4", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" + +[[package]] +name = "serde" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.195" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +dependencies = [ + "itoa 1.0.10", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.10", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58c3a1b3e418f61c25b2aeb43fc6c95eaa252b8cecdda67f401943e9e08d33f" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.1.0", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2068b437a31fc68f25dd7edc296b078f04b45145c199d8eed9866e45f1ff274" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" +dependencies = [ + "loom", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "swift-rs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +dependencies = [ + "base64", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.8", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75d4a64cfac8e487c61d778fe4ab8480f162451e8af7f247aafadcb3b2560852" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "png", + "raw-window-handle", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.52.0", + "windows-implement", + "windows-version", + "x11-dl", + "zbus", +] + +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "target-lexicon" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" + +[[package]] +name = "tauri" +version = "2.0.0-alpha.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9a02f880bf9fcf62b73ea1d7f399601fab7ccc740814f46c3508d38e289722" +dependencies = [ + "anyhow", + "bytes", + "cocoa", + "dirs-next", + "embed_plist", + "futures-util", + "getrandom 0.2.12", + "glob", + "gtk", + "heck", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc", + "percent-encoding", + "raw-window-handle", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "state", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows 0.52.0", +] + +[[package]] +name = "tauri-build" +version = "2.0.0-alpha.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b49822e368ea52ba1afdc4bc90c81f942d3cb2147b1b22d5e7a4f2b96050a5" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs-next", + "heck", + "json-patch", + "plist", + "semver", + "serde", + "serde_json", + "swift-rs", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.0.0-alpha.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231c790a0842fedb921210b2ee8120dbe0a9f1797be3499abbf52ab80bbb57f" +dependencies = [ + "base64", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "tauri-utils", + "thiserror", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.0.0-alpha.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712da03672a161265bd2e190f007431d8560b5071e68f4ec7b25e9c54fa1b3bb" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.48", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "1.0.0-alpha.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d5db66fb4913e3e64211737f4b7febad4d89e433f46cedee997be38ff45c51" +dependencies = [ + "gtk", + "http", + "jni", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "windows 0.52.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "1.0.0-alpha.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "379db5d8c05d0d47a2a86f6e758b2db9f62ba5c8703e6974356121974e170cae" +dependencies = [ + "cocoa", + "gtk", + "http", + "jni", + "percent-encoding", + "raw-window-handle", + "tao", + "tauri-runtime", + "tauri-utils", + "webkit2gtk", + "webview2-com", + "windows 0.52.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.0.0-alpha.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9740746f9a44cf7243f0ccaa724ecf09e4655fadd568da898057caad11df031c" +dependencies = [ + "brotli", + "ctor", + "dunce", + "glob", + "heck", + "html5ever", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + +[[package]] +name = "tempfile" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "redox_syscall", + "rustix 0.38.30", + "windows-sys 0.52.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +dependencies = [ + "deranged", + "itoa 1.0.10", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.5", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.21.0", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.1.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tray-icon" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad962d06d2bfd9b2ab4f665fc73b175523b834b1466a294520201c5845145f8" +dependencies = [ + "cocoa", + "core-graphics", + "crossbeam-channel", + "dirs-next", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "treediff" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" +dependencies = [ + "serde_json", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.0", + "tempfile", + "winapi", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +dependencies = [ + "getrandom 0.2.12", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" + +[[package]] +name = "wasm-streams" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ae9c7e420783826cf769d2c06ac9ba462f450eca5893bb8c6c6529a4e5dd33" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.52.0", + "windows-core", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "webview2-com-sys" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ad85fceee6c42fa3d61239eba5a11401bf38407a849ed5ea1b407df08cca72" +dependencies = [ + "thiserror", + "windows 0.52.0", + "windows-core", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af6abc2b9c56bd95887825a1ce56cde49a2a97c07e28db465d541f5098a2656c" +dependencies = [ + "cocoa", + "objc", + "raw-window-handle", + "windows-sys 0.52.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-implement", + "windows-interface", + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-implement" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "windows-interface" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows-version" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wry" +version = "0.35.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3016c47c9b6f7029a9da7cd48af8352327226bba0e955f3c92e2966651365a9" +dependencies = [ + "base64", + "block", + "cfg_aliases", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdkx11", + "gtk", + "html5ever", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "objc_id", + "once_cell", + "raw-window-handle", + "serde", + "serde_json", + "sha2", + "soup3", + "tao-macros", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.52.0", + "windows-implement", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xdg-home" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +dependencies = [ + "nix", + "winapi", +] + +[[package]] +name = "zbus" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "once_cell", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zvariant" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/front/tauri/Cargo.toml b/front/tauri/Cargo.toml new file mode 100644 index 000000000..3a379d88b --- /dev/null +++ b/front/tauri/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "funkwhale" +version = "0.1.0" +description = "A Tauri App" +authors = ["you"] +license = "" +repository = "" +default-run = "funkwhale" +edition = "2021" +rust-version = "1.60" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +name = "funkwhale_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2.0.0-alpha", features = [] } + +[dependencies] +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +tauri = { version = "2.0.0-alpha", features = [] } + +[features] +# this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. +# If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes. +# DO NOT REMOVE!! +custom-protocol = [ "tauri/custom-protocol" ] diff --git a/front/tauri/build.rs b/front/tauri/build.rs new file mode 100644 index 000000000..795b9b7c8 --- /dev/null +++ b/front/tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/front/tauri/favicon.png b/front/tauri/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9648a3744dada10424bf6b82bd70623d263e7b GIT binary patch literal 8599 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 literal 0 HcmV?d00001 diff --git a/front/tauri/favicon.svg b/front/tauri/favicon.svg new file mode 100644 index 000000000..39135c457 --- /dev/null +++ b/front/tauri/favicon.svg @@ -0,0 +1,3 @@ +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="32" xmlns="http://www.w3.org/2000/svg" height="32" id="screenshot-7b8093c9-7997-11ed-b471-13134daf88e2" viewBox="-0 0 32 32" style="-webkit-print-color-adjust: exact;" fill="none" version="1.1"><g xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" id="shape-7b8093c9-7997-11ed-b471-13134daf88e2" style="fill: rgb(0, 0, 0);" ry="0" rx="0" y="0px" version="1.1"><g id="shape-7b80e1e0-7997-11ed-b471-13134daf88e2"><style type="text/css" rx="0" ry="0" style="fill: rgb(0, 0, 0);">.st0{fill:#FFFFFF;} + .st1{fill:#009FE3;} + .st2{fill:#3C3C3B;}</style></g><g id="shape-7b80e1e1-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e1-7997-11ed-b471-13134daf88e2"><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)" style="fill: rgb(0, 159, 227); fill-opacity: 1;"/></g><g id="strokes-7b80e1e1-7997-11ed-b471-13134daf88e2" class="strokes"><g class="inner-stroke-shape" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)"><defs><clipPath id="inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"/></clipPath><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" id="stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" style="fill: none; stroke-width: 4; stroke: rgb(0, 0, 0); stroke-opacity: 0;"/></defs><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" clip-path="url('#inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0')"/></g></g></g><g id="shape-7b80e1e2-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e4-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e5-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e7-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e7-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,22.000C19.308,22.000,22.000,19.444,22.000,16.302C22.000,16.142,21.850,16.000,21.682,16.000L19.421,16.000C19.252,16.000,19.103,16.142,19.103,16.302C19.103,17.917,17.720,19.249,16.000,19.249C14.299,19.249,12.897,17.935,12.897,16.302C12.897,16.142,12.748,16.000,12.579,16.000L10.318,16.000C10.150,16.000,10.000,16.142,10.000,16.302C10.000,19.462,12.692,22.000,16.000,22.000ZL16.000,22.000Z" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g><g id="shape-7b80e1e8-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e8-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,28.000C22.607,28.000,28.000,22.750,28.000,16.319C28.000,16.150,27.846,16.000,27.673,16.000L25.342,16.000C25.169,16.000,25.014,16.150,25.014,16.319C25.014,21.175,20.970,25.112,15.981,25.112C10.992,25.112,6.947,21.175,6.947,16.319C6.947,16.150,6.793,16.000,6.620,16.000L4.327,16.000C4.154,16.000,4.000,16.150,4.000,16.319C3.961,22.750,9.355,28.000,16.000,28.000ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g><g id="shape-7b80e1e6-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e6-7997-11ed-b471-13134daf88e2"><path class="st2" rx="0" ry="0" d="M10.737,10.262C11.528,10.674,12.382,10.751,13.147,11.201C13.644,11.497,13.963,11.819,14.269,12.308C14.753,13.041,14.728,13.967,14.728,13.967L14.792,14.984C14.792,14.984,15.174,16.000,16.028,16.000C16.934,16.000,17.265,14.984,17.265,14.984L17.329,13.967C17.329,13.967,17.303,13.054,17.788,12.308C18.094,11.819,18.400,11.471,18.910,11.201C19.675,10.751,20.529,10.674,21.319,10.262C22.110,9.850,22.875,9.323,23.397,8.590C23.920,7.856,24.162,6.878,23.882,6.017C22.378,5.939,20.644,6.119,19.318,6.840C17.469,7.831,16.347,7.483,16.016,8.963L15.990,8.963C15.659,7.470,14.549,7.831,12.688,6.840C11.362,6.119,9.628,5.939,8.124,6.017C7.830,6.878,8.085,7.843,8.608,8.590C9.169,9.336,9.947,9.863,10.737,10.262ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g></g></g></svg> \ No newline at end of file diff --git a/front/tauri/icons/128x128.png b/front/tauri/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..94f2f2de5764fd8ebdfafa9d84c19249c61da828 GIT binary patch literal 12247 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 literal 0 HcmV?d00001 diff --git a/front/tauri/icons/128x128@2x.png b/front/tauri/icons/128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5822abd8e9504aae5f8d637994bbe9c50cabbb92 GIT binary patch literal 31626 zcmV)ZK&!urP)<h;3K|Lk000e1NJLTq00961009691^@s6Tym&p004VYNkl<Zc-rlK z2Y_5vx&QB$Y1?<RExiy*0wf{yE`oHP4^a`(hsv`&MSS|~{sl#SJ{zLg_1Q(R@ldK# zq_+@~Kzh%nY;UvEZ~1@UIp@yIE(vUsJF_#J`QT<}XJ%*4J?HDyL<J@gG{7+Fho-@G zHSrUg4lBhkI&|6l{L>{D0-ybB4N}n=NDfbjX-<dcw!%d{T&;%QQ3bek@ng4I{H|&A z)1}`vdLDIj)u>M!p=*d<i_>c{T1$+6mybb@HEl%x&X4JRuGS69-i1)@E|@hP_@94? zVbue#cB4971_D9)2)ZxVb?Gx*@zc&6Du-RF7+8Vg>@?AU8PLR@yN(9k)M2MJ*n-B> zquzVsTYwWTA+qe44&7*it2ffKP2$qDCM2U%FzeU`EIPLaPNo`GrV6?s>Ihu{b(#CP z0)iNG?_<cQ%i7148S^+n#2bempvxrUe<+HMmxmCp?W5=W>GeLMbo%KIz_I&L*R~tW z?ggIvzp=X#pug8>Ux+POj$jJJ#fT};@6Mrv8xsg-WeW;L@I>o6(HTp2Msh2qA(J8m zhr;ZPl<rF|1L_-y1&p-Awp!>tZFtkCTXFi*S%_jT$<AhaS2IaY`I9e$o{bUD7}z5j zi=p%P9L#F-nZfu#r~7k>7qGT+`sJiwT*>+h-&-$TJ?dv4J=22*?7-|}w<8npBrTu| zMxY15sxCzPGFW~;-McmFlf@MX5hJjqrr_8Idw&(!7n)YKpb)#Ny%J${;<dF*zYa^h z5c+ooFnwVFpLw_*bJ`YSuxlyI>P7U1B}fd-M<zj^<MHQFpXCZQTGt)HU~*?T_UCJz z^VsM1Mq#h^T<#|msN?ALiTW!)mwx5fgQT2P)or9-Rv?{RiN@BI=-9FjU%qqzyVj-9 zG|eJSCM5`dxL5woYwc+T4jxr2Tj1AD>Qdr^B|eGdOv>9^Dc%;G3tabGgEZr%$i$8# zwf<O=gp1J7HlOTwQspfoAUy<@#8yTUfHp~vhY6SW#uQ3MhD@LoF+`j0Glrq=jbsX~ zqW7#KtzadL@Jf8|+B8-_>ixCkf~*lZwj)dgp%GL}1Ygj$vIPgZeQehoK^>_PLp>?& z`Kj}Pt8OH8PtC<p=gF9J!f`n6f+L6@kgA`WLVwdr1W=C=l6IEmnG5n0bi*cQ;0k6k z`ix#p%9jF+)egMJ?C{fxaCNzQr4<;&5bCC|BXp3|{T}+gm$aTPy!gOcY<XcB8d{%6 zAku-~e-YTT$@{#Z_%~Ez6XS4b58b^hDis(f23KIez*D<f%G(x8BB`qeT7ZRQ&sWDx z3~ZZ))2^I}t3EoP*uhD#-IEZHF2Nw#?CgKjbt%C#Qsa$aMoN0ufIJVr^hvsVEVd;> zfJToUmk2l@n1fL9<x^;Ew-Kp%0fx2=AuPvj-`<3$@903&ob4E?wz1}K#8`V22GfCX zBt>Wk${eY{xS_%T#=TSfutDqF$y?tU!U-QXaLsocF(q>{wCL-Ra^HaD&=F#b1zEGr zZrXWLJ^wnC!F|Q$*kme^Pr+3$hwC>Wto@ywC=a72@Em@1{Q#c7)kbZ5inOcopH&53 zxmA@d7zeP_H^`H3Te^}kQp}j7jox@qE2bWPCPtzcqjCDF(5<Pos}Xu%NZ9gPWt$Hi zly=X)1Kr@{hy*NiHwJe-gX-FQv3uiV_|hdku(DB9L!Ff)A_x_2;5DIwnfu%s(!v8l zPR=3wKEaNtw7|%Be1+`$d558E^J!?9dK^x@{3z5l&caad9Ha)T;h0j$>msMe&fDjT zv>!j@YXoc>7{WB*Uv)CO!VNLhH*dqxzz#ff=Q@g@EJy3Sr_i~13x4}KZ@+^GMJ&<; z9AwgN#c8+?G_P#I81SThCdGERv@7SI05nY{`@V4={{1_rpsnF7#H_RE)dlF=DP!Sg zm_vPJ&kNmC&$}vc@ZjVwjWscflq5Ma08E*|XuJm1#^dN7d<;Lk{%OPpx1yi?Et{5k zIL>(m6|G<|P+<Vsofu;`GIDY3I-LmNKYtm)#cw+XyZhdT#K>C+iCTptk4*u?bdhu1 zRra$u;3ZUXvXCYmsH`FAdN(-_|A1-Dx8vU1SL2p<CFl%ObcP&_+4or=%4lEN0^S9V zQD<#@-V+N)zmDSeKdXY3coV`^SCjN#N@1s3vg;!Pc_vGYezJgfCT1W(k(DT71Iv+& z{}yKCFZkZSC$RdT{4SF;JXiP#EYb$tiZ*a)W3jOFLpn(a&QOsy{=2_Qs(!;l)K9$# zC%y4BLXx8~)O{pUaap({!+?xA6^UOu;AsSgQ1LlD8>*rRP3wAM?yK?aT~A?n&%KBb zuEozk<Kcafw1c!r&pw3x1BWI8i^80sj!cs8-^R>Sf##VMe-16g`)@e~?M<)8uD<gT z?QaoV6bQOR_!$wemW4DG!Y@s5#d&I)LyRCm&Oc2&Rnyds=~MoWuKq{x<BvRp{`4C3 zbpRbtL!4(I>{2AbITRVep@qnv+U|;2yfgw$GUng^KmZq<cQQtLK8X0pmEfEbGa&Qr zEB1Z4Le5XXIR#cm7k-;a_3fx_{UIKB@LBx$f;240-3xvkGMjYhAhnSC9HJv)w$d`J z$MNMG?p}za&b$us;Wv^jXeLAnR&4x92ss}?ir7Lw!gYVdn#XU!S1#Qu@-^5bFoRsT z;iwGHLt<MF4J;3lH$Rog)xMv5HL&=+=}2Y%4QIaf4ba_FFwhwxhY{QOUb<>U>Q5f< zv;j?2En0C-H;%*B9>)`RJU~vv-(%%Nop|)O{N8}VnGE5~q~920(%u<!dn2F`S2vI* zTfd>%#@SamXqeW9ORhTu7hV27G#~vw4D~EPDj7hqCPnDssrwb;pJdnoFDHZj1135D z;v*4c67#X(^hG$~#1<HhE}~t-IQG;i`gS{r4eR6^&{dtrq~4fGcvpLg^S=3`z~^tC zjqUc;=<N6)`HH5)FgQQoK_zMDPz0G+WLt&|{TjQ_KJ)vSZQO=0eQZ1a^zGNisYw8n zQv+bz-bJpy_N_No<ISJ@H*^ku1L@S|(A+7ie!t@2J9I&wy{>DrSAkhazJOEEJ#sFN zJ>P~N+<?`O%7%rq;&4*7DVtmjfQdR>%_@HYt#d70`yF7>Id8!!mwg;{t?xwNo(071 zgTfoEX%;H^`4wPMp=mO&Bb5ju9-D@`mc?kEx(L&cGH}LKYq52OgJ@q6;Tni^;z?u@ zOb!O%CG^-CO~iBSTW!4U3(dIfUGKq>Ctr_D>U@m!H6T)BsRA7hm3V#y6!t)Bf!t!v zLMTkWfZiqw7m{z_4fAp2VjV`!R&01?1hD}oe)bJ;W7kQ+2+E%UNZX9OyOt~$GYk_S z{$(rPaP<eVeccx^GCWfdy%FGc)Fvu~Ux9sKlE4j4_A<<jz^S3WY3T1d11FrHLG!$g zc;?RuQC%o-O|)?@`<pIr1|U8C5ViN50miof=kGonOV0f|2D;x(2N@)W08!FgQTHn_ ze$WNZu&HPS!W1z$8*`661`E&FNnyin$`=r#2$Nmz`2yw100Jb)t7<fI=$WF=+}Ur> z;EGSy<GAxbhT|^y5FN_v5FgU%fV`M~h4?G5KcH}hLWV3m(g~eRgTpap#saj?X~7w9 zeF=d`jC=#EQR)bWU6DLghEQG%KxT4r6HRjTrDPaq!5I$T{>3Bl`U|f|>(L*=aL?f) zfg>16672_2A^Zv)1jdPf&0q?N5fhoj3@kW(365V{gSt5#*uJ_4y&aA!KB919`S}IP zhd6R^SPd=BE)r3oVO|(F+_!{0wl`qU#)}ZDmZhGPyRl{kCI-Cz0~9TYX_z|yKJ<0n zgfCsP0y|z#dRPkC@D%032+BtT2!<h>KOle~e%;2cf2l{{<oBVj@oTV?CyBuumAHNd z3J1Bo0qzBvN*qoh=hx%3H#^w;!W#7K;Ep3fkzA(fWm8K~9t@zW9!SQxAH0os++ySW z_Z|s5_;IA`u0=XFTlSbYD{=h_6a!ph0=B3wblpZYO*;lHEv=Yy(N?rx)QwGlW#SJa zQg5pvuO$to%>Y>K=hj@Q7~Aq0TzWll%@>xUTl+6O|Kc?WxKoJmZD@vFvG*%bEUW}; z0wPpMQa;+-fEkA^#gfx%(R}=7xcxoY{2UX%Df$qWxF%4#48XJbWfMmSms|&Y=)1?E zclXUm_WUcFngX&#thk5CThvs6QUybdb7ujR$^<dEX9*h8^YHq&uEs!LCpJFkWE+r{ zaK1q45>6nbss4N>-uC|-Tz%vD80z~zd0I~vc9`_BRP6l<Oe9E?Q!)a^$-|I{oraSx z-b((c&3O4S4imZxmrL>nN|OOp)sd$)F4HsLdLv8!cOVe_0;2tkg`+Q5vtJ?p3QRO; z0#AkG&*lD-?TFMa!kptq5U5@uhMe-GqpCV@JbXz(X)yq4^E2^F0>9|}HF*0?Z>Q%z zkM3;?Xk)FsO|OLcDo`?*tMJzm$!7yyQ&Hcx2n$Y+BG$JFn_fr>;%D4;oswb#rNaPn zHox4Ui{9UW|M>pf5$*dXVgu6<sY%i6?C7hg{S_!hP(sPoC}f=`oNa|`pM$gB+Ks_3 zW&+79ZkLcxpmZ1jb4PE3-un4Ay#0&Ulgj@E;+VCn6?dhGrvl{wvZzSrq=b=-pMw)G zqtKzb2CE;7y#m)K7)pZyRMi<u?FX*>+*Dk8-N%WGUQb-KS`fdkdwuvTP=Rs)P2ep1 z1Tv{0B6TNV-r_Jq;nn0Aj0)msoG$^Nz{D~DY4dAD{4#g)!uL1g>Mwp2f$)dP=C2~P zpHnRL314RgDzN{cOP@d>MJ7NM8rqH{pMZ<#z;bL_mJqWiImcy!^8_Z2uyQuP^rBw) z{#tzC2W0aPe1Rl?govMOuOq0a{S_!*kYVg#IDyz;1de+GPQP*whPu`h6G$rDpHQE` z#4&(eY}CM8KBtq-e+@<kzD69eS`FT;*!&fkEa3SBOr&CG;G|2s2*+Q<>c^$#JAruu z6T<+i>Og8gCrLQC>PDAr{`Vpnx`8Briy(e!^H<dV3QQJIJ^_cv(S=Y|dmQE-&v^pR zi=m~CZ4ym5qb3*^35rW(+1&m(hx064{2}1#o8E|E@J4iPo2zVoUQ@;4SAod}>=SU6 zPoN3)?MGnY869LAtjEUZnfL<}Q9DpP1~A&@w*~Qk=zC{lu;*5a^&f#qZJJ)^)?O90 zzXFpLlusa%L9DNp$Y3eXzVamu^=((R14Z`<6psOL?>@=hf@JgCxate%V5IL>y6FWf z&R;3zt-v7yt|oi}t~&+sk>hdZzrKu+xdSWy$tCYj9<3A{io*c7S%+hpsBU&}$v13V z_`dT{qu)p#{}WZ5-<!@;bkNx<p?~-?U*$6RC)a%BT{>UtGc>I-PqfgWslDdQ@P3Xt z7k+Gx<2?E7WE<%Tx)sKG?mV1MwxOnG8rn|U0&V6tbUa5U@`x!WRuzE>6bEG^bvhEm z4s_D+zdteu?dEr}d&Om_ZnfwpjiRn)EO2Ue#+5(!H3v?V9ci!BQM577GegjGoXpL; zFsa5#6agvox79l;zC@LXo42`RHa7oxZ6BY`uL;htxX8qSN(&}NFw$jU+HrqExAjSU zux2Zq6w{1BG*j@<fLZv{qzz6C8{+(?&uc(x`6pp5I2*xwR&yp??GKnbY9ks#gb2>7 zAf!V`!^xX=9=`E&8Asw1pA?Up=OiyDzfRFp3$$|T6gP2@-6O|ioNkU>lnP)Px{MJE z?F~Yjdw*+WwF7ORd(8|wMTZp4@cFqDd8<;@4>b@1MbAfaZ4c4NXVI~CkZ49L#yrBp z5+C0{xJpAJ=3>EVA^g{GFGDc=16Y|B;(T1$S9k`r7hnXjZJr^b;q10BK7DL0PHzpO zKjlbuKJUG*c)y0Y<zQ#r#-4-&+i}IM^(Gx`j9M5bMB=|)Kb*lPV%m0ERV(wGbYwLH z{v4MMG+&5SAg4<<s3ex;aVj{iJspK^^l+FdkVKKvPIZ9ZB%RYfUtVb@3K92c|}J z%&0O@MU0(4XY5%rz4PBb*`3D!ycETwUCAsiOkj3CYr-Z)2zroCU59U7eHYd~l|rOi zLo)6bk_i-!00ZRD$fTM0gIIWR3h(>sQZ!Bde;65R5vO2GoIKQI?jeGNK&P|>aB52s zRrI(j@M<m*9dqkUq%2;wTzA59F_?CRG)WTn3=rWD5F?1v^L@k|w#O`N9Ja8Dn8d~* z3r^gU_iais6)+@vvL-P(22G8h;B_r0xihqPF725ZxWiOP1bleCiTOm_htr<Vt~N1+ zh`g5et&xbgkr+YPkXl<qP(#G@Gyr;ToEXh#&S(F0PYMZQ;F@gRF>yO0G!eZ8P3@n> z`+wAdpM3ghthtw+f@z{9QdQCg`R2kf08-It!8#%o*SzGM6gmE;qHf{4(7kpsg4H~U zHKR&<CuqB+YDGc<(+JrTgmgiQz_2>FFO^6abV~@94OozJ!w4DP_xJ3I*@6LVCI+yU z7{CV75PFC)bdeU(LE1znY3KA-b~I{v0&g-BzLN5Mdn|QrTk82{*uYF8_BN8<Ekx)? zkc3}A4B#-u0H#;JhOatrzbx8POEJ`ay_Fq=eCB-irdp6Tp$3|33YxG|0d#L&jG4z? zgHL>Y8}4!T;GRcF(xk}d(OLEM{hJHJ0D|P~OC*50THsfA0z1PW#GNl)jj2sGos6Mo z^i3QhLQ)y4<kKUDkSM}-G_+T>i3H+$P9{y7Z?Et_DRq?@#x(kDM&8#=4T;y&^v5su zW$;XI8jp3Q@j_pkOb1&aBO|WuIU*-%G=cZacI7?tURRMcpF$jU>69SOY9oo<9K>-` z0tgz~sK3eBN<fN1zS>^>u-=*Q<KU}=V}zWgi_e_T-cWY-gl{?11a}pR)REL!bv6EV zQ8(Ut=M9)QlNmscrpkf=keh~S1q0Cl{;>5jv>y2{s1H}uDcX7GHesME6M$7nMm}CG ztAQaydu_&%_h7GhmiJ^nVlpsdA5Y(ROk)7=oL7Ziqy;?QmBItNlk_u<fw(OKv!<@h z-$`H=c<Mgy1v5F`ceW1CYzyJdvm-d8HH7ITi9<@IH;vKMD#kxTS&XlSHrn{t!{%Bf zAkUt^lh>qAJk#~;L7+ZTgU!wx@$}XeL_>cAcf|H+s-zi!I4%0fMAX2PHXHA{c?O2f zkHFru2w|ZsmrjbWD;;^B{a6S>6A^<vA{J?2Iv=HmYC^y!Qg>&NhQP$Ij!cAy_oQ&o zt^_&;GV%{dN(EK_Q;sl{3p0@SDJ3<VRd!0Mt}}`8T{44-J}6ZDd8Fbug!EAa&rBkJ zzY3ucd7sZ`FPU^n?W`_nWe?FzjA-X0zgU5ve{2i-I@w8Ri!o$AuGc>XkQ>u&pm}~8 zZ~jyZ&U^cRV6f*5#77vLNsn<urL@z6unKtgS@ksk`y3U|rbE=}9juD7W9!(a08Szm z_}C^Bj}RkxdC<bv5eq5S3YbPH-o?Di^JJGAGsySk^PXmy=-H=2_jWkl*AlwF*R_Xm z$@B<j*BaRkNn5-hZZ@gP`;20MRhk+W?*P$CI)v7SGjP;ZAHc})*YU@%^`d{fNi=4Q zngXAgfPa~Q28lFRh$$D>+zMQJ%{$Ps?k2e8U)2NN;Es|2mQEI_{550)zVC=?)DaOf zVVVWj1G7Y;L1hvmn_IyC9rkpeNZ#o;ObugpjVX|`pRhCqO_~I}y>2eApwz&1Bx7Sc zJxC0ziL{%uNW1y)f*O4M=sKK944{GbIwf)?G!?qb?M1QNAH3fjff=T#%}+MO5KD3| zPrabRV1H2*x=CK*w1K`oC*gz(Hy}{I0?+@S^gu~k^XZHH0-cW1W_JxO(CWK_PV#*e zxD6;BtEA9XjTjY9w>>0b*->XGRlC>=&GMYQFJ_J4jWZ)SZ(0aDMr{0fM*_dv6vvK% zv=EP)sR_dIvI{3dBgmKd44ziQ)HR!={grd7aPjmo7B-luC*lg^iS@t)8r&kULw!G= zy>z^mq9))<`$W(X-V1BEm!ABaL>jsQ+n*)-qX7gX6hlkO{e9aF4LJGIPZ0MypS+r^ zu9RFCUzRu=h6)j4o<A)t;>~&q2v$dF1A<5lX`{B2gKR;4fSiW`9Mc>?3;o`mbP<i( zB5p3;?&ZE~g$rhR(MnT&k616q?$a`U-$2^bc|`F4MjF+7>AG}A7{}6@IlqFLm8a!+ zj=hOJe`!Xq=+6k|n#?%ly3$b^Z94O}oc|{pN{r0Hl<5xYnjgl?kIGI$!3cyu;2`1P zH2|jXbizbUa|UO>Q^)0>csqqG&P4Zip6HtwG%Fp*Y5?@0Ghrh}2wY2u%4WbsBB$r^ z=Jl~IB{SKW3Fx@EDvXPWz*dqLaAI>>gcCbr>?g3XGj7S80>up2Szu^;PnF+K49u$K zf`DnCgv8{F_N$G|l({vAV4%m6gYPu*=yQUNp`^VRlh-vZo1#16XRpi-P6Ot%x4n?= z#4l~{sLJ+!io$=>4u2iqM6?x+{s@o$#=%H0X$E@cU`>I8WB|(RZ;@)c^djKDZk~;u zJ@3W9?imQz@Zw6w?jOCYQVg+&dhKvV#Num%6PlVZc2^a_Xjww?$|aXHkwa}tP&~h8 zz!D+EM><njJCqTr$(&P=@(2~$K^0jG2I6HV(OLol&cFj|Oisx)aSqw^7mx<UM6W56 zgqdjC&SpTrYD|72H<-_y&pxAaFG@7VBKrq~sxs)_IvrJw|4uY^AELcm@z`%%NqZR_ z4Er(<dU^7!GZ^V<!?68!V)utrxT2)zqdPLeU!?GIPWa`s9P&)(h^*8=*Y-XQ<*0g2 zldZ<P=U0mq<P{V?WQOopQfv1NlX|F2<o2Qm<5h9Jl3S6er}FVzNYcNK9D1ix2=81X z{5iD}b*eadDsR&at+d-Yd04qC?ufHbskHRcn%6T1n3lLlfTkTGXl$hCXY_2BKvzu! zQ4SamoB@bgXb$PkX%pvOoyK|BE=F(1`-%9g1!pSZo_>7TT%5y|d(ZTwu{$o+XV)zO z1NF6#*U2F<JJza$a=i^912f5)c?>z--ZDEPQjnkOPT`TR6n1i60jDvCb&*f7FGk>{ zJEzGec1T4w$gaP1b{OZA>A~r_t@QVtw8PPg9CD7<P)a_LQQdn-%ob<Q$e@=x17KPb z(mqu!XzVSYT!zLe58$ESF`=auEgsMZA2<UDkOwWDbi@J{pEnI>o%2S#ym_W*@S$lF zR_QlhkdsHjb)lk)&$h$DRxRa{T`w8V<E;5P1q__k#zi!Iol6mfGf7&XMC$p|B<UU{ zMzCuzBQlZrh{htkNQkppeRt4Iar)!P)Zn~?OURkWQa>L!cF(rGsls=9iA()gY$Dw| z7i#g@vwD=pg_1^BqAABQ2~lSftzCki?JJ1^bV@1?a<kC`x`hLi(#&z}jI{b#-CuIS z2hqIneaOTks{L{4xAziivBX}^&f|={`9wIL!>b&+`{d^o7^?oA)ppUBfRwYTbWh9x zE+GldskSRfD;QCcgR%Mas)PaU<k)-9;nn!kado(yGzr!!xB}8vIS8H;O?K5OpDsv_ zmvcZDOa42yC9p1P!K?o+gDgu;6+*bkgl1vWi^F*FfoDYBv}2JepdXOC_rMrHFideY zl0P~r(l^|51eRX-VGQ>iO?HYm!mB*cLX)Ndd(x*@NvX-tS#C+>h9Ai7WXo&~EvGT? z?<~bnZwX;JMG-p5{$-};i3~3+wuHiVx1QX9e><!iO=MDdwG7^8mJ`8`1<_|-sVP5N zAH)A{j7!bAypC6e1&8Y~|3nQ(pZye`yls%Un}a}@vvBwOL-(Hnu>NSJgE;(D8z206 z5XYSPS-94}kU0>{YwlS#Aew_D98{5A%N1$t;Vy-ofP=@BT$Z7ukbfpQ@)p(yhzVq{ zhaw0;Q3XkE9J>D{bno9esR8Fs4T~%}W(Z!lqjE1$R6bv!1?(i%pBca=(gKWN$=m*W zza7WX31QpNbQnbl&VCqOn;Z;p4M8*P{bgzUXS&H^AI1d>Ei-@%&RdE^^l}VzRwEEf zp$z-^3n@r3Z7$7a#9&pIi6vcPSs@1kUh_;ov3N#mh@6i5Zj$g*$lOVj636%1Opo71 z&z;pSH6X5xWWq4D^3;UJLYf_Yx-^aWjF<PP#hI5O@iQ1C?Nb=+tU+@43S4;JA~er{ zph?54ZrTqV*{^qtR8LF#OoHM0*w+2;(A-u8t2j};EGPLe5^&ynFWG~?-W<m&Rf)%? zyOXIeN63@vBqOexTP3pfgnB??{@=;w=jTM-y(8~^G7!E%Sum~3n^{dxP(I^c@`do3 zmnj3Fo3ah)5#rE9dwS2cXp77RTRH3t*v}%N@e?hp_ad##HE`9<4&HL(xyTIM09Ol( zY^8Ft{r7<=F~W#0a;7e72%@b@7p<yvO`8<`Ir2N})`c{YtaE>73JwwbM;6rJ1acPI z4qnj{v7EsxqYjc_+%RO}8>>fz1CaMX(@Wm-|LVsnZomm3lQ<eDz3n+vx2(a6`(*Q7 zk5<P4<JSNTGizF+zHSz|htDAv8dhH<_Ox7glLetpx5v`&?v4b0wK;|^a+HNkEf*Ci z*PGi1%p&jp`Q-FGr8$I_urZ2gCIhG%AEEiMne#U~*E_bw1w-Issxr6m<a8~jJ<F}a z)T*;kQ#&1A!;l=Uz9x)M0}x?9i)@dOi-o5H$Di|dRJC3U%dS_Ge9L~SkJo{jE1EY& zZPAG1gegHGJ!D(($uamtL<)47Ll7b2;KUxz<8O)R*>?Hm4&GU@FNaHyS?&M+`Vn+R zZE=Hod4&C5`zS?NP-mx2BVs*!FtF!E^2c#A24lQo!SOKw?nh=@8X`3=Zu~27<Y^y8 z@9r}Y2y)z^tW|#xyxAWC!kS_76mLt~qJ1=Hz_BLa=B3t`IogN=<0Kv~JDx>xe`W&Q z;I!nbwhrPfxq%k@H16G*#7(P)vA#P^ZYu+-AaOE)H%HJyJlcYzPVL9hr{9GKf5{9$ zBbs%`Q!O|?6F}3YZIOxxk;+^~)Nl;6yhThB@N7n%2xCis1~<GojQa_JIMr2@v^tZc zM;}W_R*h#?n>e!06qS%{{!E6$%vbGK(iwhnRTLZOCn(IDDWkS(`*o!9P?sW2w8=Ee zv?^)#HQ}}2<i-7uJj2HOeiTOYv@ar^I8!tL(X>f9(9={?f`%zRzG5hYYLbpeH%Lvu zR-J9lNnj6n^YzO8PCP%2@c0|@G5d0ES~-koIp1Gtc9S5oyZ75?2UaT9Le7maj=A8k z*u5cxo^70$W51R&@YNXrBe@xrsfLH2=-|4~E<^&KLVU1Z#3JFAbiV(Af+%+<gmFmf z_i;b}ge~@YYQzwYJefhHCP9S2QTJNzrVUGW4qdXA7R$K!!`3+d=jAA#-IEerPPBlV zyi-?r(r}6-e*iU24LJUo`|#58E^J<=lQYl}s@<!=IMf737mWyyIB6>8p8jrP24_>~ zFPK*fJSoBRB6GG}_lS)rdo!YTgj;%Z4?%Mhga-@Nb+_0MP-;v+g>e78J%KOe+x%`> zhx^6}jI89^<<$IWGKvR(z7~5n4GAsXd36<F-vq2H;m&D?|Ndj(x?diRMD!hG4pb}8 z|D+}Uyls^YBS^y<N!j?>#u5DIbAwpfm&tY%vRssJLP?pQjm%?`oO(~p!IxG>@u?Sv zu${CvZmB*=ZT`K1u5z}kNn?KpIsX>Or#1bxxcj~}08P`f_QUzt2660BZ$)4K<*MA* zMhVyZ`wfPw9Lx~4Z;jb_t~V`IO&(0iNj1z5<CZcBChuUMk^rW6ZsK98AtGGAdDo5v z{`;jU{<<@Pz7ZMf3zUDXe}6y|H0ioJtV{!DEnH24`e|%kDa*OEeFr}GO~eN0N~%Fv za~7VDxhG$PWPCPq&c#Cp&qbP}E}OA(fy^%QDnCD%5s1jeG&8GA5k@oeCi+wufxqCX z^4tU^pi-4r4`guL)&#z_dIXQ{N{V)9W<Z9<C$Y`HcMypzj%?1mbg7Pk;azz4uFc{# zGfT^_fPFaeSij9k{ADL#<BYS3Bb*6URf$6ow>>pq_ys6#-k-GbHS#jwONjTGV{38g z^oU>pRbE5R%J^?z!Bp8M8P)rgi?_bBb_BO?jtQ&`sW9ImNBB9A>Zfiv=uVtNn!xi! zyAO$eor0G4-s)!W8i2`llEg7;rvRV*YZyz;eLse}7m!!+kYxb*;CO9?33}5G9wcw` zlN4^^>_Kjp$r4J03z2JyJQ=bGiwRywV_DMdig9WTFL7+281I)z<zG&|7+dx9vnvc& zx#e|>e03(~FYUvkv;T%=_hv*_VM)`k_@ljR05ZPsAY2{5%p=c0P5o>Pb?sM<@nlC% zHVHTmz=S>+v+#Ec5$vF!4-qrCY-SkeO%0KMK+paG52Tb0J8~niDlmFa9W_glyIitq z709zTpCbl)&(0(s?M#X3$|>%ErOO%)FAtysYO`4C*EG(?j0LA7T=NK`#5J|-WcE?8 zcLtyvve{tI4ii0F--x=#xhg6!={^7B1<xd4Mqq{vQFFeILWS#Suh$G^NIIoO^3Z|? zIqN=bjvjgKNvz2diaQW+^ClbV8b%R3!)|i8@{Gi_<Zt<BR|<dMokX0T<68dLYH)f8 zgARi>GL@W-?v6`{h93ua?bb~q;B<QIoA=HDth79VnG5QOgPcJp)xdlOhmhxgyuiqt zR`ca`)uETA)pMi?Fp~1*p{wRZMDP4YViXZW#;vnsu-!w?U*Iu5uSJ)~{n)-|O=*NY zt=mQ{+(Z7AUu=qFH;46D<Km<q+EaE0rYe-bFJN&(5do)>X!mqM!yRiALMzz&o5ujF z`CLSB!X+-=f9o3%irh{Pg(i9@=Trs{(M{cd3|GChM1~seGLORMS%0S!BUsuL6u*1@ z^lc}n!tzs-r5VR7w#ChxjLa&2UKtq=GvTSoPZ9HEY0vfhBbFn=t&^fJS#ftdO*j}N z?|&cJ|5xG1AN~iH-J^-t;`V4a>1YkWYx%_uKa=rkm^Jqdiv35BinE?OIf^KY0G@w9 z^i1cvTSDU1<Rjqu0}t&^p_!x@rxhR5XyTOSpeQ@e`U@c2ZVShk*Lk;$_d=GetG4Be z8G3iLcEA!HnD|;pW)n+&9@x>va~e3_s`{CEwHcMj%D6F*XgCG(;Z>on{S2bz)%4_U zF#wUB`+3QMIR@Yr#HW)w<{#_e>^IH8uALW>JrNR9N#Iu0|8YWo$k1T5HJ}TE9-z?S z0Nb#ZY`s%gV+hmWcwzuNUvDm5M^F@DT6Hea;%Nuv#t6KL#q9bBDGz=u?P3cNd1u1G zrr`{pBcI7jWZ!d04_t4d1_-ia&om9;4D_-sE3iL6w8}J_Nd<|9FTmNC--BfDZftr< zw)6979r-vV)dPNH;;VOCxcHK*@YJT;5DYRFJ0i=d0tW>i5qs^n1!A*k6BG_CXbRwp z*%7>Xc9jSx^4mDCK=iFIvr=ST)roQ~3Oh)5661TkD=kKsaipY|2Xm-C<|4@|FL$CM z=?@y@P*K~~kxscd?eMqbzI$%Rr!QrJZ{^YYC=<ZT6tJ*oPaF2&MB%BD+@f+GK0vl+ zz#X&eO1D}|cJIw=M)12W2^>ev;9qAkGl(D(ka2ErxJ4;z0*;E?hg8&KYt+K;x5e?7 z9SM^96r#3d&jn-~NvSNq3WoU!oW?IDJtt7?#&PKEet@1Ikof0jvx0IAAn!@U<0oJw zc|zVKh>H8AAg3g|t!a7cew^alTN5&;;AK*extHCA)5C%pa4E7UQG+GqDdd%8R9DEL z%Fln1)cfCTiHW8hYlyLRj#yIDQEI-S)?bnM1w0l_(Qn3Cik&--r{^9Nub8Ih^}Wy8 z^#(;@9a~mTE`I%6u;}bJBRUXNqrT(^R={^~^Db6}*$2zM8a5C5h-lUjA*~s)g-5)B zj)?sOqQ2cJooE3Qf5?>D$<|>T_wP*MhZ{!li;Zz??aPR9WSpbVz7Q{y#L2tw3KR^~ zC^5YWZRTdw^gfBr+c+J7a|MJmQ1{*kTlT{jx&O6I^C|RKtE&Fg8!Av}U^Q3-4IG(Q zU<7ppC|a<IB<Pn{MDg)ugLt7gEvUvQkrNSJcoY`xB0K-PYe#VHQ~kJeQ%q=|W|a;- zARBU|RpL&C=!*gpLpXhZ&+bNCc<zz-<)4A(7Wo>_^n}NcnLWF%MT8IBa8Dafy<!@A zcR`K$uD}ElR<_<<m(M&#@$vt7W&nTMmJm{RqH|%qehI9(tRPAMk>>{S(~ToYq#eN( z*wz;lj4KpBalo5jN5sCto{m56XhU2$|15f5FbK&2G?kgoX26W27NNGGMP&|EB!3Bj z7|zKBFGTUr_hj&i7l!cjjWLlrt82v%lS!N36<P?VIRAZD5+8ehko*-%#8NVTZ&rfF zr2=yNbu`(6T|<jV!<Q$+<D=m*fNY3Q3!#74A|ztXO8QqAKnZ|XB*QrcTxqziCyno{ zi;9lL41A=SB8pjCbrojp*dCQ?|0Cq(XBD4)7=kHH{ytpg0<vPQD%gx_eGz(ghQzah zKweufPXkED4LZTa(9KqrC{SSlB?6vFz*%(xas;j)wD9>Chwx&b%<*Q&V6j+$?aDS> zeH5|a(%gS`ri99Gs5WU8mA|AwCR(J@twh(0anv!=u1}>zl)z&E@@FPV9zgdv`aR6Q zp~3)44rIq6No6YrGPr3~6faY#P0TGQ0^v!gpN3?{#lw42B1{>J+d}29)aR5WXb1%@ zboYcYZQ5ciUlznW-@*e%bqWU(17PDaowP7#5pex4=Ay2p4I=~W52z?{B?_YD7#*8M z#y|JN<E}(J{@WYUP$)Xgcly0ZOy?`BhSAF@yrzaqs#pnwOVK=?M?ahG=nl<9yoR5( zrR3LjIcRYH@pZWH?I$2o8%8R|24^Mpw^Yv)UaBn-9*N!GY>wlvB#GH6D2B$mh51h5 z^rL@<$kBHvF`ktamEbi5%t<?RV{(8^9{&hM0ut#E?(I4T+Xq?07m)xx+nZ*vs~tT9 z$HTUQYP@ho{V(Y=h0MGo+xulAMDB;5$jBi3UR%E$BskgbB_M{Az#k|SsRgBsuqsA> zX#<=3><BdUAX;lk)wf#Z^Q-}Q4nQm2Mr!{O`aP)hxrzo*2H-j5ULt>hU;<<oa6=eB zY0{Ja{GdDTh=QK&<a{&~L#U8{$%7}%gB1Q-f_S1$KFbV%CyAbQ4e;(;ryxGKSabv8 z&Y~3uU|E336AI~AKV;!ITjJTA06(R&_zoVsMIX+6`Bo2RD&nEMK(+}>rwt4Y9fzM1 ztzUPIm?A9egHN~wIQ^(ONGAfKbEu|Q7(khT=ar`*yl~8M^_@6zAG?lv%!HMVyU5qj z5wiu;so4Ex0~`vp1#PDjQ*hc*GX>4lkun3Y(Y>w(otP(@2ne1~vH!~n9OV^Ek)6k( zxxR!WigWx@0z6*QPfUgzcvvZ0%toxxf0-eP7+gU#ekbPQzV%h~tSuEe-K>Fux<h`G z%Jyuf=Z_<DJfC29Le_BkL7@E6?D^*~<D=ZjBUy<Kmo+d_gwT$l!Bs&j1z6Lk(7!Et zC{xh@%Ir)b#+JEQ-k(OdB2qtM^Ikq^KZX9*4QFJ3KhdMFBLB+_wCstR!~hIUL;}3Y z70duy5AFRaU+|oC{9p_D00vTu0r)_q-X{!@`oEDr+fv@4O5#sBBMb?97ft+76$7D> zt|@tMsb~OY23e;(5o&i*ngD({0zEqKC8qN7fF%lkpjYhwGK9RzG(_u6^I5#nbe8_@ zhw$c<J!A=zh;s*d=?BORFjPk<*M|@0@#kI4SX4q#MFS{nXje3^7(g=GN>0ECcVSj< zsAvFX3_LZ*n?-oA2kDs+oCDC${rX+m2cSa#Wd~jpMqAK&a#%5dB^Ls-j%h+H#fD_X z#XAXrTZvbhdbZ)FACUGM^t+Y8rezIG<4o(b7BynY#pDnC>|bk;8m_}YCqxZE1<D>+ zU5}Hut}b9?XAm3+<o}tGH^!?X{>vD6$nU@&V9^_@apGI)SkpuE;G}ERpt=fgFH?}= zI!zdL>xM0Hd9w%o&;lxmF=;SGgT}=osamA_=9);3Oe4u(RmlLHJirA(Ngo;o%E3Jn zC3u{dFHVIDOgu2H+nE|<lJiU$ff+>j)fK&N@&FGF2^{3m0I%l&8-*NE=t|gG<G+F_ zWeu8g<Wv*wPbY)GokLI7<X)`6WH@3!!Kw`CoQx15+Mh<QVz(Kb9bAD)18mIsF*PXb z^K&b4|49Viu~yTe&R|?&;;*>>%N()<N^1J1s3k7%xDS+ey}#oI(q^Upf3gA7e1uyB zhf!ewlLs_ew%ea_{P-vV!x;zBOeIBRk^$3vh<gHZ8E|0CnOC5k!G~lWPorRmF*g9= z^kQLKRQdpvJ9wDE%|B{c1IT9p6)02i%62(TcOY(yszASBSKPsF5eBTthe-s&{IB=` zCL=g5Ug*o<AG=bb87#L8-=9%kqEEc*X0?E)dQw>4lg?%XR+<1$3gFWe^T7hBw0N8} zAc!-lV?}=k-(NR^?nI9A$4j><`jC*R3HASx-6=e@C&?8?LIJ4g0Fwq-`>$fcuQ&lG z5lH&iU=zXqeRmRf?ucVJ<sxW~|L?sdA|Cwt)t94KGh{)pGK4l!5&n|~Sn$^p18^%o zfJp`!*4;@9NRa3Lb1x3#58L8!9jP7I>dGf%e(b%*Re!ANZymPrg%!hiyekFQatk_g ztO64PEc}IB$oByhUBeUUrkWfn?bnx!NxFp5V-dYj>o?W<{Q^f#0X|S$TZ|ItNxihL zL2?M*v}zdK%j3EQ)!9vEY0lk!_&ZqQ2NVYI`0=#^7QVe^1b^5bN0P&T^xVPN{iV1^ z6OEse;kpy)PhsI7U<MGx1o{9RmQ0on*^0!?cAPojoz0z^7+P8I^%Iv#vxm)g{ph|S zL9Jas2*R^fC@@HxKnM8)zOi~(AlzxKA<V2c&_e#-aNhoKzCXA9T1V>sZCm2FduI~y zv?KOXKM2R4_}lzF0{q!0?|k*bp0UJFwRZO)*Pq4hJp3%aQ^os6ru}LSKi`ogOyOT9 z#1FvdS4|rcF|_QIvV#Sd{@lSPQH04Ae2%r`OXb$t2m5W_-E%je5t6)?PvcqGCy-W& zJg=J;!P)IWoG>MTg$)7Jm^wBLTjVrMV>vO3`*tPK$(?@`Z5_0Pa%C1_joKsi)IskP z?-3^_75a$zy99nRL-q+jU032J<LCrx01hq0Vg`^>44`OQfIuuqcCua46vVZMSL6Jt zA<@Z(H<|m~@9$R2>NWXS9We{P+!VtvH^=4J>|8@+|JKj8G9mQoBvG$lP=hnuLUMHW z0iOn`-<l@Y`b2jMx2_$*BP4~H!{`S&@mJXIsyz^|nF&!=49Y#@b+b8;wq-l9>>v4X z#!R8-%n0Mdv`1&qUhz8EM{!X5L?6z+iSN=LJxP0I(|70xX{PLL?R*wT)SGzs{Aye_ zBZ9^doevHUKbiPPi13-w{%m7Rj9K$&!6_~?5Db6`e*|0@P{e{Dwg=N08@1IY{*w^n zEpw_!9rf??+pB^?GVG!d*u6Uw$XF8b{gM`9{Un}i!-gRKE9OLe-Ji>6M+A~=9kH=( z#FEIUA9z8IKt9g-r2m*$V#E|<jBSqM47!%9ATp%N?;eEzMDvKBe$F8+<K4vI`JVg) zZ_if^WH6YrV3L}V_NiitZGKk!t0OwDCE~w^uGWaZ^06&aB^dChUKm1@G%h1#$N?|K zgA83UCcBs-{tyn%0v|W%GSfuZpyy2u3*sM6yS|w0jMp_m4M!2@K8qv{$FMUL2GdPV zPSW*r{X{Hhwo1OqHgw21@Eh>F>|AzRN9#YeIf#?!+C|8bAyrrB(B47ri$HEBaE|dS zLiMx*$qS_8^k5~Cm^Vis5+DpeneKt_g~2=HgN-P#meLs3#oi0Ef;9jivDQ0ZR{P&D zEi8ziN3Z)eFw+rdtm6VQ$2igwwF~ab$On(cEyVyd<^)Bp^zhnOG2$haSPsyV4u*iT zpY6&oU@qQBjxN1WJ*+j4VC83rlxpn<a(K`}NX{RbasA`Uw(>p~5;S;c05pellC#S2 zHxj^m?`FTSFi@qW5;Mz)PmA}=EX{KWPE3H6^~wxu0BIDN0eHa2mvZtq!!PU;VenB1 zr}@8l@tLO2`SE#Gy?G_RC_hkZ&Sz+TqdD)rR)7zdpXmzWQKJ}upZ2+jliaq=EsoN? zH(;7iGkazqKxQIVz_;#s>Up#M+GAH~04$ZY0<D`*k;i7Ujm{A8X<ClAUiQw<s4`?7 zewnr67SS9>MjsZCDK;gfkGi*m-Fq)nk@sGVF86s-k*A>s4S&b1d!OxnCi{8Z38Q~O z^CNsR!<YyLpd?(<_E`gfWNl11tiEXl(6GEi<E3+z9H%k(m2%)ow0g3MX4M$dTkg2f z%18~+yfxE<S>))gBVT~yV=*D`HSam^y<LDwMMByu4RX{y`ME!k!Y{k*;#&bs^HIhx zb^`iWJ33whQupk2uhsnie74#0G=M^o4>Otsd5hT=^^MUe#=;KL_J|>+U76<KnkvVG zQ;U7O1*Hw~p7Y-OZM$YeraDyY-~WB_aD~_J=5DLlz%<Vcz)b;J2Xpb(p|~~=v2Y!K zy`Uaa5dGw&j*p-3sfg@M+mo<GLI*V8=wHO;`2nlXGf9HVR9v?#bO2tXqjHgX?F$=B z@nptveKP_0gLuz*?}bCt=O!hN;xbicp5EnWlmW6loAa%l;+p{8R*~<|9p<$ZJqnP& z5>|sUj(>ZQML@_5J*cRFuNsE>Kt4Q9pG_2~WiG4EOPhkIAx`F3R$#$FlgQ0$=C#)a z3X@;Pd(M0B5s>R63vg9W^oXJRuR$seh8bck<4k0;RTlb5KAi+`P$A}n*$WW`u>Dk_ zkux#86l3_TMSCU&Bl;E!;tr;r?EUxwhEiL2>2H`8!ZcQ8=sU`xX@giJt(DizYxm4( z!>=@2^^^CU_ugZSeiD)>rlf_l^V0B{>3Ykwl>f`qXeNLUh$uF*xS~4&vp20a!E#4$ zj$gos*v1)LhV<C`S<S@~g41VL45ZPc8gRNkr=qeA`nvWI=GPi!6AADbIj@=5&iCN> zXySQ$%+jCtKJ9Z9KvPbDT5`h9q$rG`7VhiTdp-=u^;L7(Pq1kntO01f^h+`yw~K@- z!qyrhPM&uB)zLjdVJ8&Zp+-RSwP-|S&$6hab#EHZ*8u$a5|xN19<*2KIGYHmg=}fZ zr((LooTda`Bd?X$%xm|Ynts{;-X0I8dG9Upg}Uw^^OX?{NCrSr7%#e``OJM;@C{^5 zn4%^Fd0&)d+GjN00T~HE@m3%)f@{**ku#F<_vXE$VzrY?UxhEgaeb4Z`F<Ol?6_Sq zX+ilJGuCn#kE`ZZ;a_G(;3OSYT~~T6z*Nx+UL&uS*X*bNMLFihnX=P(<8X%dJ{Ljq z6@wgC;LI$-9mD5DGH;!X^NcrE0m7K$1g7~NI_&gT+R-Qql2f&hO~{L*caSSIYWZtJ zd%j!F1>j^F=H`WTbFL>z)G=ZUWbrF%=au4e+9*q+OJ{`9z)hSTS5_UC5D(CmQ;XNe zYvi@^ntAO?L-*%gH94l7B|n!i7XmygVCUtGDl^O2{NC;;F@PO}`?lj2+XtY&kZ7K0 zUq`rMJB(mVu+`$NK%6GqK|AA4Rs-<Wj)Qcf@gdflQb+VR5}>|_5QH0WuB1!%aU8b? zp7ZR)<{&<@pa!*^TW^(CNKmYW*2HV$HJ+%7e+(ZrqHHe?O^rVvvLt8mIRq%P7+sM9 zJiEpeIOO=~fAQAJ!&Y{1CZjR|imCuGtuxIN?du3O?SdYP!(}yAD~<-h|LD@u#gcP4 z<F6Mm+wz1qc1E=>HGl$T1M+>WBxe*~-k1CNRgB|l!u9E-j=ukhYMehUEV}&IE=ocR z(3K{~YvQ%>8hNd0%is0o7yUfdlNOh5z*qG-yIfmV>$OHS<*@V71aLhc21PMO?5t^8 zJQILuoN1kDo@igke_!HY)jwiroXWkAin0W+XB|IaE;#JB6HWOSSnw}u2%wQGgEFqL z(fzjN*hv(ngM4|=5=if<i@u(xTJ%&Rtj{f~!x?Qs*11LfgrQALbU;&Gt#p~?Bi6)g z<2B~5*{{9!J}yIhyn*b0CvIgKjBhn0P&p*zyqsB8sGzG{G$%48RrIK+$)1j-30hzE zk71^L9V_l7SHP+PREJn37cJDB^*9jn3@8TRm!~z~i(XG^DN7`#RM#zB&}BWTq>pu_ zL{gJ!_**>|P+9<MZpTdt;NwTv;*9BGSmZmgRSeZAA`|ewi@%%Kz-!?(@!EKeyw-rv z4M2HMGbFekr9Iw0V*5@t9zL?*IIKQ^BkBU9U-Jn(rq!EtvPe>-qmy68G|sfXV^t5+ zz9jf?T{o#c2^J`$-dyO_sIC;e8MZfi4*sRodT>OYi79kh1;`2%tcx^^%~1<~+MdW( zH~QJ#g+IyEbF~u}k(2E!OY3oBTL?jNR=M<@b`f(q#e4wzPX2CQ1FwbGB+FZKYxQl9 z)n4-6@*Zzw2O#aapSP^#%|d5<IkMi&ZoY3(45c-7li#Z&mg@piRQq2eG9#;-Xr9CW ziUGJzH~rg*i2&MzP6`EfCLCYY+5DKsQN+#pg5SLdkdscs<k96`egi4HpohxELF_v@ zi{k8eoHYe+r*K<<DUOIEAakAyB2oA=`LhGc=;!a`@8&h|T6j%?0y!nTz2v>+J?6dk zTg&o#05DfMiZlSeJioXf_~OX}J&W&lwnOj)qyqKP%?*h4sJkDat8XuRUNFdd(KYVf zXJZ%HblK*eK76~D_eF;jN9X2_UR>IL;*fd^bM*)Jq{Jj1(IvPrjfiB(jbLt_fzK?e z#Wzo=$Ej08$dI4IPRj~2?uEbvX&hkZY)@M8XM|M8WB%+6U8m4@eT%-6znj+p_*d++ zH^Sk)9HKqty%mxZ{+CB<d0%)W-4iD<WmJ1Kzq0^2^u1GcUM^xd$IV+q7hOUF@LF;9 z)76WK075Wsez}zn_M}#SH`-OxZWc6<N=HmU{9;PSm7nUPs7ND;I70UD&o{-fs4;*O zTY@6YX=?sg@^hn&lqH>-%-H7D)L=fv-|whP;Mv|3){{dr6}NNEK8;rnws2p$U87zT zJVuxniV8^OK8nJ7XSRiL#jG%1KQ%0diDYc4q6c;VC7IW9jl+qY_``e4d(3<7XIrzJ z&qza6gnUL-hQ|whBhdUP2Inzw?uh5daEojM5b}4D%GRC709^iM&uF<>SnxKNzj57A zMqEI|w=Wk}fr>bp2w4jdI<o8fo)g6M!3iqdarddt6qfa-1q0wD63?gMcMgK5Zf8^( z*Tpl#BK`I+WF!B2b6oWK=M-z!G+8=3_FhO{%lp8wyUuOHX}`D*iEAnrH3spX`Bk|3 zuqyE~GoXwuH4H;54DmDX^0FSEr9I`n<yZXd@T_iCoE?AesjVTjMa=B;g@E<M%sR<u zBvRB-G#`MQ<u*ZdBM{7L03;6W9(t{)K7ec(jdnRso3W_?nO)MyC{K|AHap40Q-Ya5 zo)CTHA!5jW+K^e3hCcMp9Z7N`1@QW5A@PFc6fRVkwfS9H{rHwS5u8WgyOs9zx!w$( z>`vo_zBFlB*68k{+L&g2`JE{UG3VBpIDSeHr?<-P#B*y5(PY(wK!KAGM47+xY239v ziQjEWz^jPzn_yUzVofI!(r{jT7_)1PEdKa~8@iGNLuqL$a=1tf8pZVhdW_yAbKeXN z@-51VK;a|f2xAvq?h(KR9EMx$<V3Cs*h!|qjA~hc;aB;)hqAM)O<Y9bs%1nBF|uO~ zQX~EJ)O&U51}**{yOJW0`~)H(CdxwZq)?Sr#T|DNno1tBsiejVCPemnKgF9lbhe3@ z0(;WAGO~vvFS`>`ec;kv?m%qnvV5A&2_}N3kW`1K<aPG-G>&3~9r<{;9rs^$B=Gc} zWVWcw?*SUwHsA)g0S}5c;5;P7@UeoCotE6jjOQ41C7mJ%{~@#P0zq;Pg@N0?yA^kR zJ5JA<QUh3a4>0T4J(yKP96$>aJ0vq%D@v~tL4<U$eT1aTNo{QnhY{owQlAb$G+&_4 zYE@Nr-(IUB7IO>cDc7Wz4u2<v{mYIx-gS7jh^=x1i%<cjrlIhO@6}dzGZSt;@s6Zj z)qrL13?QHw0MAv(hy2eh2H~^m!i<bHwO?<E<6+uMuP>tCNmimkz9VsPAu-H(HB$X& zjllHjW<8UWdtb0=#-+?KwBm|b*D-|J8;A_x$v<|WdmB9tlLlahT)g-z+KFA=_|%=N zkVzbmOiU+HR+JtzUTu9hA>>QM9bZo>7-y3E<$&=Hn5W)ye3u7?bcre~|3_ZSsl>!q ziI_S_<^J)87%`nN=GGd*4^e22>V@h&o17(%=g<><?af@9t7#<J7i)p+!o5jAe6jTN z1_o)!O~@?{rsm8GmX^1y9l=i0TmoSu8~yMTg#Axi#w@~%H_nV?zuWMUSvv}u84q71 z2GEtTi_HMY-p~v>RGTF03uv4wBYxx<%2iUEVRi(rfSeN`|EL%T?s^Qsrp?J@=L9%D zZjZ;vIh=Iy^ay5=itAWzLF{rjx8>q~Zdx&njYF33m=`lyCr7w4F~?K^0WCk*BG2~s zo)?Zc^*3G!v6z|0yhrR%-9UTB#J?qKDLg3*xrn_WT$o2Vaq*0>Fxhxd{7i}Umd@3Y z&-J7cCk7DkahBnJpk<m&ffdB@y1eIgQVkRXFuP%otfJpj!uwLJ(qKq0vqc&Jb9`@V zitDSFSJsd-19;=Ch;RrJrx8-E5Xfz-@zp6Z1#a6K$6aK@@{m%a0M&xyLUQ$!`H!PQ zqwF)tzdYO88S^*A#8A&!#u<focO-Dfwm6v|#HfAt`o989sU03k;bKPpjGrBhkkcl1 zkmf1uf2YWWT$<)co7yBByKxn&>U-4l!~is1MqG@>LDaObgdVWqa!5{dinl(Ao!tpX zII6^%_!w8#RYez<>vD?c(G39+*Dh2;CU1N_G&z?0SDPghU<RP;1<OZz?S0O>bZzvN z|5~xZGgEkf*jaW5F-<m~Qt84K%XnUSi_mQWIcv{oEzE3OSEf*iM5Y(|G7z^^>`A~J z;|x`kBPyE4eYd@YEiZCN#grz1)U8YmjsTlen~<>vWg~aDXt*E~X=HzZf9y_)PARN1 zy9FrrV7PEv7$=iM(6XfATL^CK6(eyh{bf@7ezGx!7kcC<Xh!mK?e$+6DuFm}-kaqV zy8Pa{7&dgJM6H3Q%8mVoT<Wh&_z=Pyrpk0?*DXvLGmotQ$L^%86;W;8iw1T^M@=Iz z+|z~czPkh4RuNYsr;1<zw#6f3ftUUWeDj1jhB{ZHwvBU2gD4W3I!a{n=I|zoYA?X| zVh?fN^r070IPik$A*mJ=xZl3#Vg4tD20!r30AB3NWbe(bFoEo3Vg}xu_dh*=W!)*Z z*M!rr5L+Z$$4jKBr;y)SZ9%k?S*Xy#-(oR!16#-`d>`QekE+-7qTBxgx-sqnxPrW? z8MX0Z+oeKkgyb3Qd6^rnu^G^<Dj|x-09ZBVY&FjK+8QlPQjixfj}Sqg)EvSz3j07E zMxmI1^lHn;jMyK2eh`m$rlrJ#lx~M2Bk<C+nbq@N@SgDA2;ztI3l(ZxM97q@8R^00 z<P$okF_^^>KhNEZ%5XI1<pB%vq|Ey(ateU-b~_gN_^cHOR*mwiO4M{zOP<CV8R+&) zaMHc%rJ}7f>vbg~>7~I822)Np%gyf&I}FE?AK=Ql5#jN6>GliRXp@~v0adE^_|62r zv}!oZ1Olq7jdKVwfvkBX(u^hXe`)2g*c;v>-m7#0H^fjCjddgl-afAihfxF|WBaW7 ztI#W(dz^g6msjpu<fC?lmLI9^Mbq?EY7&@q3})$0Is%DRrPDC#SHKAOD#fgLjY{OA zgt&Z?q`>1{Y2k|SyIqo(7&MDw^KY45g()FJC7Bc!ylOc%z5YSo?f>`U5SEcofOF~% zJ(tKc*+Dp*RC7<h_vgCP_}ua#{9}7u>`i{PV<CV)UqqUC>JmBsj-L_`o`1U_JtO7g zXUPZj3|-m!|Kc7rNjK7PqJuryxo#C{_^Mt#UjuLjH!$FuwEMF+z&1LeaXNrjw5589 zKWqv-?QNLaM87k?yh<{T2ym)wq{<Kyr_fBm^^lv8@3GDl{{5+b+)f_vSjJW1CwEet z1AOa(5$ZD3$05?UKGuiF$?wCi@<Q4C`5<VJw9JK#0bF}{6>0-A@4t|VPK?ic`qMJW zsMw62rGN8uTEw4s<EBfx5bb9vXu`_mF#uZ)28vR6@JDY3Rz0*D_0!{IHx#!+kUAin z!hvgsGKi+#Y*L1w3otc#3S8XsiDPQ8xGBJs8pHt=g9*qefQyxc7&ono;+8d0^w2$r z)g;}dYNtI}K(sd(skO3JVSCiZm+8Lw+TNd$=73%t)mY4Kpf#M<5>%Og(nj|)#aZ!q zp=rKIs{gi_GP_aKZq8mpjR7+dCBolC8oqqR2xMP2vhOuR<P9T=>)Qy-m{)^i&zpz% z;2ha{wcuH-Sr9fq?O=#@aDJUBs?toAMdxRK`HU>#7ezDO2^-H2TDei>1-?^(AVld7 zea`@Shu4nC=|bF#o|BXUs(wG?V@H~aB7D9D;p?CqVuE;{oV?#(AH&Z##n4Gi-XJE- zdyy$H$1}Vr5S{Tk6a~8Os2a>yZNL2Puq^sOsBv^Z*~qmFDU3L7vF(3v<cJ0{{2aEd z{4<u{zcKe}z6l^sD{sVY^UN0zF<y`vD|;&zFYKzBeR7XIt^$jxp&@?9O%3H;<gnmd z=TzZpas~;Eb&E4}!}AGn-N2r>jc>mc#eYzk@Bs=HanTMFf6$ans@xz~>MbQ9Gw;5n zgFCk;@IDIj{b+4ejD+KR=PgecnE10{KW<z?a_(L8t8os+{@DlNxG2~F(EgN*zms{> zNle}-P=}~jU53hYKuvfVs;ZXdHY8`->w9_9M0;Bors6q~DI?vPMH^n`sL8A&L=^Y$ zOk&Hht(ND13n(uwcD^bEnO$d!7_DEk?8bvAwpVgR7Y`S?_Nf6}|J<Oc8uJ#)%)%;@ zaG~qU+y^U9XMCERx}RJ&g#V;49~XRiU^~S@Dv{SlhZ-hs^xng3aHh)o(+i+liFRy+ zL+saiurn#TMKeO_#rFO)!HB~k`k9L7F?DJeavi|3OEE?-UG59EzvN)ZuENY?7r`{A zQGmW^<-y*;a85vizHth9hPk0<Lr4<{qZNQ#GlEQw7(z{ba8HuLf(|0&l(LF+Vj^Cw z%kzqoFJJ@Nj4S#rkvrZ@D)Ka*QKw5aRgP1af2C;?le#;0|Co`o+G{K3&FU|&_i6I* ze{bCgezq}&hso*LFZ$qVLK=F1TMP(r!w*{A-1-2%y0jh(8gpSkzdir9%Jk$p5nm;( zPA~vfXjRneKiAdC_IJpHe;#-L`gi!_*LR`6Ta2{LUx_h>YjB(j=-Exwmvr&w4>ur{ zIT@*V0J>?t;{Am}DwP??$;jKdS738M_yaPI|LU4od{Q0MFoy_jGdZZ%@!WY!wuma$ zp^1VF&V?tvnN`ycl9W&MWrS}aZppUaT*_M$l#M$KHCf3)o`a?c48b!9z3<gktee-w z7pwLx<?rrD;+JIS|9VRTJLvZeWPHDvIS;%S%+%B5;B6-%@?S^S;4;$mG^JIU1=1?{ zZ0;fL^?PLMFcKSuE@pb=N-WrE1L2w^+S-1NpM3feta~;pXqzRgyDtWiJ!NuF%{n@Y z!%ro`*WXCbR8d5b*>_PG03`j3wGI&jnBNe<Da}D4T?)}-k2MZP<OrP{H`&}k{)cUY zgtDeq^o~uAYK0XDXhH*diM+`7kR8dh@EBj)BeJ&uyGBAPYT#)H`BlDJ0oJA_p$SIi zeJ?-942qdE_jLHb9h~SC#ZT77Ncv@D)Wg)W!(fZGpB|ntlVq>|dylBb4U6g&@%!J> z%p-ixs(+rMJ6r&^Rzx_oVoQI%bDKz&X*G)eo}01q!Ijv(QQojKI>Fx93-NQ=U=X|3 z+gS1U7?xgi37Th2LwuMU=@qSDOm3PiQ0EqEZG`woQ|#8`vVJmeui%6w88^z{J=#cL z%Aq+RSHV|I$Vo{lJ+{+&9_vcuzFjFSC&c2o^;~YBmZuW&YT5pFl!-8^>QEa^9Qz{j z?BhHsFB=5AYTqTZ^gg7E_UM7#DN(@ltu-U~!?uLTdxtmoUdw$>F~RgS4dRp^SXhHk z9aAgj{dxE1w<#$SX_QCphwDf1zhw5f6Jw*11BMt+L#vLS9qaMcH+>81o{AAohhST; z$gwx~zI#ELK+v&v7^&zJbmH^qV;kXLtG@9OfKV@WEbB_)0gBaMG26ec!LMKfki3u2 z>>Y<yi56v_T|OimdZGaH{>Hf`UG<F=+7Q{$D=1{iv++2b_UkRO-TASNa_|XvKCTPx z{dl~4<NHawuS_@+Ntl`jHAs0cx}N-8o_VlQw6)G)C8_qT?sHprZgd$-+SyuYL#^9& zi@$Fo<fuBao;f{&ch0NE3<@W6rz2DIzxvZNh1lP=GtSLe)3CVdN0nKW<fd0FhpZdA z_dz5_o)9!FX<DWPkBb2~wsgI>%(Boj=Y9kuucI&_F@T_|W-cB9i0vhv?Rip#SpuHf z7R>geH+<Ft_~y6)1t+UqMWI1<;QTMyvD`9>r{AWXV#jfErLb&A>T13rHy2q=OmQ_i zEH%=Mm;o#x2iIY>hL~x`LoJ$Uy)~vT!f?$LZmZ@dsGMIxpJBcV5BKH`#E1d%$Tn7& zxfg#w+4h}rM=&4ulW?Ne%VZ|G3FS=-u+K>o8iMV*MYef!AP7+<Ak1wr#mqu6uG}pg z;%2-ahV-4k-kiXy0ZZ(MJuzV$hiFwNn%#z$xpxT~?%BaKz1Ir6y)yt=DyShD%b;WZ z)8tI(AP%w^MP}yNFd0Pxc#y)6HpFl=9qN>@?C5J0z=^{HF4!qJqn0P})(Um@5wgM4 zwmSi~Tn<F#oXS^cAAwGL;Em>9MJB;2E;eDdO~}Y|5IN7io%W4{kQh|Lz5^DD)2d{r z->SUf8oZBjdT|$N7`utcSqtFNRotP81R6R?vM;C4@AHOPhyo@}`U0wqthpd78z(ka zDKrjR$TZr6ch9fF`O`x}VDOm+3zXpDed<oqg8sNIjxO$DNKWNU5nI5GrfOn%BSTw> zcApS5EbPI(AB?uoTjD{X+(eK+>_2|^b-e!HK7qcSHrWzIa|C)2RG!=xI@DjB-iQmP zMGETmcHCS7&RUXmAAV*K50P^#Sil<fgTwlK?1vyySzx4j!a2(<4R5S>UR+xGRb0hn zJcc73dyZl}w%1QA+xi$2AA=l&$eyE;`}%RF-xrtE$qv&_;Zj+>*^u1Qp1T;`ye5h` zX-<J);j<g}f(4ow**s-N91s8I>-gaZZW8Igq9G{ky@@Y#pPyxr&A@-m*TBw42n|l5 z7tZwV8$~n)grp*@WvARXS4V{eTS5|!)m5_q`TM%Em6-`Fpa{fG$JL4F{y`2dP+VRx zq!LNi_cQ|eSj*b^9QXDleA0185B~6s^HE^~ZFEmCuWwl1V^;C=ZTg9@@Aq|HqR30d z;ICUyBUFDTepmH7Gz*};d85nNq+$)}N96pAXH<8q;^T+M<5(|z1_K>W<>mgn*~jB! z06^X>DIGHwJ%q;4ap<wn6kaJ&K3u#T6bHy*G2&tWBro{GGg4U66qFJUh4D;!>NR^q zPHPL{v&YtonEdl(d#CApg8{uHm_RODJNJZi9%?xTq3NUOdT*MO7vCSnC)}L2<ETcW zr3N0)Vn0oYm@|(r`v@@rHWQf`d9Z0Ah~Lu^c@WIzA(^(`%Z+SInGazVA2n3!ugz6% zj}py30Vwit_U(~*6)CRe7(j1#8UuKajJ_SJnVNwjwGGeTaE~(oZ%0xjnlQKbyI;Uq z<np|`ubUdiH%@545yW_SF~uk!K5$GxR-Lz032s_loJq*_@X0Y3KbOjTpO=2@eNL%n zA$xuzcGCXq%m}`GTs=8K4MF^2Ln~PHCcobQmlX5o@Fy2GLDwe20V>P+CAZ&!emqSy zn?#nr_g&V%Z+qSwj?SXwg}=JwNlfFU%Q%x_3B?(?i-L_JngQO1vu(>sIw3mn%P7R- zN$Nrs@OX|tc6jjwog-=kc$u7GUBvZy4Tn-EpHhPS?#6sb*O27@CNb!ih_19CtzcD@ z*>Yb;I$(daK8DR?0<bnPK}wQMjt&a>gklJUe~KS}=pOv}%Of&@h1IxyuS$PS?3WXQ z3=HqtiS{XfAbVm!#1l2G==Yj6QRx64Csq9STjPTJi?CoJyU1ut%FqG7VR{%}KcOD4 zn-xKdJms?ObD7rbmMNHOyV={%g!r+A)%fD#I<!^k;ynE9>%TWhDQ76#`M0he5q&JV z@#}<HNGy!4B$xCLVQ$MG5FgnCZUkxso!8=m<M8N<*iHbEI-6ooQPee`gi!Sn6l*k# zSs;|R8o_C~ytF4}i;h0r*u!zO!f65CcPmZf@Ol$-YD{b+2C$v%K6bpCs&=6Q1;lem z;<r@HvAx#B`wp+hCy%Mc)M`Tv5@l~kA&H-9KdhQnKDaxDufH5cl<*)FGA7DL!V=yj z>2D($e+bV%`@dLzUj}_U0wN{Yef34XHUnU+4@H2U4j0Sr2i|aP8m+UB!EkR2X#+)# z26(_u7Vcx(Ll;l5J*qw+GT;hPEtrpd`6a}M)yeVMYseJXPVsZc^R8EzK*9FktCe7! zoI(5lz9VYzC9?UsKq}_h`~}{B&m4S)++zRzQWWdR92BX}6PF|6Ad}S5GV^8h?Y<eG zf87T3Y$J|T#Sy&MT#`P{yOxgjU{wmiDSsuuz)Q?rirF(TAG}`s3DWiW5bot}vOrNX zue?b*eA=9W_w&=6a3wbrQCRB5*(=~LWV<#K_dT*Ph#MEz<1-YQ5oWF$`&LNsBBi{H z4vP76FUJRWC1F{PaFb1-FUVDkdl{j?--z%z-p3>V?D72Z_>y`=1(7S;=WbqZqqe>k zGmbbGnRG*5vyh^qy`hSQGQ|10aEG(rj%|{~LOg!SEJ9l^MutWTH!UGXz?#TT(gga* zB;d^mi&Ril;2^;i?Zagv7{lAh+4l)j`7fOj7V{k#H7&RB=dA|%h%^88nh|`LY=28t zrA<(VsH8czeQWD>V&&g&!>>NK4Bguy`gb_axMDZPxW6k9BJWBH=-vVxb8Z(-IkO$T zy(h}N0IjGIf$ZIDToS8e&rpWU0SCtu18AiXkf|5e5#%Mq*{Yote<$agbMAedEBA;I zSZUe3pm_C@lM7S}ec@l>tBvgaYslXJ*wM8(qdg=_!xNTF2R92$fN51j!N>T!EpdEn zbrgMsb0MCtHE|(QTQvP}G8$&i_&uI~>gTxk)?twcz_e<QZ@A9>rS(b`+r)y`51?&P z9jy49vKc2i+9)bG3R}3Z-X3zsoYfXWjgr2FcFv0+3H`${^eU1@ClC`@Lh30e3~i$I zh>5$Ztg&1hdrlO1IsKe)HIM9lCj6Vo-e+dZg<vuiSEMe^O3HHu=5@~wQW)A2#Gjft zz28GBnFTWvx*4mVdJ-=`V0t7m-sG6^GXU=cnc!F4=c2#E!bz7-AtUTaGK5SO7Mze4 zmMj6-6xd0Tfm%Wsu86A(%BC5`h|qCfy{2l+o5>sehG}6;C$BVD%MB%^XVM#WRj~^8 z4c;g%4y)QqgSz^#DiL<&5nkHp%;cg_8HbnI1mSr9r<M<klwWTV6L^*mNfrZvU>aud zkNElZci`@C^a|Q^-TfLav3~@c%L~wvOs>P6)*sN5ok+*oHR}IBzj5z|#GGLwHZI2a z`>tdbQHnuya@dH>7-aK<{Q~bgtQtQ&rBO7asOM5*jubF55#|;{a+MP>F^3dIGvTL* zbDu#r{*O*;5-HfMS!v3wD@LfzJ5T<}Wxnk6`{~9Qh5eE;6l`b{>)&BoW14fdE<uB7 zqD7`jrp^6SH4m(^PviyE+lb8W#Eki~C`@<^k|Pn?nW8le8MPe9A`rTJ#K{cUm2xnZ zi0~+K&M{s&YE^|?n5O0Y0!d{OaD$G86ryaRwWMhwgQTUz1tXA1q!+(gWXXUh?Y;96 z5}#lJg;xJ{b``E$P>Z+Bji8xSZDy=##XO5)O4%yUpCb%IgiE)qjo}xYVsdW8#Gjc% z4yFL=TVfQIyA4l0`b#`_myQ0NJniE(<NgQF07U9r#6izi;ECV4Sa`-3G|ya&bYdQ1 zb<v%H*<Dd8I1d!rLF(G(gd+xka{8{JX3rM`dBoruUFIY(zHoHlOmbSC(h?HA^L7$K zji{1h*HN=#4n=jqRrl}8W+!3Nl8$c)ilm-T98)J+wWmZ^ddVowB0EtGMf^O#<j3n{ z=#JX2sD_*%U?SIv_#el*C%=d<UDS)d4p-3RJ}UlR4Gv5L@WO)JIOK^t`p`0aDi)l6 z9Foy0(O7>1Q(_!7eR3Ct<5rTh<|I-ddHRp#qNr`Oy_m6QtG199a5^FQDa|3lAh_Fc zG9|gSA=+q9ezQQ=@}#~*Wq~G(N$P+4*g6s0=V*#IPTgzPTFiYBb3=(Lcr4u=+Y<Ql zs$uLNwxI{LiS+m*OH+=ep`pDWkKXnh-2BeFMBO*jvEv-jlm+v^mcohgVV7(Vhz5kA z;BPQBG6#M32gL5lu;77xwhy}`>h)<~c-H)XEgQr)$%(X-5Q|eqgL-j2@}io~kz=sg zH*nsx5N6jJxNK$^D@ap$v@3;2J5vy?cNp`Dc?H#+Jg*UFxq|1c6PcTwqn~l)04n-@ zR)a}<5yokx868E^ej#aVjjEram1`|nH1IS?Q_Ko<@#pPvLHwOjTZl<f6*{qJ!C^m> z7N-%d-63esQbSfeT08(a@a{e`(Li+3LRIY`j0P7qP3My%q8hn*o)aR}1Q+KXc#xHY zgY?8PgkYR6uB*9##j4-&h`{zH;}VuNM|9C>gj=0+v|t8lDD~W0i!i>Qv;sRNOSt9G z5}8ZjmVu?<<wxX8c@E{-<eX(}X{|A^h_s;dW<+r1+$y}2Jp6B%9>OeoK0<#ahoWlP zzb`iNd$Sf;@_+5+C^q$G#MEM*T{ywL5FDX#>w>I0u=d4o;^{xHz}A<7kP(3c)=dtg zy_d%_gDy6|=whHdhKoMP8o`OkB*^<_6m5{mz7ADPoh7OI62))3Nu}eFP&Gk`V8!-U zdN~6OtP#j6Moo+;=dj@gbg{pHnNys1SC`dgww-J94WRV7K%Q;Si;d9!2kE{RkVE$B zdDXanK@C21WDQOvM$jbMW_i5?rKT_;g_Vl<(}b}+8S4MNIE=MjX@shcZ0*Mc16Q0G zWcSC>&~^)c_@R68)SWRwd+x!_ls`B%U4E|^y?~mQ-Kf)liKu%i?96du+ORwEEo3Z} zv&(}id7r*_a)T%vWfLJd0d}|N{m%OS6r<wKz5hlM@y)X%qRlp!JKxojz(02;Ro09A z15?X2LCNp#<reuKM#tnek&vF9^`{myl_dMWP&n^RbWdD2!JUb#O)b}^LYp8vF%P^H zUtaSQWHNqi*$~!otUoMqq$Dgbj)Ahe@3<RKXWT}##&iDI>z_H;1s=SF7Tkx_lfK;! zc6Scq`147hZC-@o-bNS!3!^*DO$ab|=XBByWY29O;^JQVGir?NXswBwv6q{xCx7Q; zp$HKO4<|W-)_4Lr$Ih4<#`GFfw6<cOVKhb>AFI@kbj7%elGt_)>Y6ecG(nVJ%QP?C zsOMeUm`fjX2{l|b6E!t0JNiq^ZB*TVU7r8J6Lxt$^f*kC{zwXYa?gZ!9bO}<^)4k} z2Rrs^N!s&0@OmsKCsij%;LBmFkPbf<62IS)z~@QwuVLcny);UqmV?!7TWHj+bGFk# zeG5PO^dorY&!n!zr4#-jIe<U=AB>RKEg`C9@wOZ4amJNDL3RCG2}2#xkZyv(le(7b zZ2K>Bs_@C9YjJv8P_|HXa<%>wc+xU;*p+?xgL$lZH$@DdCwr7zly4Zeuq$SX!6kfk z5%CSPb1kDfVQ5OiYJ1^qqaNq|lCMIJ=`T1+#gP7H;VG*o)qV;oc`X#DpF)J+PJRvU zk#Jb8iNz%C7dHj6-^Wh947YJtwfYm?KZSiUAyw1Qjb`uMk-)dtM6r&Yu@p8grKYcf z$Teccv7z5l#O-~!{U){$brJSUCw!p|e;^PtkV(mst@nNBDqMd3r?GR(A_|`J*GyQN z@YtJ`!y+A=Oy2naIldmJk}Vo4aO>y;VFq5WeW><R`D}C~?O-j1I9Cs4@M6E5%)^s} zcT*(6QTDXuwexnznhWkIx<($KU<aj^$2)YW#+TXl;u_iQnwT*#r#672$$xQ7gPcJi zT5;vwfG6d%8b=B2tGBm;Khi(laT(`l;_oKL8lw9u8MR+J{&b=G&zQFicYgPO@RN`H zS<xCfPg1_v*Z!GcPIl@b#VKokk1DcJtn{s92FRY;axlS!;sGx}aCSoCXNlXt`^kQM z?f3@KOp+xo7xkDW5RcC%KrizwpF44}6B8YmKfh^~l&-wHT%6LKkOMxrFp4kM5I6ye z6YV&YjR%169`K~@q_|%Q4?Ne?b2=_hAP$S)fqL4f=|mLMs!Y*}o#!*wm|B)81eDnk z*b8enN<h-T0!39MhRcXKz4t4tqU7<9W00pC1xv{07nSZRMKY6)B7$3qrv3~syWR0m zJ@M~|q-Tn#M>jBariC|ut`--(_dn6S^9!V^kO5eoB$FUq3cD**Jmr2qoa|F>Bh9({ zJR;my>S`(V`Fn*HuHjY7j2Ul6$Rvo_lHk1oAKb%UN@h3feb<#^(F-@qR0R2$bUIPu z%vbPLM1|vw_LOHCSBdPOAbh&#h-w<JtS2pMM(*C3679VBW=*4n+Ma8A5~+BY)O-u= z({IB4Ke+{e{O>6CbeN*i2e;z$sril1v$aIA5PK}csB25&1K*#96EFG=MFn1uXg@di zF9}n?V*)~Ql7u{rm;m>azhZV3j%<*a&LyYCsyaIuhTwQAz4~1^>y!h}x9`iU^lo;t zuH-*j)`3`x(MiwA8c;qFW>oCy{|3eQ@1_U~R2niv2{mtVh<<d`PGMTQ56ka+4}S2W zP7HO0iGGrz&fmw*SN_N8d6y$KBz^{5@>V9X@XRhW&p3)anbV*fCDS#}tM=j%PQ9cL zKhcvB^X=J*)fP6C2fQ>3b+RUc$}KSRy!4)L&vA173!S}O_LysL?{VGSJO)kW<C`kV z;Q0kgnfRIR#gt<DWjO8P9tx>`?D;`FMIlyEjHP<`m)IFQGS@%y9M(PkWqjpLYmtmP zf~L|*-<MjLL>*fMS#&X5@QFJ%qGfgy7M{KY@o1IU^%82I>8jR3j0o$<srJzBl;|aJ zY-2E+!6(#~GD+0WcjE0WythABHcW`}t5@RCo}n6fY#g%iRg(H&ekn>36kFU>3HE02 zX8UPqZ0pBkzyAepe&?@AdzM<WZ8?QlabeVP4o?P@xzAoqt@g*LkNgVhn5G8R+b9w6 zy1a^93(gf7$l!(*!}!FqLA*dQVYUr9R-CZiN{_!12d{w#lZ<HLMa2J`O>umbr2enS z+dniSTUHn)VT6tWrU|AErjh!pUjjrkUUeVSQh}1{3YV(uW@`mPFsepSKX(`A95J69 zf`=iK;pPPyOkk?;Si})M=h+!V4zK>Gg=e{&54p|*ghg|zO;O)35{jJi(g+R(@N9iu zH4x<}#SS{dUu=xwmNg@IdQVFB^$Q!h*5aiEnwBANe?a)pnrHkSFTeaXJo1|z*tseM zX%ZC7P$?h*W@`l;?0C_@u2o%Fa={j|WzHeJyHRvA)x1%ar2*cId-e<P&((byJl>NM zVYm6UrdTLX2P#$Hz@ZAl)>m2_&j(mfD*w$y_+MEyj9&8Va2-Easb`#$JU8iCWyuq) z+Jd3J>+!?)EXRs_Orjm@U~~On3kolRrRrj!cc+6D5BB1;H(Qu8{b)pc8;IjgSObw) zU2=B6HAKlQ_$N7ymXSHY8E;3{$qcu&oon`4Q3fUkywD~mFtHiemvHcd^)X?>Js{e` zNhgM=N-W*mu#ribXr9@D;oe*DrAzO|=H(V-Z+`~`o^??i6`bppIeanHV`1|PYfwF9 zD%uZQ3dag4Enq@giM<+#5TLH?%9MjmBM#OKTUgnjK|MJIxKpj6ik{`9;7aG;Vt_Xd zm<d0qMsW|2l)r6D4BuEC#ho2VY#qo5j518Elv}Pz3Bn%#NVSDk5C0aw_{6ucX<2*} z%@i1l!vOe3LRE$s;?7fsPq}a#&OW^!9lMvn2;>K?ONxX%-vGB6V^xJG0xu)8U?)kM zq^c%t7jp=-Y{Lj|UO|Ny_zRAkE8JqIEbsXUh4vorOyk#E;-YEiGdoiv0m|f(Z?54l z-LdAbOy(goI7#$AfA(+j;&Zp)?(ggpuQIKq6Gcf&Dqc0FtP>EScWCK#h~pN7>!#CQ zoGZ8>L}Z{OoPwiIN~YKfjetx5RyY6Ak-$TpNxX4p1lJu^Bhqp?MK+*T@0O;mS=L~B z1x~DS5vFt{Y!TPz;hbB^Vatx0K*SJ<QI=OkQM%xYao(Elpr-B-4B}fzCf9<S>u`y$ zS5s32C?3J(<_b7?@~=QoUl&flauqW1Q;|uut3jhB9dgckkTuyHaszpq840&UZBZaI zvqo;G<L1&zE84(;gGg9XKMjScgJh0z$DS{&9L6sxw8ym%-X@p0t)D|9Cj4|#CvWpg zOrQ2a{P4r8@cSG1CY}B5>wmCNT#2ix997o|V&ii*hI+ej;>8phs9TJo?x|$=q}7^A znr4K@nGueQYm#yb&<kW5Jlm5NUTAJ{B{~o3Q1j|#_uu?R8Wq?(czOHmV-*n>UGDeG zWY_<Ca~$7UJAyxLPl$esnWU4=<1Z79i&cL@l7S#vW-mvm=2Q6bN1nppzR#}(WmoOu z-bwLQZq|>h>e=%dz^3Q9)_Du&E{>t0Z82hlEh0x#(@QcskUK?Hl*4K#`3JblZZ{$5 zixeqfX3$AeDVmX)Xj~>M(r5MDz=?{VVDw%>NqW(sLs$72v}fFzcV)lSvVKd%|JyAI zEZ?2NVA2*2KHhs*E2%vGR{>4V@)I8a*{hL?e+7TN<!|`&*ZIW&(L~0N`u_ceiLtqP z$Y>zsh(U&H9;bL`cm)=mHUiB#hc+rCd;)URSV_}}*Th4nI}qOzGYZMV*`37w<ecIe zf!qSCmJC=!<<he%%gn&*ntG^%=vbtryrHK5a9Q?_5gT`rNB`Svqxjys5xhj&Ror#6 z`|Q;-l*t~lYHvsnX0Q)N^{4TFH~#^*-xv_DF)gHG6SA<0bGqeH8(m@oz{tR6ocXps zBx7fhZWn|ZATBZCE#t<2!uiOkF%knW4O;jMsjJILU9}xeG{I~L>Dl*tbq0r;M&LC& zaooI$OLg-+fb%;<@SMB<$L(=!j9Ph>BPAcx-#chpN=W`da0HEQ|B0Vo|0mq_O*?xl z6WBX*V!iHyBZlZyZG+;UNep&v!ikqy<P$i79#@l3fU`L~|8IGmwJvMx893^hVjlr{ ztXGq#`tk0xNGR$d6}FDlS8fmPNj_KQ6UZt&EsOKz>@&#kY~*z(66Lu@&bH^Goo9P9 zMC=LtXnhQ~ZH?ohJt^#<kZYQ|m}tmW?v)`pg7{-YVKmQ*!VG;4Kl#WnaQ}~4*Efaa zcO4Yd={FW8KJ3P3KvkVa9MUBwkf4)Zjk!xgXlP$b&XR~a{gU<x><#fnZ2{Y<oK{R{ z+#j>Bg*1WZ`qNlHY@vgE1-oL7h+B&$O7y;<vVA?`$oCm|pIfTk!Lw_0M|<N<buV7I zvas#xo;MJIKi88H{rH&pZ`+!{(-dCaNfJNFsy^3Vn7VYfmXE5R15w=L8Y;^#j>O3K zao4xMgS&1X60cX)k(wBv@Y^blxH}U+_c`Nf7^@$TQ$Y76EI6IH<4KG|$|q1VCB)+e zPt6xiN!g<vlq21_@4yS4DdF6Do|pn_1blPcjw>5NRDJS2X25oGDc9e7-G_Azqt?v# z&olnG@eVunwvSkNfP5r8Z|@dT_3x#S-g?rG5{|U*byI$br!ADJpTrdoKj|Fe{{7z~ z;=dJt_)@QUm2o{4FNyv`rGraevwIIN`amoG;|JGZpz}uBEH(#H^m?dd)_ZX1k(U>t zWqb1R{J=#`K`d@G#bDFLjX}(*Ge-U0sD>S0a50Z5XnEUtAP2rLg7cQ^zTy^SE<UeP z*GGRZYd)Mh%^|y&h{#vb&vnBY45uB@qcH7tEJc|%9oRQ6Cn?S!MzAV|rq+++hab8f z_x*TqpSV7eOD&~+Qyeqb@${k(G~wM}e;b(rpGMcVnW(N$i}`3}WDe|W(>;^c_DT?y zs$hl<v=Sp|CLzHLVQR#{yjoMt3E+yvxwZ6q#CT0A-rL}iQC)%aq-%aBag6B<Jl09K zFW{*<yGhJ%B=cqyN%@UK8Id5>ljQd0HoECZIcFcru7{HJUS(woOx^VZ*ygt=oE=2# zyq$DMU%}5m_B$f}sCbnnzm;}Mh4?*OEIp_qu@@f}iFdg2a|SNG?mgrf{5bmd96?4k zginA~tVtj<bj?$rrQ<JSyQ6z~5d^CZET{{Jc4f=}rbbLO5})L*z3fcnP$QcUwE<nE zB=hfL2*+zQ4;=?Oi)C=(4L3w#f5nK!KONC<G)9kEnh%m{&oc_R8!>zBH_^3?7yuG7 zQ3q-okS00^dp-Eva#r!jg3Rsb^j?dCR}C}PBRTRd+<WWKaQjVingZMW@!^tbgj3oK zfPtd}oG-wrbLHo3y!lgCAU^U<xb_@1&9Ur!0^>c9T%UgVjO~?#J9(m94GiF{LuLqV zq%Cmk?&(!JrjdrgjDeks+}W3lmU5SzK;*UlW=LAH;}K^prW_fK;8?u;DPQYP@!SD& zT$1U!liQ8cwTlRxo2STJU3C<?T(~z?XzUz<Nt*lM%8uB=0kQ$%rcdHeU%Lx`_yX@R z$N8n7t3>gwL@8m6opkXBfa`wndi3u3Hj;@&2uAE|uYp4W^4;v-?^=%7bWL^xHniLz zkFhiSM*p5GUv`y0A@_K+o5CAa?u|OP)Z<a@b;dd$v~2CpWCxp68{(7+6A^M=w@&*2 zZvEg>xaWua#^q8Xvyxm@{>HIuIFn)`w{Y=)0Ppzj*)XloqI>Q62sLo4aZ90E*(41e z$RTNC!hdoOo1(u_eZnE17!^CrgHfZu@>>4pf7#eC&tJqC2Z5=6&u12sSkmWjjLcB7 zGA5Gb-<y8aKWI0|=Ks$}arY1S4IJmU$>w)UmG~J-UwX<s0Y}shY+Od@9o&wYCv3yC zIn@+spNe#%MuZ7<gL@243ctYKz#VhtXAlZMf;SkH(~jvf)lVZJFO#oe?h52RHu4^e z_vQVa_jx*BhWs8azx_ByTPBBq#CL_GkDJ*rzSTANp=tKr7)*Qv_uTxr%Iyyl&Sofj zRq{7e9_n+hc0j}0M}mmV*ovu3pF;1;LDV$PBTTJ@oiRi_>JWr{rm(NR|6?yJ@3O~n zWy6m+WC(p<z+HR{(WzHA_MmIauVA-*5%>RmHE#bz5Ypzi%Ypdi&6LfyXZ1`CHO(%0 zR7veRtQI%ke+C-cK9BA#rwUEM$<81w>ri0@N)9CNV+TuYSf?=G(-`Rb625rhli0Oo z7*(~vNUwBzl(5Y|7Rt+kCcLbqd8I~7iUv3s?oDIE^INd+logn9jD@Y+7Ler?7CE@k z%c_{D0ws-jgiCG!$)t|n;StO`=6|tk%~x^Dd!E3S<w?Rt3Z2AF+0@1@8{%guKMy*4 z{&mwqxQ1h{26{UvF139(PFS)W=N)UoZmh>}tesB86z?mcDMS@0J8(p}*-i(9k9o$d z6*#^9SJ<-pTe$U88?gFeeh+#7>)2OilV70hZm>K<Xv_qxlq-4$M5;C7#v$lihH%Xl z|HQMK_8@9cLqo%CWYT&zSGK|kDzG0ICUJ$!G98U@%*8<TG1xu-gHvmNgs)yZf`8s0 zqUUWfvWsK<Zb_u}?>Ce`L3m@yBOw=cWQPqz1Gw&2({SFE@5lCaA0yXxh*UEftDVH5 z!V35bmcS`?EL-UmW*>Dk9=zkn_}(?U(O8?oa1=<SG(X35PZUg!BpOZ+PLZ^a#p%#U z6<h!05JGh;aM}f%QQg>%*vL#|5*+)o#K6+YReDkZe}F}}MR87tLdyXW8=X4)S+q3Y zgungt7x?X`_h4kuAsi#q)8;yFG7U;Dvv<E?axehS6);G`hr_Pu4IS+ZqT}T#LX9ut zrN?^EG|fWWyn6E5HWAl0M2`VJ><S~OfJ$@}v|y3MPbCes&EAgw-G9TQcl;FF*8d)V z{Bi<49i;NtayJt>tIsMwdw*{*Ig#I_NP%s09|75R>8&?Z<BCsQ1uOmm@*o~bHd_rG zr_!Rg0uoq_=X`226ock&Kq&k@{P`QV;rCyX^TjmXfMHl-()A>R$(ctla#7t}zRK!H z>Ex0x;w^8wABjj0hWieOn`u<D!7cT^O5VVs1!Cj?Iq`Hj8P0avN}A#~a76VD_~B<B z#T{R>Mj=$0+xq*0$twayj;yH(bw5LlyrJ2_$rk~=y;E@cr;o!~XI+Hu#1$CmoGs@S zg;Sz8VHwONsK5b(RQI{<d?qEE%QUv{Kzrm*c=XYG@t3cy#FXY<Ja->3*sF_dKkib+ z10X64po}3DAtzxXpnl8Xb=Lrk&z%A*aV5^W@?zrtXJTMa9l}+d-kGxrD~w>WK<-RA zo!m|^;Sa*rp1|XG+)sr5d#rk>9}oYU-y2XklOdd$^c!>NAh>APE24nhm4zRqg|Fbo zyQkskGe3gZ@Z0FQR<iTLg4<X81CtB9Gc^NAWVAh~s{I`{KK4C)@v<&u+XpFR%xb?Q zhS`>BTz|jG;*hw@?A>My;PXn=i7|ZhfgmnCZxNRFya(x#_t4>opa)zvs>!P>sBnbx z0#zTyoqBAZOwBEcQ;5|30(Q&K@b?E-;Pwk_(W1<w1=(b#tWtRonj{XHI~{e`I_C~( zVn8FShR2)=G|!}mp}DyB+b3cAlylM9doiND(}g9#9bI%It=f=POoP$|W#emHIU1B5 zrHF^uHt#}v^S#*J_Yi*m(dW^X+JfE=pzCSL+yh}p*6kk}QhyXF9CCL&>h5*fdMqvc z1Gc!{@!y0n4Rg>q<1(Ch*%{F6g&6K$h-6$BCWJ2NKVLJbz{G=;^l%N46T&KdsLDZo z>soqhHJ1JD2@LGK8$*Lz@w?CR`=zrt7|E1#8m})TaLC?yJ}^;p<9-nmvSpIc!t;O+ z{yGS^|5Aj5??m;KQ%H@hCrJ^>cH*c&>42*SFqpvvnQudg^*xJZ`Zv&<{)Qj?TN-N~ z<ae3E$;(AzHhcEVKa=lZp@PNPofuQYZIap_s^&7!Ag=#W2p3;-G?@igArZX_j?*GF z0b&%=u~_jF6c=($k!(xMT@l2r>AeWo{+`tR+i>5nR^z)LNFi927K1mf)V|O9P)7U8 z7K{N;8_1;eERr3z6liJ%YT9SxUB6g}cASPp>Jqs6ap>D6k;~)`F=mD|Q7@^;yDD(- z;AAhCsF&MuSxL#Hr_3NMcAiBfct1MvEPnCsHHdX?M}If4dAWz<y67myQs1da{d}k} zfPL<a@((cbq!TRWIYeaRZ9fL4wbh|#)dgsneilx<d_L+LXJV*#4pM{FaEO7pYL1tt z+j;w3sXG`yjBYXL(54C%pL;>jmWJwMsBhVh;lU0({g-tZ*!>7v7X1UeJL9<h{rnfK zo|$Ch%dp-dZs)%$npd`993Yz92e>?xd<0ImAurjRz>W8`V(Q^%VkCMo8mFI12-;3s zK!hYsh~mqdH`clW2Lh_ws3}6SDU$w4Vz7HK(D4jv>PX^mc^qH3Xb<^i#3_kO*Im(> zhetCz6{3GFs9@%}cWNJYV|_a?(iy@DA2xB#cN;LpJ|5c8>yUCTKyr9tuAjH=kcr?$ z55``HGK^_>%yE0m5S^aA0Vt8$H3*sifK&fZ^y$yzSJw|>*{v38+fx|q9RFEW;FVid z*@FE9ovi_vYYcRiF(%dgKr^uLUw~=~7Y=Njg;TGXfh#|L7&17CbcK_M87#%X9vzw? z%?nmZxk-r;OiL!=dOm~69A5NVv^hebXCk%JLD6-G_k<-jZ)anB237ShkRty)0(b$p ze{&0|`W<MT-GNw@jWvG*GCc}|xl+&Mzf(y+lcP+xSWsaA2fKY@kbO``YQ(Fo6#6LI z=K@!Ljz{T`f1vwh%sX)@7N36<xe{98q^FRY%4x?<7$HQqY?WW2R9@Y1L^8{04Porh zQU&*wKe=;`!y#5ZYZ5V`n{>~$Ep)$uep1<c5D4~?q~C+*?q7$E%U?ia>+|GG*@Zj4 z0(5TmK0he_4b|AhJRI7?Lt+d`0Wr7&{_Ldg5wWU3OnFjVilhbS0@wZ4fIV;wtk@EI zW)U%g#b{_hl9)&>9G+{SbA?(!<fb!$OqN^&mh^@pJ32Fibe$9tJri$~RQUBo{HutD zUqV&&i>Rwzfp1&`ta#Y_YuUz4&V^7Wf_=#3>K7bsD_c;AUEPZf%BDjtnF*}@nt>4d zcLgwgVGy5rxE^!bj>2HiaTL~COibW7#D@>3$U{ym$Rj230YXDi%x28+E}zcZ9mnfq zB)knF;YZ~|c(oVwT9Cq|;kvc-?iFy7tI*K00$aP*<EyV9!mc%GG)>PCLr9avcQM?H zSG3!z*!6`$)yftWYG*Y`z+8C5eF?0TSAaBHbS=4z9Epu27o%-N04?OvZo}KY*pAaq znT<irA^A6z-qlWj*+!(rk4+2=0I@-cD8xh)1>Yxo;j8H$8XNc-i|%j_VOAGC?xe@N zQHw2ja`|@r;nQ8j<hl?Dkh)*ngCV+)6@MH1iIRZ?LavD0Yo5ff5Pw0Aud)Tj+G$<- z3tV9UYhu`*o#rN{jM<}mO`Y^c;Dk#+zJnPs^;Qz}E%f&-WG1xI`&+T-yeXJ<bS)A? zH6$@>>BH$l4P8}`Dzhhr4UA4o%D=qV7?>&9$WOT0_r+`FxmQuTM#ym&MOEDhcC3kF z<%0vH>UWWP-%Tod4=DycM7-UonYk0o?ggIz!`NL3(EHhk!p=KKc5dc!+zcuqyy8Hm zO?I(>ZB{uWUWu}d)N$D^=9z|azC7m*=y>if(8aIsRM%*znnDqW)7lX2pND`kkN%E4 zj-bn(M$Dp$2rnRr%O!`IrUkQ)dAg0pk2QWhOpm2Q%@stQqQA4~F^O|6L$9R;vAeGP zDK3p77DV(ecG2Ul^!}~HkhY?(VKX+r(2Lt{+}GVpW@Cn2)n3b0EwwX(*zL*Rc%xL| Z{{w1DE|<;&%Ao)N002ovPDHLkV1ihyUE=@% literal 0 HcmV?d00001 diff --git a/front/tauri/icons/32x32.png b/front/tauri/icons/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..41fca738c501f96e1fcede3b8090f24e43c979d6 GIT binary patch literal 2376 zcmV-O3Agr%P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000RONkl<Zc-n<m z35-<b9sj*!X7-%LJ)sK}7T5&}>!P)E6==b<7(gvmQZ$s9HX^BQL)s`}nphHnttK?l z*aB(OHoX)pmgpMLv=Bga(<1Cbx#VycsC%);96LM5d!N7m_hx2K!b{%Fd*A#1_wRpv zHg0tph5^I0;5sS&UOBrQcR#QSa~FLZ6RT=bR5p>Th3Va4^mnzR{YneY9(^At4!(;U z=R5Tm)3Tvl2TG}N#f&T5v?(~{=;xaHYOMUxGnl*hyC|4Y4AI9)0%^Un7v;e6dH<2V z9xAdAjlX#r7e2a}Rz!?(Zm)o4+hm?XE{%JlVFwmJ_8drySXhKQ^o)?1-hY-}c@`@9 z7ao?T7kNki-he+nw?)%uc;8Zi%!ax3Q}NVm`!T7y&WPL;z9}UZ+{$BPFJ*|ehGDD1 z65#szQ+V~MhjHaZ+h`?>F~aA4^G<Aj;|NSMNUakveLlU9J8eTurD1A(sg~g}OeuI9 z<=0InkyGfW`$Kqn?Gl_m+&o+fV?=yv>Z|aJw@>l85GfLxmaoufz@)qT6D}aPV3TW> zNk!bWVAE4dCA=uWZ=#5|%ja;C?=C@O(-6}N<Hgl=#Ko12OhLLqlqv$uz^{%rBUmxt zNDL&ELE(M_|5;gq(i{_?4>&m4lf)k{NAd6LgPxfbqAyX5?paougC}O@V?nVGlkzNd z54yOgu>)Z$W+*4A{CPfvI!<Hr;#vY#pk&yz$fBcCShsCE%BIans4GD<`-N|eLh{MD zgbK(#kBq-RGY`i*64?9M0QOvrLY(mAoFLXt&%=Ec{t+P&`dBI*FN-M>k0i8=b=!7e z*V9`>wiklg^|SCo<3$V*sir9u`im2Hv2lJ7zpbADNy<1K<)g#=mdEp7|Butnz_%&` z`aS80GZY<Tz{fp5{<sgXwS-^?Or$cHP_98tC~RF-jSI&wd92nqY{!(@UqvF8(#0o@ zA%oWcw>^#s89zYx`YkW^gXAXhpH*aIM$kr_?<u|qY$Lnp`4j!v*%BsROt{0dPPt6+ zd<*^@KbrP88kjVr3|kMLgFm-KV_{UPNxCa~Vs@Dy8><WO;FKIxQK(C<t{U1SLa$NN zcdo^-i=jE)5r;vHjFT`*<1P`qi5Hg7v9M^(qgeRx<A@Kq{9ulkUN$Z3j5;{b8pA7O zF4o@vr9hTB%MP|Rhq3xlH{QK6fX<i;%Rj>Mk+sJqhr;4~gxXJASpCeis30($Bo#2m zRlwDmYA};bZS_$CaK;^e)Ri!^NU^_l5E~BNgv&iX$qaMIJGZ!8mU~uH6*V!r=1yJP zht*bNoRTN$ok{~tQtlu0M&^36bwCT1_{*NrZD%Y`$`YBS(-+tXmQL1<#qbo+#PVYp zBeck@C(<k<$sq?vq}Ui<258f7L7QC{St7Hjtdgw@1;fj-6dxb`D$F$F^cAFQ83CP& z5iWn!oxrj71f)_P?TqU>EYE(@if*A{3TAjF-E?IfQm??kAFd_EsiL54Y+6x)szM9r z`%|cYuM;sc3I;5Eys{is1r}O*lX~6psxl-Z()0v~$5)i2_6{GeFdM$!*on}fgJ6zF zJB_qg!wwd{*MW#sMz61=1ay&%r=*@2Q3=WC8HKjCTDzE_l_y!hhv~SW*e|Ytm9c}R zxQ=V`P4<{+8o4HrpD3Qob>W@v9~sw%O-?d5lqD5esR1&*8u4a^0&bp3C1k71^|#WX zQ)KYBCB^v4!~jxKka*AIv#hykughMc5!#v}pH@n)%i$DaRMw;{k%_*}8z$PXHp?Vq z$#ybp>P}>1w|Z)hZaPv>8qS1tp^-$L#X@xQ!3rE(<=vm~S=J;a+vsN5D>MSgN2cax z`5o^}Xnv+3(xw;N{&&j6*<&Bb7^S2}GoWv0(u>;va8^D_gSG~6n4N9e!7f}5r8I=3 z)=Tq|+m{|yE)h5Pzu%?zN>QCcJglFQr@bcEzP6YKEA6K&5}o_-1B>172JU<G2g(lQ z(*o5RN*PNh<zO1!pF`JG@&C<Fqwo=k-E7HwE)5_`D~gyB;#fho0QS{$5v>2P7hT+A zkxo(1y-Q0ln@R}a4zh*6bSlL9V<=aO&_MVmUf;UO3(n8}yc-K2+F(U{Q;uWW3nv9M za;3>g{C1v+;OEDCAbBWm*6}5eqJRg|et8$5^4%3A^WL+h1W(rFBjG@I&$|5`XqHZI zaoWwl!$#9PyRmcKMz0(8c3i+W9{Y((#!cHc)wSNFAxKz0IfrSeu!IWDEAitHJ7YBJ zc(WP96{pa+GgM$?BB~_l-dI+O?^WgLSwOtFsi_b9FAp&6rgB_mu~7iO+w?fPulHDb zZtrUAMi~(|=iWtbESxm`KI<r5R>T}$OoU6HpU+`rLv=pN^KJBzag>4yNp?X46KMHe zr2%ZN3*z_p7Go~mF7tzU@5Sa2cCa;@451@qUQwBa!+&YOf!%vWwxP?SjMOqlZ$ESr zWnZo{;?bl`Fp4R&sWymTe{F(SyE4t1{~hdjz5Fh(#Z;gy*UW-f7Da)ln|iV5Ojrw7 zl&%8#K6JI7!t+ZP=rP?$*Z=HLI`i(SoQzI0p@T*$ku)sZ=f)k(Ee~MFT}60^v%u{J zbEyUUm`Phc>Bps;jCnvGu9C_dO8fE4m9@Cc@jN?}jvmYBb1Z-M^<&hkKxR0bgd{h_ zvf6S#)=bOAVk$I+p~z1cm?*K(N^Be<M)p$p*{-<82<Hfu61N8m7<4y`m)0)gSl%*r zEFY~zP5pHIbk9FIK-MDMBb6(~NzHOZ5dj?q2UuuwEv=Ux(c&^0r@t|>EGrK2#-X>c z80h+}1+Q%Q4#)AUqYoz5$fi#R%7(7C9v-Q7u~i2cmPIO%XQ@<zgOuY~%n~^$&}c&o zmU680z#`R^t1e5LWvaX)lNDCs@LwC4Zfo%QrM}xA&9aBnVFyW>m{;h-=_A?0X(~ZE zBhQ&iDw~wop~LB0>BH%#V|d<H0sY0446*g8X6SgnlE?GqsH|Q<*G^{k<fI3jL5Au& uZd^Rc(tZ#p4m1usp8Mo%nI3q@Twef^T~4*n2<oQ*0000<MNUMnLSTaRgOV@+ literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square107x107Logo.png b/front/tauri/icons/Square107x107Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..22f4df685663f335bc74d8f9f51648130733ffdd GIT binary patch literal 10130 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 Y6HBIn=# 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 A!2kdN literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square142x142Logo.png b/front/tauri/icons/Square142x142Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb84dd286f9e671702dbf51bf3131aa4d7140e0e GIT binary patch literal 13801 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 literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square150x150Logo.png b/front/tauri/icons/Square150x150Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..af5508ab0b8b8f2af24880f718f920b18d8b5b5a GIT binary patch literal 14631 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 literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square284x284Logo.png b/front/tauri/icons/Square284x284Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcb63842d60b158f253440cc11d0641fa5d6132 GIT binary patch literal 37323 zcmV)9K*hg_P)<h;3K|Lk000e1NJLTq00A5T00A5b1^@s674!?>005DaNkl<Zc-rlK z2Vi7Zb@un#6m{)NyV~BH+q!py!8X;V7Xty){09gLq(A}$LP!V%LQSZlnO;l_U<}w8 zY+SI{-P?Ot@1tq2{O8;<^Q0}_^-h)EvEOPmGn%>Y-gCcu`mqsFeUNDZmTk}@1A%YA zu;_w`T!vru>2i<z_bbi^-gk?ImRa-Azh@p|@p&+VdGty<0yH8p8tHKo2pZ@sijNKP zxIsNn&!I*BE@*<TQF@Jj8vHnoAV?J+gB}~=@q~Df0eTHX@QuUBXAfi6lEWApIE0T} z>tpwZCz}DAX92MUeH7hq-~}+u0Q{Th(lg$4=YVNJb~FVwMuy42LJtCyHZT8fis$kf zgEkcdi`rRv`D59I!1`wq+>A8A%eKL=84Oxz8@AA9ZxW9uhMTec+-4YV3vy#kux)<6 zi9n_aM!+EA5E#VhZ*1{cUq<M$y!7ju9Pv3ooUUduD1)v*4DQHFJZ}&XVVv%99J%pv znEn{9eAOtHtQki`+ZZH(@lU#fQTToemNSBQ!#Ezf4cPV2)EOfrCLnSW0Rb`niSN^W z^F$H|F%bDPh<WOOy`w3p_6iu2e+k3}366MQf&`0M3+RDslC;x+)Nq^tr~$A2Yy)0& z{d{Dw7H)Pv3}+VYzb^WSIdpZ>XU>Ibv>{9Te5@bh^G(8yAgKO*`y`YRo}#IPAd7I% z4~A)AJ@jHPy@Rfx8(w~Zq_M*!Q*Fo3ZaRdU-Ze(|pGIR_2A-FuzxOe45Xg)loxd5Z z!#7*)`=06S9!)`&iKQ7s9?3$Q$!Ga7?~2JP($jAQuK#xjUjLcMj-EllvX(Z_8EEcU zg{HO+1g=BB^X{S(->~G*z>=TKo0|k9H?KarR+e3j#df61D8YcmI+o(-3e-=7q!u%e z)JPx32e#9nJV9#I7Q~x3BHp+W-}_(|cieQu%!&_p;w<?{)hh^C{i=DEn9dXdPDN*% z)g{(K0<ykXCNV!<d0qqF1yc5(cRKLQH_>}DEy$;qkV>$CKxhfhdBJ>~_w;%6uK94& zU9jSFX$#FmYQQ3CM`DaT&5!)vfHtma`C?N~UiYa#pNuz-#V^50J~#O%gQ4$}>Imzo zU&%nk?`do!#cdV?(P0A5Zc?Lq=r0cA!P^hx;a?vh;Mzy`cmPgvA5HWqe*X>N&{q9H zJUKSae?TDbOZAl0E-w!yRYp{aEf7sXC1%->VBmYklnn=TE(Tgj`$-Lvnl#jk=e@fH zul`3e=;CywN7uqmuAx6(N3Si!#E{%K3@%#rvTT=BBwyHkjt(Tp1C?5$FbEyxF-bW- z1GMWD=2QR?-Fj0yU2XemPBs%bZ$U#dqs$h3_umfTm!BCTpc<ts4HA&hx9>>)7t)m< zMCw)rwn8)o<(^@K8CrUk+^hxwudtE+{yV@0*UmxD&MWDur<1MbVkFy^(cv4HZ!=@y zlbP)u1y4-0Yz1PFV6{|AZ!Z0wQ%2(qCPudtXx~E<cPF}5{0R@-(vMHPM*pR$E;5y~ z+U2pQD*~NzZ-;0KN=%aZ4Pj5QYztZT3L__8YghqX`5s`7Z()4PIy7~ifu~)6CKfJQ ziByh2##)B-NC(D;<kARJj1u<^OR7bzjuj=Bumm$xC^+I`bu93tIwmDa`A(L6k}W+1 z*1OOY--iPScHz$NJ&x4j$I-NI6MD$t{D+T{(|(8k>==2&2<KgoK+6{Z6xn=AN)h0c zY8u(w5(GzjnH&;S7On--y{$O?jm>!3zjvYwXTli20AB18jP#y|TuOS5m`uwhJA<cy zMXO0O6<kh~rh<?U8J|OvAp;Q`&B<01Yh?BHLD)HxdYT@<K{7u7_@Dc*@oQs9%o)Lf zEhHmlCoe1mm|-aQdL;dnV5dZM>a%D{z~TAyTmxa-!`e%McYJ*n8d@&H*wEEznspJu z$UJ&k#<h5!DfdUT6y+se4mR3bDoE1Ek;Zx$sloe661okk(Ldq8->?H)?g{S=GGp6X zii(WOrPwOb6g)*@n}HLPs#7k*;tBhleO&r7;KJ*Y81Fw9<HP4*+1YF8_vMH=i!nN| z1eu{`2-~p;?t@U14D)EJQbeatA*sh;_qa(Ck13~@Fvp^&6YXPYnY|a;{60MJi(T0L z=vFkgKZNGl599v-OXHrK#cG3t9AgPrs9O146xsX~DPruCoh~iONRN{|^18@2)4&n` zXvJUr$4WfoIp<=`eFkC3Wynk{CbdZhx!DO;oj4jd2&qhA?@~nNC9Q5rmv}&P?~~f) zW~55nM&81BBfGKwgl6*(_`|Ia;oI+J1J4K<pn>k4`g1t=vMBjPs@BQupomU<wv>BY z2GbcLhljcC_5TT6_l`~s9=?u#eI;Va3y7y%gw>b59+4<sC+lnK$Zrld97Qhu06qRb zX3hU4e(~8peB<46?K!6{2vjhkA4M;p%oImc@Fc{llO30dlGzFNgvfB+3ttFa{9+(G zb_Gtm{25q%_Swkf*I=}N6|!kZNkS0nl4<Jj-bh`lJqmlf*t%>=ImqX9iyWz2JCKNN z#kNNt#-=~rfq3(uaNkdX`+u(Yk3*g<Pb8GO*+|uT5{j7rm@}i?(j082Rj0X2f!Xs3 za<cRBqJLb7=f3<5OyF7QKlB`=M_YwU+>S9w<%P#;vX?2M+NYwIOL(R{2W}3+HJ)r4 zM#ubH(SYCK*FSm!KmE@Gh{X?K;1JNW2ZeR!AWY84h@_sQZ>wkujyF4oED7P}CHK7Q zeI~Ad-#QErz7)CaOW`Ee32&1WucNt~-W153H^U_-!A1g`AERy7kMV;KZ^idMEX5kz zk!p4XHpe6@nu0K?M8af?jeJJBkygJT!1bR8F1YeCoO#LH(Xs5U1T<F@W33{_vy@Al zZ93lM4~l3SP*LJxZzLQ3IsYxu(1qrX)x-yvBavK#6_=%O(L45IcnIj<!h6aQd0!%W zIRc+BMfGr)*xq82B*Tf6oKfu#%ka`A>nuF)ZA)<FGcKZ;dJ*~$z7YGiHoy`tagWp| zS7l_YEbWM<85PxGc843JE}3+&xH%hr`xe0S7NBF%IaqVaLNYTiLd?4d6I=IV-)2uF z)G}WPDLEF^<_S$`L}7B`Tq43p=OPFHbn|&wdET4Qv->4vIG&|E7?JuEktWFttU`I& zA#^VLKDIshC4B5<PoRIlN4#VZFGV6wh-UW2;j{zaw@9)n2JXH2V?fucvysic24`P& zIbyLhFx=e)lT<Ck7O})?-pm<2cM-_|oPZ?Tz?G>JZCzu;H;>@4+wOoB{~-?T*od3n z1;sBhSdL55v_~K`V<&CqsZ=_9+ad#BE-f>+FMh5kG@^LR3S4phIas;qg*Z5I9Y%Xw zk@7hQCnxF%OSLIdog!kA2adrWE!z`n(@<YC0m>D);M&!g)3^xR_x~EZAASh=(Vb+^ z$>P3WGq+iYCAkjIjLc4-xe^W=hh4JS%$^_M({})CR-c1M_r8H%c{S<jv!%{%)JrXy zh-!l*dI+y28JWGHpMLu;)-U-6wr+bE?|cTxjcyR{1+x0$%%d4}S`%i(k|-2#^2vR$ z>>S`NUs!|1XTAez^RMYWSJLaVMI41;8X^`Wild3>#7T=QrZ5m&b^{toYIb86!)aQA zW#=Elp2zz!cu>BFHH=u&C*$*snV^{gI2<3rZcQ(5k~`DI1?1}PSg;(=eBHC~^q0K` z1O2bX;azKB1PwyR<|=woo>N38PpUSx!R1_Y#7_pY6HVyezX*YSI#!+4PAruqFIO5X zE*K=+ppW#ZB@Q>+#!T>HP5;fLwIZ!6UwtF+mtR;1E4UGZ`>&_Po+sSmhRN09tQj#U z5mk}`5u+9OwkmOP2(uP_AD;2Q_|jXq;I{ugI-gEcn!XYaC*nCVAlV!v<FH)#m%a~p z$-AzBV|@sQe=RL;rwCgY0i<HVBlRhwGVr1(z%1S8@nkbeGi%7JwH9kG>4B5njm>xQ zyDT)dJEGuy5H9OHy=Zy@4(BuZqS_mf%eW$W^6ED(!b{%$0?eKNHuUa#7A8g$q8$lW z*pnC&NjDLdgVZ5Lyv9<r>lzpzXh3Fk4dyTF!h*F1CPoIa=g|>l)1Iu?Lz1=~^QU7X z==1^{Etc{^aVwByQy^j<uKbIY_{;zK3pmdE(7R_n;?17$6c~my+(j`p5tW~0G&=Jr zg9#UIA3D4WEweAi`OnLvZyy<y9~(qNOCVa<c-o6Kz0Sbtb2pC7UMK^(97hT}ShOyK zw|t&UO1_Mwm^Wha8RsLP?i3v;MJwGXVmP9zk>ovA=egr(EZK*>Pi!D>)z=7YZpIhi z2JGLQfD@O&sM9D~x&9>_1`od6yp4QLR@z^3ri+*U(_CEog4ba2lDEKWcqYaM8-?U! z$4KM}Y(!uaQT0gHy|(Nefr*XGcq2L%uEOfI3(>jMMzZYy_HP*>FIFHbOD3AgJP`QP z!Ju5<fMcqbAbfRp_~823@zxmL{MjXV#>?M~Lp$Gx!GYD}9gr%NX&MS_B8sTmBzckT zi>&^0o#cVuB^V#R9P6L%qjT9lJp7v!IXpO7)Gt(xH0t}DtZ%?+Y$2m?mhZvFr#|T8 z<6pPYcICC`SozP0S+60fr$tok<F>ky2P&f4BpthB%I+Ull6d+;bgeiI>n<O|=6kkb ze2_((7%V~?EAERj8Ffna2{^j4UM3X>CtW`8?|r=LZ{}h_=c|!f@@8Zvu0eLxf#vwp z3l#<MMO4!yRV?W-HIN#PA=$hN3s!f*4q|9nz8_uB9L4^J2yD`EI0;YwMg0W|*54)+ zYLu^gKLO8pJ@B_*pMwnEguM^H8EtLLMbsutw$;Sy@*X3a$;95%9J$ZqA|buO-i7$0 zFJlM3gdf~6jEBCd-)9JQtj?m7>rcW-G?9TgC)KDIz01c9A6Y`G(}$26cpZ7F774I1 zqPUuf>Xu|x0uB}wDpstWz-JvA@?E&}Igi8eMoG<b)LsZg&E-0x`T-nPqqv|^HpP?e z;yE|^c=6w#hgoy~4*mOHfgnE{i3W&BO-WH~O+@udhN@OT#$?w-cCZC@W+mp#n}e>^ zhmlVmz>bF)Y#dSQf~ii_tNH*OHvF<DN;a1FarrBNzx>R4G_}1C2e$qNA$?r*<Mu@X z*+{a9XgZKA^2Q}itpo=jH==j{d6>IsHqN|qE4p|0VBbbx><I=N-XnG3Hm?uBi8q>r z=F*z~{C5Pn;p0!E$Nz<i(PxXU3bHw!&hCyVqUl7^;UT(1JM5KR2g5!C=U%&$9`D8W zKg-wSjRx(Jnn#@41{|);7fV{CM#*xH&wGo57ryhwn7!a#80~wy03i{L8AM*Fh^8~i zY);d5MW+zYTY~nkrC7K!1wX$X+c&rZY~l@8t#<;gUBF?m;izFx^@O_YWv#gJlg~rz zocG}1mP-*&1cdlpQi5$d5!ggDok_)zaZ;y~7hPZn4lKjG<tuUe<$dVhbrAbEWyM}$ zu;IN^qo7l}fWwlF2Ak*o)hxX66W7y(e-NpW(?r<`E?N}D*F-e)NH##{J&>K4M^euP zIRCm)WKuh^{ejF8d#A>z_5g>CUu?6HY83GNw{_qJ@4Nx+^WTB-!R5jYXvcGr8WqtD zB^@M~N1oKHAZSO+oOM{V#zWvS=%fVLB$`a&XsIztr?voxUEe%OI=0}lm$l&yAAdDw z5!f8ux}5AatVZQ%661)#CZd^3TD{7N(z%0&W?{j~HCS`;IC}PMBlRjH_7E3y=RH+J zF7w&~9Bx9#y_tDJpGyYfH+||_k{<t+B%37yY-AUO$n70bM3PLgC!AP-^jI57{-=|A zwTryBJFsJej7KZ(shXhL031$NNHlR!ACJe!^WP3qqh5iwu7AYD$Qrm=2sDqtCZdSK zq|_@@mbn00(L8G<7Ofqkrys|*`#E;aLb5p!37<8fUR57(q#DIB1Z<P>aQQ1t-0;!o zVD`dy;n3C#MeG6Bu!+>Dh$1=~i3lC3UU?RV4tHU}>iJl8!D007--Z1fJ&_7jBkEQ4 z0mqIRqR~5#<+*S5@s|I&fM(?r811_VF>-xNZ&W1NL=@5SNvc;isaF#tix6vAiwj@! z2*!sFV&?{_Imo?M)j?Jda5y?R*+Q<p6lZjMc+o%jc;Vk&j^_4%CLQ$Y(i`RE5xKr2 zis(d0t5<oI+&mu*E%UK#{a%u6_F~ID+*lxnWUD9ZC09qist(|YybluXT%mX7arrBO z8~*bwbaed#_HTZXO4MWvd{kZ{qKHnMq&8s3as(<Ch7Ya6!qrV!aluv$?(4;#Cp@|5 z0>4_hSJeR=tI%c8!qso`apPxKzzF^m!#yuTyg}tgMR7I}MfB7tFoh|?NdO}Q>ySvy z$J1YW561dOvF$;rURl-Y^jUepF>Tr3yRpN^H6QZvoWD5(vm4)w%-D6v=VPQsu{*CO z%7L==$l-P4POK+zS$r9jFOx6zS;c;P5mlQEwI+O7`X{gBl=ZVuV*PooYovvpRIj+a zg-eo-87xAwu^Al~ZwI>iaQI;|WsEzt7yU{bkt@soyxZbUCV`7DQttm_PaDpd`%l>W z_`48qHetnFnt<9d5OcK)kFOIP(Gf6dOn%OgbD)8zShi6845n+p#p>=ny$r>jD7A^8 z@F27ZdLc0NxhElA7)7I3ZIBPc3gBfeq({fG^sG-|Q_rXHo~1+ZGC+d%Tz0&o-5@I4 z!GLef6Yg&x4UG+OH{J-h^TluogbZQVsjWii`UrGNJPnxkEu?FPjtk`K066*!(}GNL zm3v}u#haVp`L9HN;~4F|&tWVxA@*WWSrMmlGt1TZTtZdXx3Ty%7q9z|OR(&W&ys=b ze3Bq^6miv?(=ooVYRi2d*0nl#>5?Qan-fQ#q@5gH=1~}w549{wLj74EeHjn*zqkpP zP^B;9<IseMG(9((_pvYKqA$fQh}97*Kn(@ip1+qxcowdFdYvc4k0hTHVr0|MKMnDi z*UaPX<OOmPeKnc9hU6jcY_zbr(MF47B1wC4euIV1gelZ2p6>)b*Gd0$#7)F$ZM>r_ z0<Td_sa<#XX7S^_X>1<Ji|-ZXx2wN!a!)a@u>|JkHemP0cjBAxy&L;B+N2A*uu0n> z{HX+0M#6C%z9IfD7ac2Iy!?Hq;nEl0h|!Vt80n|QkGpCtRX<w90En|<wuuWmVtDO} z2CQf~@o5?)fXRB2r(ItGPFjKx1I~T|oC5?vLj+DKH=ySNjO2U_scRz3U0!|F7*_5e zL)eBwsz9|TsYXZ(C<c`F>#51%-Ok|R7-%4{XeVH4kC|wttA(Cxv<<Y=^9u=J7Ae4C zaG9S}fMd%28K>uFB~HAi+wx|M4ipbN$6Tao4UO7Rt+YMIMJDT@wPQUleZiZN9v{X{ z|FRMNJBU$fZ#s@kHq^2YrZRvNh?)1$G8=gNSAq3UdjSsad;=^3qF91st{v0}8H#)P zL|Z`&<QPUlBzOHMSI^sGlNodYG4<IYolFZz%+SNclzYcLY#DK}aX62SbTU3Vn8&U$ z8Jxu+Q`kch${fj7n4+30VD>CI$;+E<te@rJbdpq0Z*#D=)y9%03vG@$X&t71W|+Ju zQ8*arY*X%P<`w1{=AE>!g!bB4H!(c1*Cs|B@>bn|%U`_(%?mf;lP{r@aKKZ0wCtlT zFW|6#;E8yf7+(JTEZ*}$VBm~5V9(I2g}f=JBB-S!Thww4<Yu2u;L%_gMd?6E<wyU! zqRHoo7moIRdY(^NK6#fn*|>a83?l?UgCyY`BnfESs7s=`i$@56whYn9L(&h)`eI<V zCBjN+T)~V3B59MA6*pPMg{v-_$F=Pa&L)6aN5Hb0q*4a^Sv1G3jwz&=mY8wGdQ8=j zjVbf#2gg@wgP^E3F|RPsSZeDUsK_2Z8IptH4z&G)ug0Yp_TUA#eghx*V1OU}ic^QO zg*{s)Dlg!0D7Ba2o6MnQ9&pb2XX5ts>oBzMOw8@fi)wvA?MOF*;S?9KUcQV@$PN;z zS+cQIxi8~MR@3#5e6DD?3?`k*+U?#F=gY#vP?SRNgpVx*I-5xHVbIw*mdAbqqWvVY zPh@;)Xd(vZ;%=I)YrtMmwly)8u)u1Qr#6JmU`+tSQp@rt2{xy(Btu{`r{PFdh^H)1 zf3N4sC^!*~BOHo_?|u@eQ=m+64E)S1%rh}D*q{bY&$QP#;Lou0=-zi0mae{m_T+=K zHy;;!bn>1p4<wY8O>(({7ZSU2tMSeLH^8yiqrI6|-$V@<iKmQMsZ<bR@fs4vp^T4) z+Sn)b_s4qi7@wdIl(2Zu%=@%t3{UHdiA};1&mViT_(OLV_x0s)AmtT7rlw}G4BJG{ zkwPAe)`BI&b7nhu!J;ItninTkhBmq~bP2)73r)RITmq-Wb``}gf=6t{Gt4{u<kZlI z+L%oCL<A;gwE%s&_4ww*8)$ESkzUy*UKe}TD4V6Qe1H=p%Xcm<4~<v8H^9?g_Y9=Q zUXMhqU1WgQL5@_l23I&$)c_n~;M0ha*^6?`yacur_}oFj^NRy%Y$fSOs1#%jWka_% zR@bv<OG`ACLW&%V4|yqOt|2Mrx`jzRZEjrHOS;I=%c`jn3bfHDSv5ir>Hznptj>Ed zlWIpM_j<hiy<5?>XdAxwVN-;r#FD&s%kt%=2OL9+lQiHMnmTj1;Kjf-e|a4iE`ALT z?`enVQ)lH=8{V3xN(Cqwp{WCks+p8v<gQ^?t+4sfwTf&MYm}Yh9+Gz0;Jkwj%|q;N z=grBgmaRNnL4CN@wR9-L64>M9D%FX8Zy-=v*O9<kWTUyHGlplfL=*BHy5hE#c|zHD zo=g?0cb+-*={9K(ax$mUj`?d|gT((ki0;F`!~;JE#s_$B<_decgj9OKVI5I6tn+Zj zHNcHuS_(7uSJ=Dx3dCAmlGf~c02{Wp=*<qJvL{zqHPfejpf;A)pjd_AO~-LUclYLm zwDbGJSrO+`2s`mZA6WDAE%SMOy&VWJZ8G$-YI((+I9|CdiDz~t&>EL&Q_d^eTzHC{ zD&~xYwPhJQRS&Wy?Lk8X^}E=;<qEVe7{`sDe~8@Whj8By{V997WK?><u^cw7axjU9 z%)nB_yuTus+l4Y0GpLE+zT+~z8XX_5{bZb7(IOf>SAA@S5Pdy+YDgR>ay6a!eEPp> zrH2gzIs9aAhQKES5&XkGTUNK!aqsI*QDv#881HB(iH^pkRi}i7rxUn5dwv|}cf_!a zjKcFs%1Js!V~iEzq*`Dm%_Gb++TK(LF;juulk~rBT>!&;3o^rBrsofckQK}3@}wmd z+DZ#JPQ0l5Ek6gi{3VxSWZ!ELYiNg)U|p&{GQepQuvvtoh6BGC!Rl9e@Zpn`;9LL) z$9nKaT;f<*LN<*v$V<b)Y#e{GeKapz>>THlo={d)UIA`a%87~kR7QC>M>s%F<AjLK z6M1S<ZE^@?R+15TDS->e%v?@38djg?B#YjroGT?y(~#<7EpSqRVxTzl3iFJt%3T*$ zd}+^d5<W6x9kh3Ez~wL7h|%63VAmrMb#r)6=d&gI!qNhcOuY2aJ|B3)$IirgS6_p} zd*>mSVew2DZ)#<xkH<hl!l50=r`32qK$Bw>yjQgXmsZHAs#Pskqc|4i1&b4S-hzZs zuQ=TP|Mq9_z(8I^H)rWht_t~g{g8-I#{1IhlKe$}Cs!b0w>C%kcEkxNNkY4ZB${WD zw6?m%Q58xit4_9w+F5|m&GA^7v6)wdgcAfn&BXjYDH)>WOfJLC-WKEeH$De*mu<o) zZ+IL-hy22xE)kUmaCpW=L9M)vv!CnX^`AB{f61#b(DOpo_gn0dnw#pQ@=qX+ESBu| zkyJ219N!$X)oZmWo*70cmq-neg9Dd~I3lT@aEis2k-RW6-$OQ^C&<w3W@HCt7Ik!K z4Q;4CRYS85g5&^2{ybNQOM5b>X9<A{=crvqQp|ZBj!>CI%0bKwv5bs$tmTaxgw}w0 zg?WZ~hk2+zY&mLg>PhdXJ-habL-?0Fp1?QW8Q_s$GxK|eJ${N*8o;q^-AFwr3{7XO zJ{RM`Gtu4Mj+PErOn(s62jB#9w`6Ez@TO#yWNC8|aB7jlAjlfG4s2tIfTL?$Vip#Y zs<NJ>2v)h+2)lcnY=z|6+LMw|&3ifFki`iWom4=fINDAEc*3B^QkN)I?a2Vexip81 z8%gb>i(^&T=*?a>9*-~tD-ywZ%1)_4tCp3MAhZC?E6g*@J1}du+wM_!FiexA83LAJ z+Ov!1JX7pp(|Qm(Ah5W{Pl-wZIIMr<ivfNuEi15h@9WUex<b?}t`ndsFua&t2{`xn z=V)VkxNNRst~v;?3#V6T&z6=}7=YNevwpS=?j9%pd3Z37+sV6i8yT57>2QKTBIQcM zr?0ZvPb7G)V4LyOH`CuWk^QBad<aXMY+Ou|%(?Wvmyi*7MXOyHAdgMjW{P9CP1FsA zL4|pRc}4&Z@lc(($n}lL?hgstv+0pl7#MjS?d4&5Zl`!%?D10%2t0Mbv29kRWW%i+ z{>{e~*Pl%?<@MxV>!8<^a9Ljr#L=jEPOKb~Qb4^@!C0#RXsQXMiKL$k2>?!Ov+<@? z4I<O|58WBudWfT$vv9K#I5>irgYSald=F<>3r~|uI9o&p>{l*L;<`mikt@cZk)W&D zHYWX{uwk1a)ubLLSrI4QGSBc$IRv!%`pPvi)PDA9@6M(LxgKx$=$%-3_D<aNep48Z zIats=wT$vp2b?&$MBHIl45(|>daPLV0&LwkN3^4`9aj}XuTLU|VJ132>c_kWyRb3p zZByv+3YWN7th2*58!o{RryHA1zb|T%D$n}%7#<%^;I5u5etjT=EU5|>x!;dw*U_Ms zS1$NVy5a)F&Yc~@Mf7t`+hi7FGeAZ)g0xhSUahN5$0F^aVl|LUi?B)suP7DPB^jnm z(oBqg&Y`{hJnUGxh4%JFwbw1$>!)Nue(LIuJ~s0iX;kW5WaG?dz5^}GUQN%%RWXpd zEQGEKhzQ2vq;@Vj!Cn+jF<=#?b}C4o{C(+^0ZWxS)d|<SSQTeiuO^VVg51)}NHXam z!}4CbTorL>7*pm+flz|x=xO9(dfS>N{PnsfG6cs&&|cOJq+Q9EMa4wON1@(xeb;zq zY;i0ZqHxQ>G=53oyg%&~toU`BS|Vd6xE^xWUVwd@GuZa$yD%{t(7txWUO$CJd+LD0 zRo`_U^rE!}{{Fk?VbytmiPZ2anUQMf1E5}~U4YG@v@g_!=aQQ_X-n0@u2;l4@)ipz z0A>h;^bxT@<!-S$^vGaN6c)2W>W?l8)=H|`Th}z=U)HzcLbBB)?4l9L)P>~hzyN%* z#30Rw&?reaAAMpRzde)@l^=rozDWr-3_6+dCM;Y>BJVX1V*B0Q819$*+OVFo$Lgs8 z4g-qsnIanTycY&|#lI}V>6iUAjpAx#QgQLR9()}Wt57}x4i|LddNqsa#P<UgbT-XM z-x8nNERpEV)aV!@5Rcv48whlAG#@ch^TiNu^#+n+{_eD9A=xY=uamHUdGhaBN;JzK z=2JD|`(qw?cp!%_Y)xU1ynP&7G!3dUN?Fu%$>`S7hR&t5q1Qf!zOfOE@8suAQJnoL z+~rdPoLJHjQHTL?)tf&DJnO2fv3vKskQr-7tbr3VYoc6eDK??-^gy2GZ2atMuvER` z`c<utd(TEu?P3*+%b;@l#F+#-T$g7%d16?J_mo@dn)wNQ<lI(tk$RuX2cou&snn+F zI6qML&OpPlPMe4F`1+0%?(HK9(3c@;b>*EpHtW;L>X6HAr~#>wrC4$PgYf5U#lv5h z?{JcIqbF}beyS=@v6jv7-t#ezYvIH?g~TH}FH8$!n}bOw{3vnK*LO_d&hA|3wdr4K zj{zg0#5vAVfBV`dJZoV>Rv)B`AM<nVs;p{EmH3?Qt+&F?r#pLcf;X5)m{+D(5j0=6 zEU{v9(2D1xVegqJnmC`5uyT@rq@%j>4my{6c+TGfr(OJJ`u-c}g`_GQI;|vVw%2gZ zPo7S15+sEeXGyayp67TAdzyE)(?NWklDmrTn=20fzB?<H__eDW@n*VA(X~R_ccweo zu&NlhC8|C^Qq9*0Y##5;$$T)HfN56pRm!`92}TzqnH)yT;ycl|7Z~kz=y~sCSN!DM z;<^qo_qv(25O~@97oriDpnJ<K#F|7@JnAHc;Y3N~8*$Vv&D0-hqp`<|lOvaMv23$g zI%2wRG<lo_1<woD;aNM&AvZAj3L5OtjR&Y>XYiAfUSplV)-&PbE89ux?a9K78!|$A z`qg+9rL)D)(Q$H<UwAndUbp~{-*ynayJWh9$T9Rz;sZ~f|6~USZ=w^q!!IRU&T55Q z)6zB=W}!5R&0O~38>F-E9rFbK>J}x_naoi40j?j+iJ{NzieqjlliQf)lAhL}*={pT ze86t-Tj?4acMIOWX<Sm;5RM=>zXGYl*C9W_VOvkBCHIL-Bib{?Nj4W=8{ql>Zx!0+ z{1aKM&jbpM?0{){*b9cDe^PlLJIHX#@hYdc*+RS)Mr40_8j<zAhtnmRNWbE8r>k2X z2|B8$-*m+sFHq7A-D;YQ=r`|4<G(hIVaJFoHIC`J@F5luu5dTkirhpax|aNj1dTo% z+F=qVFc<|VnmBgifK&8L8F=}-16=#sr(-nzR^+l|&~VtAIxRd?$0D9ijz{rGoEan6 za1R+x8_89%s@V~7C*gdf={5;Q=mFcTxS<?JUe8T%$4aA+V>aFHJDds5k_~5pbL91Z zZyCqKhqD4~;xQBMG;m8j>GGRqj`q3(J3b2+TzW6Y)0=Sb&m`MxY&ZcraT`t`O7?l; z3(^zkkZ0;@dK_1EPwO|p?<7d*=%%dY@(9^;K0!wxduVh}pf`<Adfn=Vy;gIR#dFFp zR$-mCq=Dyga)Ez_z~){yn#U!}=VnS{Fi!52cDz>F`_Cc_;H1un)oUkQGv@>(976^d zaDK)7bsk>zAHZ49cn$LDH_(gC)6p|^JQ6V~rp%w=VoTdehv!YWs>K$P4!@ozCgl1u z(-DQk4gbvPYqt=Gi%0>XMdb91TS&6`#HMlFPBuL51K_BX_8HWN&=6tN{BvSt0ooTI z#=^7i#r}=tvFhWBY2Jw-z>@<G+ipw|%4}lpav$&bLL=sMyam1cFNTwVs9#*qDGVn` zy0Tu<F@*=KoAmhoWJKf$+s?R!HahtnrDpikRNC=TEO{~AZcpD=%$5iG5FIMNAh7xD z<`iz<pBAshY3*}<9hKKA4YA}QJysK=O<1{Z0ISZs75CqgN6$_ZmgN`3;N#GVNH{W? zD<I!j+nh$6^PFeHZhQ$csd+M=YPz>!J31BW))HfOlM#8tpo?*Oa#f2X49YsZeOg8% zqgZ8dx{*FTS#TergXCufGXMVA7#{A)!Ej_8+6?dWE|=YDa?y9-5bpZ!KJ*hJ8#)W` zQ~-w~huJg5(#@4`3h?p|EJ8!_Z;{VjN>*zpbbQY^z+o~~_W)L}QpB9QCp;WZd+3N+ zB2LFrrAob^81f%c?d=|2{gkB^p%&A+Z5eh&e$>}?q_AaB8brC{=QMVIpZJt<+)YDE z8-}}MxaAA?ki;_#)0S8g9N%4ae890C9n@psmH!&xdC$BMBe}mpcA_12ET{f{#%?1W z>Bt=~xp6Ur&gL-}-JH}Y+R<7flbTz=GT7vU=_?u3>-wqkHNp$UsxaGY9_-KKtJ_of z=B^3sWw4?3<?<VOKLQ&$aX}7FECJ7(g|YrS(7kInVS*`gE1$%MaD2cqEmQXLpm|<< z{xU4Q@TJI%T_vp2hB@t`ik~VKL~JF(Y#DO#8*-bnjb}-djoEP-A?Q!jgwOikJ!(w? zR-ppiyf=*xJTih`k(R(JvQ7?jXE@SKBJRMFov;MxT>RpFB$#Z+!@nI7uW`D(e{7}m z_-=8FaNo_zD1-6AE9irs2hQe_C^lmZ#V5+Vx}X*R!)<rJO5*rq<Vt-uxy^4_(STOv zO6A-nHwcPFsAl}^RgOd(VO8;vy^A_qhvRF0xI2wIx--~2t}6Gb*QY_biBfaBB{iS8 zLtc{W2!OWJFW(U_*-jBNjzY(lP-K#(O?Dg)Yc2sUed+7ax#UI2bM=XU3-r`wHNSF_ zww|+!#YOJNCdh40wt$_gbx2J4k=qicNdB}mGY7@$|Ivh&XI-@S$q{8G3^D&)dSmyP zhhOf`;HI4^{Al+CM#f#3bV#$?J20ky+R9TTLl)wq|5CYm<QCt9p+mpLa1R;6GPX?W zJUSg6a6~LS`*vxUEIlj0-+!+YYcBi?3?5vks`<?*SNO@2Zog#6Zgm(W+s+?)vZ7`R zt66hM(wRjrbU&C}=sW_Oa_x>{+>oyxkL3c97x$4T#zo}tW=>OJhb#jPPOd%9jGR)9 z0ofF=_Tp}w@w7kU@js3e=meo^phu8>+z;jG!9+tNnp&<P$X`-Vjdp5cRg7XXEvvOp zkO6X-q)o1&@{D<LT)QxVGiN!4_j@YiSb~rY9E^bI<VZ_1Qlbe&x^pb#+UQUF_#FYw zZHKaWU?7LhB!RklU#Ef#Fq+|R?~|NxnmZ@91dZ*NA<_67dS)EOdRa%1eT<!A6p}G} z_qJm2z;n>hye!lbF_LahfV4PnS=@a?28$gSb#Z`B(=DTU(SnA1H7#$Jjp0@_Swa;H z?;b5JiAh&4MF2EuiV7;J=)Gmg!sg+b;_U8Sq&jimElyA19$fd4v>9-TKF2_uBu>te z3(s{#Pf8L47!$JDB^Wq-4PnK-V8GG%aTFK%(E&#q7F4OXuGxqsE};*Y1zBx#S|@3i zgFI!Z6ziiRSh<kZ|87f(^;*;7khGJ;ix<a5C(0z-fQ(`r5^d|z8!VzCX?024zkJo~ zQ*@)Ce|pj$?j~^g4!OAh(47_8-eR}##400xHbR+GVsE+_BQ8e!yjd7Hct~K!F|?s0 zZ8*|)69`f1>Nf^><@>KdOXurk>leeND{_UO!saMYq1QHv`J`rTBZ=pZ?i}vz&xuYE zY1%cMiQS@H>e|jD)UF^<C$TZ3R4y&eFo%n_HedloCe!LTR|c64{dxT6P)3yg{L1!} zNKJT@B%2KPQupQif@xfHxuWcBnxvEFNHlknIPLPg2{$%l=R<P2OzQ~XIa0!L;s*KH zWlY<m)0W`ki`QdMZyf0{a<e4rs$p_1ZWv8`!djN83bF_2CyA$@HpRvP6OWRuhr3~N z(e_1+mgo<~KNr$9Cuz~56?X~)kgmluUBO2+^Hd!^QLwi#aiHEoa%1-qm~fQ$7E)I^ z6oG$opYQyHs)9-GshE;zSlZNfo`_D77*yDB+|ZIFtT-E+?%qJp?iH^Uv7|sp0*;## z%>?C2duNbLdI@~r7MAB3Qih@uBpJTA7F>YaAmal+vyJRL+t_QO+*tDoa4zYLi7I>C z)slO4H_`iLLpf<9(i?L+?jfB*!X#1<=pPO-U<3TUy*d1uq(biL&32j5tXIgG70y;w zl`v4L3lWu=7!x=J%JVJ4ii-&|?t=!LFqSAP9*EKvPJigeuwX?FfBSi0@wxB8(AWnM z6KUb%;}O|!%0iO^2T?rMnP^!WW2UIR!!?z;%HG-J-Qp&7SJ9=iSPB7!rcwXh6Lf$c zPeC$tGaSWzPoD&st)zx>d)*NNo{@Y&woAWg_)^9lLr-qx<}Mc%F(H>rqrK(du<xOd z;8Sk{4(^PRppp}AT6MTimT+XPL=TN^z}e4gMgnWl+m|4hIO_nODzp<(nN}@OaXBK? z39@4)6N5;KHdTr?*8z5~(*}HKATMG^xK|XnA?9upYg?T{*Gr*l1=4F%Pvk3{<<2v@ zBgS|xz(!J!9-@1Fkbs8mG3;&Pp68N_4FSq_%n)vHu9FZ1#bCb(Y06552=wzw!pUco znBTDqv!2y}*3Jn698Y<>3o9_C(|jNSCp8|&V;e5Rk~5Z*&rlWgjaID^q;1J+J=BWI zAVOA`HGT|nA@6-@Q5b4Dxzw+o7spE%CviThTurti%As0y7%6L;#an0ZQ4bl=@9xdw z`+FwHsGh}mM#jwWTv*9s5v)LU42{sG8ceIQk{K&{vP-e|i3`!+dpEtpY4($1a_kVN z3){VT?8IAXMK7mEOG6(UsZ!NiPo8|OVTI2Ng-*N3=JP`WAP#2ZxSm%mP2z<FKC%Y0 zR83+v?2_S;<pWvSAg)BR!xKKfylot}lDDawB$;jko~-K^1b7{#9iF3zs=9;{cx-Da zEzV`=AAEwI=@(T3{bEc`QAOexI9byt7WLc?Tz$h^F>C%g7$5RO(P$Cq)CdVL7cUtn z^waMdQn`l6TeFF-o{WcqOn_GM%*-QIi}Qv=Fl~+6b#kh?9FOy0%ExaHa&FUvh@II& z_L>py?+y;0WEM3GrA;G{sVQO`02$JP79`CaE}j2dWP3)i>wqnCFWIv}m{XK+xQdjB z>mypYwgslWnykzau{WerBLbV6B5mtHpi&`t!>ZDkcOK4?=Z0-OdA#?`7OW;0JF8d6 zj5n_m6_Q<*^fgH8()V{y;EP*R*fFTOA|x#l1uVEz>rN5X8p#E;?K}nsV^}o%G`#*D zZJ3?hhdcjLzJmeB^AzB)1mn?i`t;1RZUkQRcgsaZuhD+4`WLNmjgvNvx*<5plEm{9 zvhfVj&$q8_#xuyJE;^UhNP2{fKa%5)5f|<x12`v9{&Zgk`^MZtw&jfJiZC6Bt@UhI z%X;njGnV0@;m4pmz4+1?AOXkFC5Y(h#iz}|y0xousNX_rnEO$g(Wz4Vqz`{nC;HRx zV<a(fAt`RlJCJR{^~;iCr)S*i+jO`ud(x3(xW6}tFK<ub=lj#>=UOy0elGFh6(Xu5 zstfW1Q=A^IXJO;WY8)7yL(ld~2K7ULqw}ViM*0__e_{=ZKQ^gVlV6Ld4%WOFmCJ%F z@7KHbriI66d6R_;J7c2olvm|`Qnms-?uzhPl5D=SBPGyM1VADR(yL42rDMasL%`9| zxCV~D2pVwMM(h=`zC)m5+lxu!Sx0~B6h0=Rx}$KJ2F{3na3F^dK01nr266>2Pc`;* zp%50S^an_qk-eU>g#t7|lyXqdq_KjrV;v?kiwm#Fo>r4=IP!(@p@jrGr;9Rz(k2k4 zGt?;+jIuFP*mSro1IO$%kh-$AO)h=Tt88#!IHZeH5x%)Ih3;_|R?M7KY9gY#BvXXF zyRL=4fz$A+mo3COB=LOdCUTGulUKv$z)Wr@kd<$5Xa(jjT?jYZsv1VSh$Ni4CSFC| zqL^Ld-y<*3x5(X`Rb?6~X`T}`$xYcI;l7?6eoU&~el`$`^1((iGB~1oB|{WgC*KoB zhT8C~OXuUg9|Ptul&@MgxMnfwUAa6uN&0!~7Zzac#fvb~2VuXlY(!N5B!c8rO`Sp7 z;I|#h;EFjhJZ)~Aq@Bvyb7V~*VmJCit|81WaM?^yrf)<vEtoA3I#DAn>SI`d!+Sc( zYe9fQPE<b-CH$ny)Yu-!igVUu_N)cS=k?JSNjKAk3eDd|9##%t*gB3q<F2d?6O>od z(Ls7i0=INNz%TY^@CTA`ko9E%V^pksda;_J$}aY$yRdt39Rkx4Ea3YDIEHc;3?FVl z&+aot6?V(g0UHtEOcT=T3O96fX`|nIFiVEyeBpJooE;@YfW~!dzPK$V!7gD&b!nz6 zaZXKhd@fpJ>qxzl)g~;90Y`y~?<GmSI-S(0d7<Mj0-Wi_2dd#YyPbbas@1(DX^7Yz zvpgGL_g6PmOJw$z{jn#DOxi2N0!4T;t;h&1{yfs3Pe;yeP_Gc1<uc^5xPt6AUw6<l z=QND=H4*T*Gkw;kD+xP_El(K^3girI-3-nx1LA1=5fhjGyo&%XtGgsbG#yDLfIB{V z`Z_Up&KdYVVasy~W3m}TR^&S8IlxP=>q1l8e58h0^zkPBaYWOGeAT^{p=D@PmgCGR zkCjn|)z-!1**kS_Ulw=vW?8Zpbtoc3@w6n#MV94aY#3;1UxF81*N)4dBc5i!$z!}H zfqt9@KTm2^EQ&6kL9DSi<>Kz%oN$vTR7ylCVIYhtTL|Fx4CjSfXPQwS=CmeW<R-Ee zr}C}%Jyv2v4?pWlVK<*{BBi=R0F9J?Bfy!)RM_VPFkEMbJA!h)6-r!ZjXx@;#Hp>^ z@|a_8++tC&2ydn}$zIl+B6T>u2qWoMdd`=CV>(IL34S6<)SLlSSYiSL?smXsN=Ng4 zX}?2%1##FYf!V`kEbdKvg$hg&mrZ+;k(?&Uvh9g3G&qbeg|vlsx)#xU93|UC63#TH zFc_q=9yX2SF_sSsua)Y|(VxSa;rk~%`5i{YS~G^E80)~p0<sjh@l!f^vx&H)lYW|^ zw?;J0Nfaq373Tnf!FY)!oG^{Lz9@n|kn;=uiX%aK+LOYNz*N}M#J?$kF`EgA=*dFK z(Fky63QN$&pCHibPJ4x?N)iMZ%8TO9-!(4VxkRbJGm5*IEQu{<7;s43F^q*cTI=74 zrY!}!hZAJ4b1w0z3hkY;1QPyp#+m+%sODa1Xcq}MGlndMEo`<?>^3pnMqJh<YX=nS zH$^l<NEW;T%B59t@h>4kk)&fsHk_HmR-&+|IKjFwF(hm_HddSuEI+pe*$Idad8X;( zXf1#vn%2~48?wV?2}w&a9KoD&WztlHH#3Gfk-;TQF$K0PKff9KcM!0=?-mky+*XVY zKy?_4q}>@vTr)?eHk2L_45g+;a`Ox$ZXxUDA+Y6&*EHhtH;_uz+O`<+getfdm86(S zB<ndEqJ+uTQ5U<(u&aTgl&6kks0`ugD4UsF7WmwivlXo^b8QUloe$G)g6%}U%9+Lr zs+l>jdJoxH2C|+A#Zqi?N+g=@sSn{+HGz6E;;<P-vh^Yt^P3oI!Fb;i8%}aAz0eqy zq?n<kmOW1P8%Jk#o+1YXDp!gr>q-xp*4CmkZAMWs=*n_h=vv5Zv4oy!jpk-XvxF?r zRjLSM6e|p-TpwfF{S_T$Gnho+Ul*5Mnnw?sk7U7!ragr+C^^Z}F(<!N3W_TF&3F#e zM1T{_vx(ta=s_&<SI$5RsZZQeH|I}&sT8CG2_u^6ycRUlzny%h#Sq2a%t#XWqS~`? z0;eb+p(BAyq+f9jTPr%uB9d7QaR!`(Y<d^bj3i|z9?b_BcT2DPaM_EYoL30Ah_tI2 z%V+{{NU|~5eiM%-WQMZ?Cg)Y23NUDJ;m<ov?)H7cOBE=$cmz2!l;Vsv%o7Yau_?S4 z(F~wKm#3kh2MH7oPI!}Ed&-|1dfc1w33U9TgcIS-OrkKBu!Iv+Dph2|nTe!ZxCkQE z=kcLD9`4VJ7r1HNQ*FIl=>9;T&2?}d=+8+{l^F&8&0u1zvBf`#s+7!Fl7?f5)-ewa z=JB;16CzOWsmQtE4x3E7M_ti_YG_1)m~BQb@)=Al;Uu(|Dl!_+P|_-nO(4-XmdDL| zCvZPWB;f*DCjt_NdLNgfU^Q(h>*Ld#$MNUBoD`%D1#S_|RAM`E69W!+#dBu-bj)xP z>6L^O-6>b}9p@%_+#XsK-X~O2)g>mWMEqC>_Ho@}4jgQ73`~&6>wCM>`0?H}hB6*v zDxxrwZe}#GCY7{R$Z;$rL)V1SxEzD1How>MJ#l#oo4|sB<@S9Uk>TADH*wzV82K`b z{_G$qs!n`AmQu!TQ|9UANgKOq=L9}aprwt_rEGW?@kM>y(@{v6Zy0qP)QAm7*V8qL z*-O?PD-=!3e9x!#Q#FP@RkHLwm5Q^Da!+0fZm6L05Ww7eFeBn}{`0(6TspUS9=X2! zK9P?{Hxvuixfvlf>KkMO`s$7pHj)8avYAm5&lJxg2M`uw2uoPHM@ng>nZpy_eJTQ* z10zcw7a7R4^sB(@$Gc@32_0!)+cyT5a10|>6T{+F&zCp>M>8j{ux%82YX_CSCod@7 zaTe+=MdAnyOEPXLrj0Ylvs{CiRI2ALO5)muNu1g4U|Exe1r1iAS2z>bK|Vy14A;{6 zQ*Rdkw?Bg|!+C*(hI#5^()E>t@EiiAokul?uqr6r^Y=1(yJbQIvkLcg-1`kO^lyd% zhacF)88u-zW@c|Aoj+kgSJOE4+ANR(XE{$szNRYN{V`69-$sU0_TH2#@J*GpLfZ2& zk_(Ut^#?D-H#jurys!fMXl=4_^}GbBR}KM>jTOx{8flI85y(72lFXLTJnrnt;Zb_* zd$JV_^ZBVt3}SuMXC!FuT4P)W)l~bnbn}>|xf{;;bgPw<1sD&SX%3rh*`QMMXes!d z|4-B8j}Sm-y&92kf`IjFj{zqOSy{a*fD>k_HnJH!y(^B_ENj5}S&k4!4319a)AA`E zX&h7^qt)fu5Y83)-tGzfkc^or+N5Tg+_VKCqYrN+pn2Nd1m3i&0T*<{LS;Np;htzd z;_BpjXds7g?n>b&do!{~dCU+8XUXnCGy*rohUebne6iDsRYV4)j7a*FHH*0<wysN2 z3NU9ky2~wy>APRDB!Sm0Z^XH?r68Ua9Uz|C`~@hk0o$H9PUx%KCkQk%#1|4U%W)WK zUT1(=)nelnOB?Xq1qsZd)73Jht;@tyzbCm@q&@DD!5qG|YXW!mWJTvw@%`0IEm45O zHk=8_;J>N>j+kg)DxDX1#_*1HO|(Jd1!H6>X*n%2?;nnQ{X=&a8IpEb6)AP}tB&3c z=!985+s0ehG~&8NiLzJ+7d0it=k6Nw@W?<Op_sc<PEQcwIdls1`ebM$GPo$?K=Dho zF@jHO#X+ZPH_&7EmAZ2_9X_vH(TEo=PNE#NxG^aXr2`W#9w)vq;!+hXC12>N@`xuo zh!0;)hw7`BH(*6ed17u^{cU8AA+6aRq~@{(#iRjLQQ%>tUWV^>98xP!OyRYPkf~Re zPRMg-#qf-IGOcSoSL|VQO1nqd5LjAbZ_9f6j;rW99v#e!JRg(3#7Ak7zc5_7r$vnx zp0gk>o*c;rGPe5^?@8N5n0cB>qPes)E<l>SLVfHRGE1{z_|N&Y6y7MddpU+Qa;otc zJXS$az@bviqaM3YH`qxwBfdAjN2W2w7pK%aD>U~k(6kc3@EUz_n}x?&HI0{N1BlNg z@w1a8`Rm9w#$cmWVLy~+aw_+v|D3}U*!K2^?i}velNKM&d(EqCZb=AB3=ZxZ=j2UB zo|=fs3QIK{x?z{Vt)m0d^hY((#+jG2q)JkOxi=y0A^M(TR%z}j2#SlwpSz^d7IvaO zjuI~Mk-;D56>97U2s?_(%BpnnJ@LKi;$W=O@xxN72ik7JYgBeutpWx9u32%b@RXxc zK1!v=g;PtCAwI9N`PgTyVF{<IfD^8yoSP!=m1=?vWmE7~r&(TvN)?4N^p~T=I1nmQ z&Zl$`0)mRIS%togPvx9fxb5PZS;~7+_QLWpf->|gNhYb(PiA>1bT6eIfiV2nMz>SO zm^|-4HX6IA0m=u(Sux8{;a}J!Sjy0+S-DrhkPDv92kM^6^EE<URGy(}l^q#KiIBZH zPMO3Hy(YXy;mui|+X)Km6#$n&XumVd^&QGgLBtNjZ0+QeFvev0wmA+bR}&-hi)Aj$ zvF@U!C~+9Or%lx;sjN|+G`nMY_Krz4Cssnl34anxY%9rCJ)7&P1wq;7uToSPJMlwT z(!|;A4w@Kof?{#@Qju5_`dnTkUMsCvl^nPAVQNBo7|XXp`ja!Bl5lE+7-PmX;AE>l z97FcD7M>7oKr8in2huCX8`P?ZkI)b<;}Jqp&o72^m+EV^k&&f<IV7Wt7?tUiA?Zs% zXd!XH)<)tI@r7OkUK3s$UZY&OI*+1=HxQu(lV2+}nd%EObYta~+D?KPaK?GQ$%H*g zrK%bv^5kUQ@}1DS2vodMHXL??(mhSk!gGv8IZOl`bHg~phVa(dG^;W~^VPrse;i3& zu9ztm|H5nJRbq2038!r4q982c1jtwS01B^|2AqK1RbDNONe7YzdeTb7U{k#+Y_O{o z;BdreH@V-_UQqIyzI+QhF>+p`iIp7F5ie$D*P~jcy^4b9URJd@SkNRzf_zX~6*xG? z8kLpPEkj7y<w}(nGMWmTNV||yTcLe(HPtJDGeW|tzL!c(h*qieq?LMle6=~7$Z{;U zrH|4Z1t#qt1Kd4#FkAGpl#|$wvxYXPWroU!)*0y-9KHv>7rv)*Q%<c>)<an*O?D(T zq=cjIw~XJFCh<2{MNwi36^zDNy6c+oQn@m9r))T^W1d({7lyks1(fK3I7YQ`T68WV zo^s1`SB3C?`uNk^99+~HlQA=HP?zmlEUDv&d*FNFd(!JuuKVG&;Wgs5f?2fpm5Pi| zP+lV)cCBOpFYD5%!<zGN^I^MGH3b~$bapv#w7N#)P#}b`;V6}=oT4ooS!c&(HmwGS zvV0w#W<$9Ej}7JMXHkeOB{OUHK5x+V?KUo<O)9|D59(H>;<58R@V)Ro>7c_>TByQn zz-uGdC@8P4O&`ym#4fTLhXc;bLCkF#n#X)a^9GJfE{%gF9AlWS?Br>w4yWamfwf%v zojz4~vAf8S<Iv*!LFw;Ue;mjB<VjE5KI&mYNjT-m+wxR3kEA2>j@Gu?<qPzv1ku>} z9{67Po^%?AQR3)ny%wy-Zzs2So`A<LgInAPExZ7n2D5-`Mv2itkDJp?Qh8r^s;Wq# zX=IEsMtORB=t|YVh%ioYJV-i~wzZTa@Q;ZXdoBSEhnMT`D2Iq^Dm3WLcm)ZkY~~{M zlWiW?FKxhrMhm%&RN!l+B+BtfkCDgBW9NI&_M39Kj`f<e!MK+$MmEzZk6T<L+$@r; z=O(N|RCBphD+cI((y4e)>G13-N8~WZbhE~~m#*Q^3zZ+23jgO#d59KXmscp)K$zKB ztQBgNl5onoC;0^B(ioY%bd6hO$V3*V585*wNfWPK(SUPEIzX+|LOIEu!ei%q;CtbF z3T20sgnSi`#h=-i_C+h3Oc^~?M##?AL5JM@2CHm&Tbi%f0mI3>gM82xyi^sZ&{s0X z1ba>7Gkf8=Bh_+g6r*wtQ3UA_F+g6=TFKQ9d5>(knn#Pyi!WEGj1k8wF^`#g^N1_$ zMP-Q33%ke{hz#`vmT`tPmjv}tP!(#Ccx*gI9xIQT$IkZvbx&oez*zv7J>#yZRw$n< zqZFV%n0byR937lj`g;os^Tvlach9K0yHZH{gfWCQCT6cVgoat;@Le@4M%8RMT%oLo zCdu<BPhJVXqHzCQBA_i+t~ho{LN$~fQphNo$HtL-AtT-|Lzw_u#S(CmDwjWa!^#G< zCS=515R^9p;Hj=hp#U3=k;lqo=CS*#W{6#e&7$X?3$Se(cE#F=Z!ycWE`_{3k5wuY z3mc^k$Mee*QP0F$!T}}W7+S)q_|7(@ONOz9F@~_l#K`Cnve|K25~uRnf7&Bu8nOuY z!3iI3c?6t-F3sOHUr0D+F?GKjj4imWDB)}x&KJ8MlwmG46SK;&xXBU~<(@M?fhJN- zJRjB8;g7jNcx*gI9xIQT$1V)TetDcmVd?V0fgB#}&lRN6vZNk`f^Iq!MgeKd8E426 z&H?V}PJ7BylUVunSDTx$g)xS(#>9u84czse6q;vqc{j*9k(C`1lZdgP$=RQB3-vro z4mdKzL+I~oT5M4q3#y7;IW&$S<Yi6K;%_09iVb;!x65WQC^GSyHXDC`dXp?(r3-1* zNL_6`4($f#G4fb>%<4AEwi|USQ$MNitWH6#NjXX+@hym082ZxACR<3>Wnu0q`-w}v z2uFn%z(kcKTi-JTrZBeL^_@}18WTJ32X<{3L%e}@fyMH;g$jdVLDZ*(8Kp@YEt5xQ zQrJAL0(T&&WLL;tWH`RNH%IQu05Ln1&{yiYq<<z<NsJ3RWB9AJjd&*6MMPmmP9zOb zsG3)4G8NExYAie^9vhF5$I3LJjO*pF-S8E&4Y3Bi76&KX0s@sqxH04z9wS2)cfRNh zWp0+*&CjHRBYV@TBy9C45Lm*P5^u;8#*8r5NVsiiAEuqytrUF|)sntV$%x&B6Q}gW ztix-}u{a`<l^8JZmC10d2k#izOH$6y_os1KHHa&xPR*6^SS4XE&kGhO@&5HKxM)rc zrm|akL3KJ|`k_uQJQf}kkB!I3W92a?tn#K8F!37jS_lb8^+GRsj1-CoDMz=TN#3`v z25ZvmCH+3t1&INB7u}ag+*B%kRXkLpjf7ydg92kv)Fg)Jg#*loKs82&f|q~~X6|#u zHI40pRk1wZ%Ybtx0ZyZ>B6E%M+#8ckn`oE};#@_)R{?6NL+FpigiKe?i{lFywd2NB zO=#iTGC67N;mvIu<rTR_;WI-42_p`DH;;kG!ehEp)v+$OGbISs{N**^wcs_et@7D8 z#3vKNa%tPM+GB#}M4Cg1?Kk@KSb`j;y~74$U7Di0Nt@g_CFp~won8POpNz)nLlJN) zKEgox2ziotve-p#m?*1+Gl#q)Ea5cR#Z-WD@w^TK<k*NuhjOCAoK`Q&HQD-pQcAr# zr^6xDrAb^Dl7ZGDmsy53p6g1Mw2h*wWt`&o>U+~&g84i6ySQjQf43e7j|pmw<(z-r z?~Xs8=bqO<v?BJ(6YN)*3zfRfMc>Y7wb33ogya!+&6j%7*>=OKVnM>G4&LZ*^=M4J zGzpwS1(k|x5a1XDIEFvv&6OLStc@sgsdkX9qmK;83sqTyk^+wIHV{BmljFv24Z^5! zidFNUgnU)~i<_<ea(@O(8*Myyk!+OVx#f+M;c^JBs;z$JEE_AEn{gSbGGE@7!XN3B z=MZ?^1TxIHr^0E$6r-3;8;+ajT{$<78&{J}sVgqh7PuF=p~hHFVpYwuCBy&ja8|5A zRz(2%W!jNaa+jV1PH9-$RE#as=7Lgwm;OKwEnx?Ru;G|h^G<62uS*;2piH4E01k%f zWqLBGTGqJEuI5SFNR!2<&pET5lAi(^Q#fyno4cJoD<*2@N(rZYh~udvmU;X)hq5?> z42T85AqKQ7;78Ekz#E-6{PJcS_i}sQ0~!39t{k8EyeE`+VjGxr`iJv$#OLYo{Lpvs z=5=*bDPgc7^A*`Go=1k^S1oTKZ&XZ#Bk&le{%tvlH+f8b+aJ5Lxb;w`(D$kwwpDSk z`4Z^jbpLBx9g=d)vfZ;E%6QgNbWSxfte%7;+%zO=We&j05Al-{aDw~@g3MuvniZui zeRUF}<GJC*r%8I8CX0JUg(tJrr3v&R@X5oiYo8E_oIy$3bxfK4f_KKtc-YXN!^8b~ z0jex+m%3&4RMH+PQ6EJmdaffE^m00N7n8Jg2C0@?M)D%B=s?OR!@Y-WR_&PZz{2h$ zEh++&dY#8PL6JU_1KikV!F6q}B!IhSLA)>?uI$KwWtZD-qlU?Sniv4?>&xL@x_q{y z(Kt)dlK80e4SA3Rfq^x2xSTgTR#<~_ghYhn$k+zjt=a|YMuwFqLk9erj*pIHKbqP_ zzNRhi-%O6cP9B6oqm;666>K={$dNUGIc7zBa;8pZsVEF!my>$In{Df`#9PxW4-@(! zkJS_OU0>TVfq#fMVM((kTi8_KxYvewP9@-#=AKAb6A)ZIKQ89{;lVua@0WeTw~tCm zQ?}JDHr@0J^=VY&O~~iCqy&c=a2wn8w8<{)h>5%?P9uQ|N))P%QS8-KDc)k@e74VT zO^GImI-9;+d$G`Tj;?iNyI~bJuI||^Lv*pNPRSt=JnIz#&Z-x3#Zm(2^O4egc(ey2 z{cOWA8E`BZbIF>AeZ&S?S$Z@cR4Xn~&kz?x+E1>%g~Y6^@sv91RDTw467KByXWC?2 znGyK_FOwy=;ISg^=q2X=(Vhtbb_*Jkf;lT%FiQc25sHGH*Jz1!5ANU1Aj5|HZ3H@f z8DET#OK|e(c}Pj0^OG_WQ5U7}BqRLl7TJ)G=ap*_Yt>22InO}_^DDyADxaed4&?Fc zgK3PUTsR3!I4H{A%#Z##gY1ODJV3-Yt5Tb*7&IMAem0vUIQ#;I=;A6_a9r9;?Q?<d zon!ds`?lkOUoo@Uwpf$LZUugR<{-{H>o6MI=OdG~#4%stw!eY)?a_)bN^>dzdy=?C zZ&{*_J=wLA#ocwSPN>0Jc~d;3NbRGCJPF??&|zaD$D=T@2PJM*&Yr`Pm8a&OK_eLg zi6wLvttSbE+o$LjKK)sbE~#d*Eryd3W2#GPvvZ_-OT^X$Qhlm)uwh==>3C-EAiLSO zcBU|p@yb33kw~iy(hEtoToo#lsx#F~x^L7^)($q)o)Hp`4rs1cK11N!h$TsPp4fv& zZyOYdA5R)KL4AOIcL6`xl)>s-H(}1XYmnOA1T$Whk?NL`oCm_E>*XYU#DS7m0pySJ zRN-HXPKVVb_IA<<-zUmr1Z9OB(XU%|cDwapMiiSmpVSYlMD2}FY90(_$Wxip+M5*= z8WKXrDJdA9n=~htW(~)-xPDPZ(WV~5kg9SucuA{m!z7_Gu>Xn-<D$p5Q{H|}BBzZ& zx{(e`&U|0p;uHo|j<Y0Cn}f9gKBV`Ky9Lp;N+l_{Erm($*FI9B9!JMw(#^NB9`6^U zicNch-n5Y(9iH;X6{CVmMJu+S0EZJEb^G6Ph=xX}Qah^xSIvu~iH_^Q3(6XV7A_K> zA+h0S`!e{S&Epu&20}D;tCVP|<7b4E%2bz8e9oAv4yoq~e-rvUvjp)xr!v2uYM(Pg zbIP`|-;*m`8=uM@<Y=m-Jq~WXW?n)ZC@e{qtFXOaX!-1ueJY230vt;vP*q97Q3LZ2 z!*w?j@J#4u<nCf>Xeap3ZYJ}6kIWpO^2e1Jsgh#&KpmNou>?9cq#Os5sTPEpftljj z^Aqw^BoHWdoWxP@71Ca`g=|M(+mRwWlC1P<nN#w<DojS`V&zH1=%|bB1mP?Enm^@l zt3ic`TgAeh4gRfN6WBq#WGPj#obwv)y2{evS*lE`wilJBdZGMOwzY9RDc&@uQEtP) zlPm%Umo>$E(7AXsxymw<v5bJs38oyA=V#!|-UPd$TehhRfGS8hg%cw0i-_ZHWuPoq z=|}!fW(Mx=$hMrhTtB7);%LEPrBIKhx$p0u5Tz1?giyVJts~~hoGQhHuJCKMP-{m7 z*P1er@&R&xv)zWnEW#1R<*X#hAI^Ds&1Ab_FP-40GVd4G&e`_Ip3ey#ds98`k?Mg% zma~Du9_)H}Gud(SVyLA1k%S|ni@EAHEy}VTv|@*3tE%did-s*HJ5Hd(F%tuX++3W` zD6@#jE?o|Yn@!S=F#45A1P+s^(r3%~qwnlaljkZeR4dI;wbL59_Q?;~lQ<XeTRSK4 zjqNEhw+2ZW<&H;@ZWbBvcma8(Ua&AJ+QNv}%D_lkMPq>FB-DF*bFx3WRkdJ0DcP_) zytNbf{Y?k)U$5>%-#+1?V#AgxEBz6&3?2Y}^lsqcdk&#-mMc8wzE|;56@^X4B?L$` z{6lwEly%T`UdmBMLNfzL9KUR7k|Z4mfl6*HcVL<ys2B=P>mcvXcS!vI<fbw5VEKqy zMFVbxJICi4Jx4rey)<{9*f=H(#UdM+=GHdLUqn0{FLplh5ZeTKJZ_mBW8s!lyJ?U7 z?r=u*NY@eV)iD?cw)8~AN6@q9ASOoSD^6T2k^~&~RAq;OyFUXwdh<avbZjNSA*sx( ziW(TGuw1S<j;Tm=Cd<*SsZUF28HiR0W^u@HxpU&_;VDvr=SK&sUzHjU%k1U$TP zcuZEsVZXjeck1N1;yGiR&41Ax_R%IxlGIu#f>lOhcF8MsW@Vc#Vwn;uOrUI){X!qQ zV=Rv+$Y30}?0BeJhXz%#ooq5}EN*H)P<X|2b@md!9$F12v5$V=45?SC52-K%fdfJ1 zO6?iRlY2a0c%dA{dI|<wLza<XW;v7H)T&NSr99PQQ_!v%&wBXRM@R9wt>n4Nsj{%B z&n67zCRMOe5YH9Q8P6ThAsceCer2o~Vk0Tf)XSDM2zy|GXUinraQqWHJa&(=N7pS{ z?W;%H7LXSh;=21nyX+W%V;KkFr?%2_`B3@i>Wo}f*k*6lrlGv>gxF?z>^NpfmSbbz zOO_;M0A2+=R$(S`Ea__=OS$;cwiHP_W1@N+yUSIMX<2LG)&t2HDtYmou-d|<TY0W{ z&Uo&44js#=m<>$S4W=*S+`Q*4OkgG10kdv-0{sN9sEOcUzx&9$xoO0Ot|jVM%YZ{( zD4{V~mWz&tt!VAoKj}4Sz|o#69<J585An9G<gX26@_2Q+IQZHkMhL@sJ+~jusz5yz zuvcO-b!{lRWzKEl_=&lpa*&mpguE&QmP}gcA?fbZO1<JV4`wb~0nbd8c2x5NF$W@? zpXOxmn1`?Ln82rKu6WLP?hK>+YLw<19uy~|+T@YCpu@qMR+ST7MqiNz6+VRT?#W6| zoC=nz8f*9@Z#fB?_?(B$Tee}}rd~`DYRu3&ilhSM+gxO^m0p^F;px{ZKlVV5jxF$y z6X4uK-YVUmyPP_nW|5UGw#aa9X%2a;Ds=B6AW-e9Q8Fa|`(vZ{5UB|d59A9gl@EgI zc_OMve9yX)9nZxhgL%C7p%J|2p<#@1+5+hrJa?6vns5u4i|54fs$~smRZ--Xkc_zv z%)R|NjE=fO`d9V7szYAhKuZU?2nUDp-*4W9-~KO`fUpF|DjQCy!c`yvr~jaj@k|_x zmRyRK_NB;XOxpEY;i#x2ue%IzDS;R<(lzrF=%7=?_ffV)M`jTQxunW`W)Io+{+!?} z$1*Frm@LhRrt}0ln`s<9G!I<LVokFn)CFFZjEXO*cCWK?lJ;DRnl`pnl~`T5d2bqD z+?vAA_NU=;z#DCJr%d&2jzy-*qUQk4*DP<qn^rZ7QmT2sOlb_znv)DBytgllA95%~ z$`duBt61HSL4^Uw!0_P*@Uu_ej9hvIw(zz3dSJzR^#)BH2kVR;2yozD2baBk9y*pT zLu#l^luD}-;D`k!4zgngR<}A>)@Y;ADHgph^+w~*<C-xnu5<UtemXVp9*`*(J}TS9 z&{qb>xFbt}ZXx6OU``sbS>0=j83o|+%QPR=rh;Z|$viX80py5U2AeNzN#VAGX>kCt z8dYh-I)^j3TpE?ufODo^x1v$lZgeS*av6(tVCW7q7IW+tmlR2>ikVfc?#GK`Al|Sa zBYn5vvESc~;hvO;74ZFV0Cs3;weh%NHapMnCIir(5C>OBwNfiPK&Sk#4`!st$|&X{ zm4m{JaurEcH>_+#1G@zBLB)GI@rp?GN+t~azB_|=+&_$eA{Bze_4Rvv<*k`cT9%M( zQ0T@iu7?Qx|Na4a|Mw4Mp_{ey993GCFqQto^?u&Arb(#aB4<kFag}RMG;zJ6-yX_f zFymJ@*l+T%_K<||C*-p#0LS1==)&vvQU1_E`<yJ!I{$7YuoH)~SBS_#vrO)xC%Fp| zV?ls3LAokuRzGKcywJa>oPgu28oyi$l)FK4^53RRPN;Hj6}GidEiHMX4rE;1Oky<0 zDLs>n+Z-LO8_4B#IS9x$x%DRTh>UgR%I44rN6Fxu$?eN)z&ya9JCT-!WlU9Ms^V&t za4`62Z?f@%MG0KUJZZ=VbeyhIu3q)JLLnQeA0gYOICS_s=|Id^E%{Dum~56s?_Fpm z>}YJ_#6Y&*Pcpeq?#d+#u{wyyJuF+BgW0-{X7DoD+&-@m0#k7o<^^P%6G!6CC;P=& z1OlA<q$j`RY8ABIAP{1FJE=6H7!`SnIH^>Ww5V{dQ^BfFH|@}PICo|fiPBHdDaXaK zIR2xNUSs<K+c|jLDwL@ZVo<Bt6OI(NR4f#apFJ>~OZR7T82n(*1irCz0)Hlt4BJOy zs)1n;R6bBlC;f6Ep=%Z<@y^qlu#|wuQtd*^6}QD|8Urx<jc+-W#SeB*V9%J8a#<dz zc)(n7`AoS9%?w=cC)oO@+i~ZQfw3Wnp7+9niZ%I9eJM_i4EXr%w}HlvR-Ap+0y<Wg zkOi6(Jw<L@weE^{d0O=NF>&@RM=)l&jB|w~Qu<;p;>6`Ec8$AutY5kxEweh_0PPmm z#b!om0`4D>VFRNCLJJy9bSCAp=0oL(jT!}<V9H}3MRnw%ft)Z3v%8x+EwEZGlZQe; zT45@9f#~NP0-4vZY`{yFCdHUltYO)RJ(GO+vikVRjbr$~{h5NG5L9n*eNv(5^pAOH z?YI-a`qIzwu^YA%*hnn#+(|fSAMxjQ%ohn*Vs@=3FgJN0_KrOb*}O#`z}9A~(s$%3 zgBTm>HqwT_wK0uX(jw2HC;T!BT{<M5D-JGbvV<3ci@V=WV!fM_r);iDVyv!DBf4wS zM%+ab*w@??xruW)ceaCzNW{OSGmhDzY-LeSB2c}i4Wm$Ew36<AEs^Lr5=VizrXjLN z{NX?rf9%eQ&I4RfsyC$yFxy6<>_j!Do#!b*<4qF}I5e+sU(<-|N!<>wNjb?<2Ox)u zu%Xx|&zzk!RmDbBhgfCuTnn+JOIUHQzzj`cEYbIHBv<%)^d>qM3?ngj7UGT1gA-4X z5!s_Js5sz+7c-#E<&sEqMq5mj=1hdTCYGz#2#c`1v6nVmqJ!cCgD!??u>-4mIrZ9( zDoQcXvC7d7qco=N#EcIN%i`yp{L0n@9r4=CUM-c#s68DBj$;2Xj=tHRY&^$$QcEtP zyoH5AWkaF%LH5D!rfVzNBYt@xjj!)W;fLgX*+ZKu#lenbFt=>g1HMX<jTvg_XV5|O z!o^9v`;2CB5T)~Sp3CJ>(B4Y+)Nz;w*G{^tCnu!+ihD7R#0x^-xFw2gZQJx^JoKA; zvFl;USw$>49^eG>__OHtc0S}|_oEgrxb~TtHNOj~VaS!Q(mvxw=XSvKkaJ|XbR!r3 zhVs%FWm2v5=8jq1(2N+2q{Q8H%8g`X@=7&p*MwU@>4G&Z#B#ZUJBcZ8@6O_}Ay<gw z>`HHO%t?$qsrTKK%2_8<OzWuc4LxCmCR0CViHnWFw;ageE8A1}!q##8bYF%xl~?Q! zY#4?6tELA|cPVC1!gC31K6G}A;6I^ym(gw`)(I$7@VkrF^J5#int%t>HmYAqz|93{ z?=mscvmO6^<Cn4FmR^A!VXt?H?4xs!QOJG3(BT2(()ZE_ETG>ys&!vl9A|@RiliK_ zPy2i_*qz(qRKy*uyLEMujpQxl0_E-n-%uN)%q`GQm~;^=PZ@eLWW?D)suquR<8Tf? z*_*~PlG1pioZf2FV^!e$7&2?2<y0U&cHU7EA%!7Zsk<8RkGc71p|;Zr&7~AL_h&OF z=F(3tw04*zoD>^D)NyW1i7%=qu~e9M<>7MH+_;D)K3gScvh?Vb(Qcy+=^SOx^`SP9 z)OT=Ps+ipUBUio2(L#q!3q%-^xfes-0}4NaV->HmkHKj{p}pdqC1aSq@b`!(E+WM0 zD6$T!qFNd1+sBDP@9E9q@;Py_iTDI4M+*-9ojiYO+I3tma*?v<@J6|fyant*tEyX4 zFG{GH9^30ou47HhI6)%+HnM$fBM%QZe_KWd@H5+ESlMigi|4PMo@ZlxgWBlafq|tV z&F~yAdc4W?RhdzK$0%(KE(FEn;R<x)^aA%w+D!n>ZJhafjO;Ue$is%5Dgi*>#bdVA znEjyo`C|GI5k=C7x8~41y?IrW=pq_wFj7_ucb@po-mKs^X*dtcl2dpx>?SZkbYn>D z#jJ(55>||0;NWEZI3d7Mup{O?Gck_wk^9ipzMpRN98{Ua;;VMFzdf80r}W>FTaw*{ z<>=5ECRV9@)tTUGVmdzcxd#y2O@bOqY*LbcsBkh0jo+A9-P%2#mSF{+w5y!f<`4)u zLhWL^7<c4cL%_sb#lLfZu({;@vP0fEQAfy^y{s90MVbXYzm<Sw*SP$>C*uhtCmVnD zcNKtyKOj+DFPQ;eL!pZbak%XFESirOE=q`)o7rTj&3nbts%2eET_ByXnN`nw>CiBQ z!eZ1$HAs;q>+Zq$=v{;r++CA*=P^C>_A&3$7i<y3zKuD2=7#-v@jvXr+1Jo9KPr>7 zOsgt(9A9N&@Ivn*@$$Ea(s<G0glO|p?%@>TbJXw8=!)at&uPJj9v#C*Vgxf`3c#zj zq;s@!Yj2dVyYu=%LG|*;DE9auw-@mQxL8WUX$?s@+$x4oS}teh>qZ}(K0}W)gl=r0 z)@3tBl!W7{DCtqw2UO;*=NpBb72WZn7ONT-Vr>E$7j)gi1l~nPVy+~h=d_%pHy7v5 zjgb`i8}f`kFpv|m4u)k`H%XI+CtTrNO0>(x{lD0XpMIi`umS>be9t?U9(-&GhyNhn z5Fk4NY`KSa_k$1N!fT&E24_HZcSV)dszT*I8Y8!D{qC+5{&IDbFd%CQq+BPDwq^1r z;|=(7a*Ga<y6_45eFvT5KB=!Ur+V)4V=-@7*fE8N%8;&cwg1@&KT0-~QMJhqD>b5M zH9t;-UD&@aW7R{AsbpefoFpV|;AUx1+h%I9%toPO1+6KEKD?L?w6~HAe3dFY!76H^ z%(_&8hYg74c3;{yE^J?@UV`SN;fYlil5_k)!iGn&<!<?k#*AZ-ecX@r++u_8rdf9q zm#(EpYv_(0RMC!8h)N~9LqCb~|GO<Es`R~}F<G%OI4Y5lC*ch%Wrpy(H;kZ<qy)c) z>qbn%j;Z5RC|&s1IrZ<-Uz4em0zMiudARJ3f7;v_{_)Hf(W+OgQRN03EmevRp7fpf z^ks27nGXU2x)^y$Yv3@`@pyT{ggXcu?k~I&#*CxT@$Ks}4?>o$=vcKIbFDi_pXmb^ z12n1<a6E~0Ak-nUqi~+hPV#t&qU05b0uC2+=fJ=hE=uBq<SJdzYQZI&29F_TR$Sve z<$EerayE{<%wt?fd+*fGs|T87lOe>pYF+{#KDV{d7hF&U_B!X1u@uT%jQh`jZ&zA& zZZeH(r7uij6jj;Jum%Vd{wT0P$+c5+r;gaO$NyjsF!5ysfJ35^)kU&o;&eFiWu&{r z6=zkgpNu%I)lTTm_`>eMt$}$oS<!K!{5BmZmob-$U?VF(euAW&@d;npH!592r=)Xx z3RgYRBpa71H*wYcq;N)DIZw8{PO)@hRwfx%NLTb-18LcP;<sch=HSl2M74QIm7yT% z#&*)=3cnp2w|yUXeRmjp9xhf74UUaD#|Iq#LqoI;2(bG>a&K&KarrAe%$m0j;{$W6 zRVOEW_ok|HHbnZZM~uQ<7udzi$t9H#Fv77XtY)oib<jlP*g$%BM!9^W+UNB_x-!9K z#6urCyA@Y0hzm7}$*BM{6&l+S|8Q?I_DcO|ZyNn1!3UO6){-nIHAI(O^RpH_fpqHg z_{?h`!^5}a6&A3w>9`;8<a&_|02G~~NUj@0>#SdsRdh3suc}p?QTR@tAouG{J5oZ$ zl5X<KoCw-uz(40Un4*5pN6u@-67DI@>XlI$hK=atNtfl6fi(fHBe(Y_&u_&QT{5t* zQmdvth`MFaj!{=cUT+yKMiy4zG^l37&5+yD*@~_uzk%tnE8LNFZ=SsV`I8%c3)PPZ za1u=(yj+GX(aX_1`z(5{NtPxxs@9-F-yug`vMcr=iJ|M;W6DjA$)WXST!wIpL37-| zT9S0QOz9p{^?KQm%qpH8fljTEw%2%~d3u1hq$S$ByklJxE}A3NDE3B`tG3Nl(uLtU zfR)|g-`hQbZ|<59hT=GRrrg@_OiAQ(;@#*zd^7I+=^wH2k2K(ZHgb6<f`}*XWr`($ zkv{T6-vKOH@8X=RW+OdzmZ)QDnl7s4BG)&<1~pohL0TYAQe4_-ql=h`RjzWCdkmAd z188_=M!kSMXC0*8JwnFpp={9=JfnNO)Cd(q1?ZpI<g$P9;v_z>z7=OFZ<Or&RJn!H z`BKcQqD3)XTnk8B-fKWDcSTk>n^!s)lHKO}Kf;&a)=gkT6P4uHyb~JYiMyI)EgZSG zlAV7h+2%HSoE7GC!>IavhzM2XuKWh6Rh$f%QgcwrKs;^Ju~cUCi<czv*$dlnX;)mz z%YiIY8mU;-ArVYxsU)quj|ELO-nym<?_b}7<t_5eG%H=Q1FAkUZKVzUIZ+h-k>0E{ zn3y#aQLGE0XT{!6Hav_%J$K`Too6R5mB>_cQ`B_iP*XQ<p>5W=q+TtA>spf<D_4O; z?1HJn?MaO}ko83=iPK57X^a_#VpJ88bf8L5syrAD80)0za=C>&f#4W<u!M?L8-~Cc zL0W|p8Wb1u;<nBUk|KtRlQEYmut_O3s#52Hjw$2(>TP7N`L8F&L>X0&bS%THA^z~m zTOCW#MoMqM{lC2lcir5B?wzu5I%kESpn>Tm0Eay;>g@-f0D88&c;*czS~}KZY_MHf zsjJ#-w4lzA&O1!v=tf#VZc4Vc%_#)KR!XChwY_Dj2%fri?Y8Jy&H-?Th~Y=vpqOS5 z2|JbH4K>&7iMnP%0`EPu8LuR;(Ya9~xW1BVl!_T+fs2z{zqK=k&ukupoAZ%KSW+Oa z{?y4mozEI*pSK(N{8#YBzquEW-!UO$3Ct(;Ooi!WqxbZlw%|1Mp>f_%$REE;cId2~ z5DZ;JVILW5KeuHZzuun~^TPI=N=IpigUMF5TKI?4oAJpDTJfBP38}DqGQPt$fk?|L zJ@LGXmdz@owKHMj{b#k{^B1?{in(ziS?K=Xm6j&5x}hIk|4Sx-Pj4QV0e)6Z<>RS+ z&6&5(PQ+->TeSD3uyWFS-a6^8mjA@a9p)i5GKxfUEm~)vOHZ>OkpZmgE!6{+;K`%l ztYzk;v&nPC@i{h(LQUF=NIGi9xX`&n<6wjKs%A%IUvs~y9y-~ECp;0j8JI@FwiBsY zr#9!phGxq8P#!lBB%rx!VH|H<*@V}V8pS0>IJhoXEWuMTe$b^ixYP+R^w0OD@mT_! z-Gg~p+#J9(Y9+@^r!R5Ox)k<q`6+(;wVz_^o#etB;{EQOtgrs5d6wc0z-VuPjdzg$ z_tG@Zd3rO(M$QtVRSkHom~<90pK1d++2wgni-Xp<iDD!5%54CSdiFxeirg^m($2W} zok3@UTiCLi<=1|fg<7UUuBpm%<HM$v!2Jb_6ZpH+n(>O|4QQf`J`pMlT1m+=RG3jn zRQL7e@Gp;!;i17C4BM!BWy2{XJySf;d5eC82Y>q=eB+%52y7$<xcQSFs{IrP;uqGo zZOJ`o#(X+TuAx<)13QM}g*I1gVRg+GVy;7E%VDn-ryg8SI=iJ}E6SNwe$>sND>JCy zxxo3~(k8fSUR?B<`X;$ThsI@~mn`9H6nZp8^dxhu=9eWzmL_>|IYr@``EmTe)lImh zGltpmq6HyVLBnvEbU`g9?iJ5`$(|`rso-SMnrddqX$oAs#Pj;dGxamE*NfBrls5TO zlSH(~itAyF57Q2sJ%&~1bij$PL25K9eD%eFRh2|fD_Z0fNjdw;kjz!=xX={abKIb^ zT?@jcNb{aNVY%MPVsgzcZnUtp*%m=wL+r^)c_OZek3!Mez=%|>qs^!2W2IW$atSAo zJy68eml23_RYq>V`+TyOHPgJZl$rCSlv(N8<2o=juF}Bwjd3J#3g6qE#zd~D)78lO zN-%M=HrnQnp|$e|_|xxyfLlH{f}WH2Ooizw0***J34{uDXtRl34-nv7*o%gia|sa_ zsa_s6;eQbkoSgVZBRRy~49Ek(-5wT^m>p9^s4G24xl!b|=0%HI16?#8?%sHMYm7Sz zV}Sk{S7jtTp=z<DV??SJLif+=haU)_5gsNwOj?r`p5B$f+t)VX#?`Wh4R7?UYUX8C z!8l)NVyK)t`^m2O4f05RXIC11To>D}UZ1n$4w=gen$|<uxACL+;$LpTmOsg|WP0yE z1+q?QOcLQ7jP|>D=r=u>w{iuRpL05LX^ssyRX||X_ea5$PAh(pRF;jSo=CFf@}#ae zxtv0!Hx9R<(X~(bpSh%Foi{s%^XY1(Q@NWAp4^f~`cP%Da;rk&_O(WO)0(CPY+2I> z;#9F53(q8}=H284{Ofg1IA@kqkS3%T%BY$bP`kgG&kmD=;Jdpg$o)Nz!^DTOXM9aj zAhZ|$+1xQq`}!yN+>PJC;awhNg(UA(<S_dw|D_hE8ryu)KBj-ai+KFInBO=bTL)e% z)Gph}(fi_6pFuTL)}1ri01x$M@gI+m5}!7U+Qdv;AU$3Mj?~|n_hqy+kFhgp;%c%z zEF?ASybcGC4a%Cpj}GN=a3rtm7YG2-UM*i09-nS1mnj=<3c%p`VQEh%7C9u%oJ&&S zdQy@30AW@6V*0(&(bA(5#?31B4%6xzUBjgAeRtOcKEGugy)4<Nnn}4@veOwxo+dd) zqL@j0`4_aOzlXm4?xekb3R$G5?oA3jUqm4~aRV#YccXccLq?Nlktmi>iJjH2)TPK( z>J^vO-9?*ske)cR%@M`HrL6~5Q&~(EDCnu~2RszcJYP>I^_6oILK<t}&Z*qi)i#CO zpVb6bCxp5c7?WDo)H8+eK~yL7CD1UNCrIj>Me65LS~r$xUQKqI8_6hq6#?|}W?Rf* z&Xe<@Jy6vG8*RvDiENN0)tmQD;J>$|u#=3%+)R&ovDWHei#^NM_Q3DO$k->b>CQXw z_?@(AJbKRagd6n~=+ptnSB>+yhwwwcBN*?^WBt`FWY1ZS%tV7Kwyyc8`qLTe7{KjH zxPt+!FCC=Ha3Ge6$`n~T=4LZOZc{aD{CFOL;w5w9xNcEWB!zO@mR>qBN3(u`yDiaC z(<ppSy^*S|E-zC`He$J0m?yw#BA|ILNu=DW<!{JFBl<%TAhRPNtQK2URG-4zLWgE# zY3#q)pTYYd85OZMh}TNFiOE|-{Oh_V8e99xVEjGY^q!yNC!ZV=ryB2Z|J2dZMk&T= z#RAc6o7a1EbQ_i|`6^jF*Q0;$MQG~qxG|wTf@@<|b&;bS8IXT_h}Ekx{QYT7Sg%S+ za)ETG%61abe_N$RFyqE-j<z(=LP*2lvzQFu+%<w*vT%!BR<||{<ltqLT|jlF<GMh6 zCsMo*idFflq<)2~>oJK|%4$q}+6OvVNtDzC+DU3TZ=OSvUJPr=0DKy$PW*FLsAswe z*mh9>=W4B+_7!U{nDB&pTqZP)Pi`8+0a_<sOtvivDGW74(%$MJJ?fxy=`M7(eUtX` zPG~Eb<>)<rN>l>CfpnutiV+%S@x-<VuwcpUXzN-{gKU>kJ4W@oJWL_Y+?FHl0-VFb zv-+Mhnz6Rc7IqZB%ArJsCTlt>-;*{TnOSV$EIQfw;wQLs#U0&Q{Dy2kT;ZQvws7BR z{+Z7yh?!KZ7)ABVIPsG<IL=s4=!Sw~P@axj_rl1>-5p3;NhS=mk;=g~taIrepFKYz zRHnH0We2k3CC`R7y4y9Nxa%TpG1ZoLh}5Xt4rlRMve`V!O$h0Qn2r;wEn-#45`sZ{ z*C3t5zrz!IA5xwujwsHC_V_9Db?L~a^VB6%UHg3C?`}F1=U@GIIJEcm;x*ICslnF_ z=|XQX<Vnjmfe)YEiVNoyEA%6%J@rHbh2F%v{}Z2@+)DR%B(*)lhGsG_bMNjT@9RPW z1;Ek9SeBG^6Td>2g=2hgF!jabNE61?$7-y;+L)8XELDAq<B?Xk*uulaWj@a%iIao% zc&uTMliu95My_-u3dx3(F~3jVsE?5Jynom&c%y2eCG=4!N8lp&=KLjJ#)jKIfluDB z4MT^Dd%A?YTRL*cA(hWc)qDBb0iOG|zrfkod<OA`S;(h70v!`IX4BMm15rPSxaI13 z9K+ElY$dvQmllz0W#GmBPIBz_6uEI9c|Z=*baTI~ZgQy~NV%fFICsa~GwupkJHG}l z@TBF=kmOS^fE<Aun2f$*(I_~|PYo#AeWqIaHpWRUB!l<@QVkbzz#{?8JhIQsAvK8$ zmd&TfOX&G{s6wKr0`?4J@(^o*e?*)Q{nMa8We2HF?E3yTd8D@Y=fq%Rsugq%f{pY% zIOH15PITju-@OyJe*Op8`3MAOIB}2mbjiM~G%A%Q9+;^9MOeR!27K?$_u^SMe2WZG zuS4%pI}(jbGp`-c(fffJf+d98$diyF`!_Q;OFV6~0j!`{KC~7X{b=fzuiE5t)a~MC zOI(F}By8EGdU|iB&9E=!;V^;CK>{G|is`A^JuK?WCYiEpX0dFlbh&H$1WQD6)0;&j zFN(1)rZOS1R1#MSsf01YxI2sHlPfVY$Z$JhmS|2RHP)FD`pYV9MoID72waO5TD4T8 z!DiEtD^&Ea@0dW(sPsm0i|86uqYCVgT*g9c=KxyCZgcO=_Y1J$ECLSj%cV>Dg{1`? zCXeKIVZkGGY-!yI$Nd=c?qa&N7b}5MOO-VRIyqG;z@QCr@1YFdNt^KlXSLvEOB=|Z zP`hab1=lNYNEB@x;WzN>>{e%$<>_4#OteZeK|6+fgR>;WB`tfh9{T7p+kY5*SXJZA zB2+f|qY0t9Nt+2bgwvpsuq426H9daZN^>@!9&|OxQm=FA0Bz>LMU}&3Dj=~`J(#JJ zE8C&hzN?KvUdKXh=*#0%o5u0W18I!1@jfOKg>$tFHb%kH9k_SG!KZ1@9u~OZ<=t{5 zMV5X=i&n@OT4&{O=?j5Z{M(i2SnwVk-102gq;}cyEZs}h0|JjWbT-K5b274bRYweO zT-k`%E^oksCMhvYsQyH?x);KljJCNHHuZ7F%u*7A%s5GR3_^LOO1d0u=c}KAG`4$M zl`{-gKuSkI7oTG%QWHJkAiTtrh$dQX)eJe+lU0jzEF5Vx7fB`A{BmDfBx3%)JBP8f z4C>=Jo0?6&HOwqIbmBrQS+wRi7&!1zeE$P~z&$?)Mh4lQlRGJo!ij!u*=~qct6Z8T zC?7BVXCKdh%MEC3{scWY8`%t0f@e+g6rbFpH7(gWmXHDSjjI~*qQyy^)$SCmejJ=v z%bQ~A1}U0TCcDOkdS*(%Fv}1%82D1{5FR!SDg_UjF{v$iJ&;zbP30Bi2zBoI`k#-F z;;!zjm_RO!DN5beM4QZGu!Qe&b4%W*hmje5H*WdDxADUd3(Xkuq>F62EMHtcH#J-N zM36DD+-5G=GdhOzpHF^F>ojD>8%RIYB`#`?*9s0m+Jz$oIvWP^*gNi#QPUEtiMYL> zel|*2?GkE?kVvF@qg9-6LS*<zKH2*V!k-ZW7%TLBdJKg&!F4c)nnbS@HRfTGguhBs z&A&b}ipPdjAdp$Kebp#QyN#RY0KY!kho8qy|MYYG-)Ba|YrJRO@-?L?Z(NLRYmv;v zo<|4Kx9=e4EIu6_3s;E%5yQ~Iq&3HLqG*;Wjh8ttZ9zKu<3o87Td}IeK}%e2n4BjK zs#ZOQ_D<o#utO<OUNCJe_d<`SUcr>dVay7ulo(s;xnWh34IVO(5<;r^)aG&Av~vRc zMqL>`p}@O_^V#HH<A~wLW)lZC-HGr1>&Nl?Z|$a+ED`+2waNYRHMuM=;P^`KXd+!C z%Rbph`|<QQ<gjw>A`JE}7HDc%HBlk(sKZx1o=uy*48TDGoX5!1!%W2;AzBEL*gL`R zsV5cdXf(-oa+J$F&Sf0$LjBH3LG9#VKFbhl)M4`QaSLAdLVbt8W{lX{iOc?HHQ!g= zFkAu?i)=S0<}bPr`}TbiUwh|WV${4x^K`2E<?X0jdN0)xtH!pFi9A@!Nw)gP8aHDC zb4VmOohG0K#bV4g$(L@3i%hbF_7a1A@X=BHsW*$atZu@!3zH)4AP8zOLNKCJCf&xF znUqVLd}eb>bj9SDCh>Z#785X!N^HEdlzux(d+=Md7k@~5k_=HJrr4tuNbahPWFcD| zS|YQ2+kGJ2@gUB*lKubZBQ+dDERlmQ)?BNM2kGhIVp%NC>?7AP_kG?&wjJ*BIj6xY z7z*=2^^-s&dWx(H6ylQNN~+;y{MG(6KK$4ie!f409tIm_%(0E9SZlM=w`CYPktdaC zPLo;V)42UR-@>>5X&j@6+006NGw>@RpH)beVcjI=i~6Wzy>T4gG>q9x_ha75wFEw^ zkxAL&EHR9#cYHV=>2|C!QC0xxCiUtu0v&cEH_{6nkHUe1x{;a=o{NB|_DS2XbmTS% zBJ%oeA~pI~q(XgZTMD=CO(V^X@*GoiRjqO3uqIy=)bc$p7s>&Bzr#bn`v|`O{(U&O zDNbPHiM{E&6&XzBY$sYb<n)K3o&XR3b{y+2AI1DtT^Ju;DvuJQ*f70DNuPjP<YD01 z(3itK{aFDl3zIh5NzC>OIa;-RHxX$Hr%MPc039NC_2xunzW>>h!d3zv(~<Q_!-11^ zKypv<{%h_01Ge1zIeg+Z52A0sC-$N!s8n9NO_(ZdtW^!SxtLEb?P1G3+sUvT$D%XN zfD>yYlr>dWc};^3LJX?wwQz3IwlNR)_GLw+?vf^3NIQm7v)n*>IU;GNc1Ro^YHc`7 zK&wx;9nOfRbljZof&RP<<l{B3zt+q$3p~a#w!wbfe$$umoez8m0|z|8!loTmx-3HF zy+e$qN!pFv&va}sz`_*=@sd|@ErrwR_a?IEh_yux8<N8e%L9ya6+!wrLO`=?IFBvl z$<V0*4aB7F39}II;;EdZdiH45GilG0j;CSuiPwhnp`Rcr=4X2|!YKUx-Dz~w?`&L@ zDwI)Bk?Z6(B|2ut4K%d(V8NU(;Md>!9v=D4n0N>8!CboH=BM&|sg6eZtX3FfXld!D zpI@TmWf2VLdYY@YNt0FwE1OmFH8(QjcpPp4^6@9e@KZ80zIs^${$hCpmeKke#^m-S zQOlRg(<IdiG7@^64u^Zm>&V?Ne{(1!BZOHUPFez->ck5*l`RcnyK$Tm+FL(E3ZF;3 zc@VNhOb)qhWsEjcs5<d41@{|m!Cepg*ts>0b<chboeO4T@W6Q@_{g+f;n}J)W`<5b zVKs{wc_T?Y_mGXJH{**)WiF7erJI~8oURX}Na86E`9U$g!c?gTJl{Eb@;8UG!bZb+ zQ1|ucWSJ5svu@R2ju!TXc_K9mEM5C8xD)@5&%UJxzrTr-G*!B0bwIRw8(KtD#eHPb zaqN23Bbk;A$g2;L%Wf9j>}kknECL=Gzf(thk(ZHklN?ooE=4ZXeIqV*k@U)0*?j~& z97M<s@VL*o2=zBZt!aU%_f(12K}Suqtyil~Jg>Xi)<y>5pYBWJ2c$av;y@aQNPXgn zhdA5a%%bX5cel;KeYvzl24NSSOMguEnor?pAK!{wzDN_2kHbmOje1qPx#~&~T*ksl zc)}&O{T>IoiGw)f>03#<Ig_5_k`|`O@T(K`s<`S!mpDf$v#P~;HxH7ea|;<HId+HR zH)fGHixWke(`~cZZ#n{-QzudWLd~hCQZ7bw0X7WeL~$%G`}xCN6WBHC%HAT5oP4*w zJWx~FPWVp6zlo;b6LP*6-~N}!@bk}dv2I`NwS1<kgRH*FBH+ZAdu-=J0lIhh;M`~L zM*F;_7(BR4^eQ*ad`*n?sob7X%u8YsMl>rWDd&C?-?@~*E&?A;li<pCx^|7Hf(K>E zhDhByk)0N(y6d8R24tBGL&?V76Fz=M_O#D!9VgXk0)ObvisEBX`Idn(4ZMej$&!nO zG^tTtt8Yan^L~8(|2>S`zb=`mxYw#W%<6Aqo&feoCYrb^yo3FlI0AVO7Oc)-{)$z| zrn^K%GH$9@XX=&S3{0k~k7BBd{iEc`+E1tJ4r2WMDNjf}8CPx;E+Ec<XIkBYvOyFM z-Uxt-)d*2cwB@;SR4?|iyiZ;y7k7}2=H@+V+)U~dcj)LPn_7mf!Yp~}^$6<6`*ifF z;3(o;CN8S<%~^aOdiH(-KmM;faNAe-^%#=PuFxVX7;kedstu`uSDaf=#FBwfv$o%F z&;;$oX;<`<Kk{7oe!H-^*P(h<<cea(weVIsGAWeZ=bK5|xs6WU?c*G^EZ@V$t1Kn$ zIA*ajUKB_ush~2cUg4sUyes>(v#pH5<tsZ<_|mos{Qe->Xb99ruPaCOc?)I0*D+~t zlqHZe(XbQw-23pufBO|~`5&317)z4TFjX@KsoG*+_D;$2q!L&zdwDC~_PLj%an`$V zVC!l$G?P`wtcmu)rJDGl5W39SA12ypL$s6Ol575Q_X6%cb;X=G8e_$!;+PRv*A)(_ zT+>nY3dhapzFJbEQPQ8HZDg3gt0#xM$i2;Nkr{OQvpyzrx)?R2=PC5Lbx($orNcOe ziBSU!*KI>;_@nszTYiMQe>4tx$9`x})dba+T|}r?TpYL2B#9>=^(sr~yb}x7dYHFr zH8NxE$Y*U*ud=A|WX}^NK6P!9W^7KAAmEwcZVRMdiK6Ez7kkHL;q$$8LXYHRL@Wmq zI%ZMj3ZL?_ca<?o{X!i~)TF9}C>C$$!tCr}66H(HVi7M^OScTWxQDz=+|}}D`!b?z z#P3LjIxvvO2-(Tl!_878&##UOpC++SMKy{gn>ovNp=bAh<HsNUE^hzExLEE)lTqok zg%hFL<->S`C2Hs}J@4(a@#=rQo<{pm<nmi6+<LNQd0nbk$6E|D)PBhe>0#XF_L9yx zuI!58=_K*2Y;i<3v!xoZiG)#e5=+V-bz+|=^xD$Dgzm#tog`cpgvULfxER{+4rOpV zsiNDs0G2DI7~X$os0UV^+h>kON{#a69*8A&lhylU`0l^_5Vw48@QA%rgX>(I#GK=Y z%H3b~^4WO%m#!lN*t>9W+iCQZ)hqI822Rc1!znCCp;Tw6rxRzXb2kKTx6+j~v93+F zy<O96V_mC*6)pA=E9(1U$tPS8YqIxi(of^~V>{XoINFoJl=lRM=jAKD`rRy)AU*O+ z(&V3ff>fl<BYDx*cnkg9K|fhtN|6XNlAlt6eY&YlM=SzKHoos*V$8sTRgWSw`tSIk zxBL!w-#l{6y;FnyU7N%c=fusTr1REhyzp;djCm{Gg1!Tnh;kQPOGkpvv@&0W>kzY@ zh5^IVeYaiNnXi#t>5J$vThPEiZ7iVQ=O^iR(nz`g_}qkSE~h&S9G8wF5d}y6z1W37 z7eWtL^$S<|JF3KTobPAJg`4!T{e}BxvG?u}xwH?GC4E0P@=M8HTF9tg!M11<A%5^E zbpNbrnli!>#4@Ol?J^xp?nU>`|HjY%>t@{Y#k_b2OE!6$#2N*g6J>?!Q=-X2W?XXF zwQmPr`OnWKH_yM44ts$xh?&z*y*k=L6}wK#_Pnk(cxbCCO@U4Ld`7#2GfCp%CUYz4 zT0mgL9W9$2=`yxdPM577+eWe3+yVL!1@9!F0G?tMb@edR+SgU>Wps*xt0Jq}ZZ(ke z(Mtfs4f?hSDaOU7ksS7Li`=~KpDPDun#KCj(;Q%?&Z;5oF{Z=b+y_Xd`T&0Lp<D5b z&l+lv7;2ByJRjFSO%)L@f4POXfAM_88b5?XJD-Kd7Fn+~2&RQ0`9v0MQlIaz7-Goj zN~i{PaS@jy<9j%jf+ZhrOxH;OG*?JLrnorIt5E?`T-k*9()J<yco9&-wj%8-qI0Jg z6drTC9aeiplRZxF$gmVcDp4j7Qp{nJSaPa&Q%*G8lgY4IEzRi`!Q$SGNij$>B>B}B z#m$+wCx(HpHMby}`&WGKO&f6c5B$&`sfjq76XoC9CyP_D9j>Fp?C0V+Hv%tx_m!Bx z@~_do`-P(Jhm-VFBxT(N2tE}uC#f&RQ{OAPd5R*2Nb-WPFgM1y3ntrx=%Oj*i|s;j z%TQX1l7dtTO*>>`vDI@-!iehy1*t_#Fa>GGmksr}TjvO&4|~}de1_>7C&@)L9ONG7 zVQYD@EvEoFnQ0glyFtthiH1qauWT63rMZ5skNL}gfJ5Ys`q9Vl#c#gA@3BeR@kGXH z4Y|ILNA<TUlg$RwV-iqa{0<i{fA4w(u@54jz8YSp35Kn8f@!T{9dAL6DL@pK2t1{R z9MPh)Xwf~A?T`1naU#Em2Lx437D}}<CbyO0@u6;$Crd>-pbx?$YsV%CSbhh?eJ_6a zADi%#Put=>$!4GSLS4;L{pBZdh<2bdleYXB=swhgb6@diG&D40<iKg9<HltBnflGY zDh0Prj%O+MmYSrB843Yp1Yxn~%kg@`SW~Vid#{#QjL_%nrNmMCULmRzM3a;kDiljC znb9;lmwXFm?0xv$TXx{qujr}cy%5wJD%anJ<Oyagy&dE9hZy!h?qQ^V7z;1jfmJI; zkZ7HS>{u6B>$$vzr%IO2NZ>gtD?^5F6tKmVs*{LcVIwlf_E@I+dE{kJ`Q1Fm`z+P* zz!a4ZjY5++BZN6R-Y6oyIEM5#<+F~6cI;UE7&^PYg1!A;!4KZE6Ss*(%(%$<7P@Bb z+ia#%eQrciJciIe+3LZ~+St9pLVRv78dq$<fem>yG_|9-lR$@Dh$7Eq`g^fXdJ1uD zN$7Z&H|08^znk)X5y%{6Iav4QCUpqNoj5y79;ZKJ*JEGDXu}uq`)?h_FaLu>KTI^V z=4EbF9W<vo3f1=pG|b|}H+2B%aiF0wiFbTsEiS$GjX1FLMmoOZ<STZ`sH_!-2y`N< zC6btLnt?bxJwJ<uEB+Vv{PJt~%<H#cB9%t62^jA`lIQD?>Ri<j$uiO<m>nl+#`Vdf z?_$s6-Dqszjx(Ni2&rHWdJoS>g4{5sFeq>yR&{DQM-<T{GKd!g8*bi2-w;VJa~?t0 zg3sWO-@6Il{op3_?RAN#$xAgsDwgAm^D?MEH7ZQ?Z`%+J19>fMUnG4RhJ~TS7Ir?; zk7euc!5K?4=$h4nywgexn<PcRo{o7~5!Dyh3f>DmTYyMI>mXLnxfkuum+;U%U%;2& zIfz4B9T8<8YvBA8PZ*HvShCSHy*8XKug3u+9Lm}{8@S_E;GFYM$4z}VAT{=8B+Ygh zjw|YVMk-cBl_zC3<6yqLjkG_6rk1bbbsgWp!y7i@8P5Sm28ukad3u`A^z`1uNRV-9 zF|+9a1BZa$-qD9Ue!Ux~UA_a0SG1u2&~kWrF83BF_c>F|H{Xk>u8DOavL$+^2;_6K zCKj#yBL@3FiSPaMk8#&6TX5SifrlRz<$grrEH^*xCSiKoGBOj~y^Qo<vf14HD=yZ> z<w<v7&XOHS-gp4B7o<o9y9nvA*|hjE*>ch39?ao9#E2p)1qC8Cfg|DBW6FnN>zo1d zvi=!|_Wuv={N}H5$2Un57kn2Z2S*MDxnP-xry)(>_!QsQaSBB%+r~Rhq(`^oq8I&< zq#F}s1IvgRT2ycd$A(8LRz#&I5epW`u6l0%AUQO?N(bHt@QrspgkO9{Rjr2PRpwd0 z{%tkKqUj$H$ED(8af24o6n2~beF1hqI)>kUZ3mphCY<xkVWiSaFw)yhQV~b8vEp2p z1=}O487lG+tL|e%7LqLk=vw$K-1Vc+<J<551s?qMemrywc~{e>h>DEI<)2OSe2y8k zp|~_&0z!q7v1l%qoddk#<7;r%Wv?Mo_9~2xtVCvPjx2d0a<X)sT4dje=tM|1kzm!_ zS3Hz#?nQI!F8I0I@YtO<;cM^SfnAUAdu_p2u_TuY#Y_o@oVh2s?LZjiX3qyceFv~+ z^_h5V-(L{VycVW0k9ff^q+myqPDCe05;a7wA4$}H&`oy4Z(;r7Z)4lG$MBA4KsYfp z@6AA(c^gS25OGy*hrI=S{~j)WE@TbQwxzh?<7Z>lyl10l{P`H^TO>qWt|}-al`TZl zPDGQ*7d*slk<U270nyTV0P`DviR}k(#n=DwQRIgAh_~JMYX}~SCj$Z;U)XDASW5iN zi?|gHiCn&XIB^K?!F|8xdEg^w50;<52Rm16f;({lXJ364tk^ji>~16bj!YVrMra+w z6Vc2inIaYtfCR3IfY@hN*C4XlNAbWfe^08?4{&(LcHH?Ley=6=nnj*d)AY!0Gh-($ zQWd6>Lk8x2HbCbh6YsfsHCCMWW_0g<Ej>R+r8zUBMPL(Akr((7%jXWFYw5SJbHms0 zk(cj8-+sTqOA!?)D%-#$YBV?;I!;~%S5{4!7!9!T?tZLT`vk7K;9(f8BN!W7f?TRe zl+@$69mC84Q<@<}G+jwL8eq7><C)JI;%bQZV-|Uz{8^vE9k>4&-~G#dIJir-rSL3a z2ef0d644B<D5fa_942Ao6Pi*$2E70cEf#qW9E|o8Q;m(lnY#rW{<s&WGm7PBdq^}9 zFlF13Pup@1MG3ob?WhQRrU_>hufP-l;^l3!=^2<cZ!cQrZoq+!Kg4~ve;Zqe?!xc> zCxtzKVxF+k*v5&L9)VLZ6KyreqG)3rcXkZfx{+(f@?5>_eF0wn-X)kAdKsN=uON|m zJv|#!5y}xwe|}(_O%87MF<Sc{BH8{U{OCXS;^q%asn~XiSL&|{Uqz=dnu238m-J?N zu8sr^FlQ+l2FYXY=H}o<A6SHEzu+`v@k|UHd>$so=fI-(+j0K89I0oKSF1irdz}b4 zycmHC{YJkgoBA+&!7WJOcKqi5HsR+V+D{IJUJM)t`u6C(WQeK-K_t-}b6Z7I@FXNb zM0%yN6AU1(V9N7f4qW_FG8Xn<fYUB|23DPaKC-#fFxs~Uxd~hJ50X6SsfvT)GU5@{ z4i(iV-{XqzCTrI4xyfRKi{{R)h{rZ#`-TnJ^yfPe>$o5H{TSHrBS0P|q+&IA^mm>B zr#i1!Q*Mfw|D<Ni&^^r!@t<ggNv!s|e*>=l>sc5XxQ-C&dJ?xUfZ?|aW)$z3zPT~e zYkf`KWrB^vqvYa#fW({cqiy#8;g|nCh;P1Mu00oQ4ircQ(?1=dq*EMC!AVY+mR9&Q z)YbFnE(aPL>4DXXSAA&?uDoz9QvS0@7`l#_mh-fvQCg^5b{?WLN}(Q4l(SViDwJ@R z^=Nn<T}MbJysoWXKq9^!f&B|K8h79if8K`gy`_ghX9TGf(6dW_jx22=q@t+L#K}-p zYV&0IRc4?Eg5iX!MK02wU6x|x5#09W5sdb1$Hb0ZNDXYk(sR$mMb|At%vprdfu+a{ zHN%r7Ph^QyuE`@Z)eS^yR~Z&8ba8nIQK;Oogl5c`(bzVImL>a;bNAu?U+lr|haN`5 z>_4J$#Wvjkb4<>AN_ZmW#m)Nl*fF6NC}QlA%%U<d%M()@i6uv_y%c!I*H@9N{W6RV zU5%z$7ZK~yQ5wVqBYU2ybN(VKCk3iMj-}&iay0GT81KIy&9i=wbn0$Vw0!g3`VVBt z2pfS7M6T^pZIx&WN<;#1NKKO7siM(_(<c_L1=78(IQ@++c-g;q5Zs&wBXu4;`%+T3 zE<!FX(<TBT@pvKxesT%aNb)&8P3=M>`*Cy3jOR(<V8Dor;#Yr$>E4H+aRb54M%?_q zer){u7?N{`abOGQLrq#$0x4BME0SnRK@kI&nmA&ayF&zlNg!g8XN#ZBiPsud09U>T zm_vJFe9Kxi%{dcSy!=coShf-q*=2N^E<<``F2;xC(g+Y!*k#bk%wU9IDge#2HJk!2 z0t_tj4oS(9rA<+Mjb3VQ=K|%2>Gj=ci0#3_T|05t%}*fJ`ve--ZbmQt?H@i0Qh)Vl zJBT-MER81uIXP(0o0(bN<)R31%09yaILN0(mz&i9p$wNqfBRM7{A*{U_rTNWy-!23 z<x(VDSJFO;3u(zP9I+9&zDnVgjh0Q4QgIlVO<|7Y7P)!R<H<l8so`x%jo(dkco*g@ z_!HS^hVbb(=|9#6d$z@K%nbuq6tq|F?GQ~tC1zQ;(~Xc=UgYYIg)HXNDLaxxYN!>@ zdv_~d{f}hh!D?hi*T6}VK1M27YG@fIhUFd+&Ct|GSmgC$I|GN_7uR#D^iwbE9E5%b zlYeK4!{uBzr!c31!tI7OGXA#jrgv>7m1rwko3|i|P5AnMbmQhvj-jb-1Wm0O43oF8 z|G<&_FD1zcY$~x8qA954Y^x+uR*Sf%GDk6cd0qn<Ovp6vbl@3u3LBXQxT(b?)-R+@ zv;^n8U?I-Caz4FlKK(wIKBtQ|-F%D<T6B^_6@tek7p+Xl@Pwh19Ww}y20|yo11HKS z!AZO)1SssH=32g_7IC=;W6D>HSQmP|v6Zgbte%pZl<$F)=%JSn<H0{1!o&Y}0Cr*@ z-RnUl8}=gZr0|=s1A8~=50XK8mP6lQvzJM_##v>G;-o6K1)?daGFhUOsRRO+g7R67 z8t$a`J^e=D`VW&4bnpyhhY6J|GCbo9G|yg5c8U(#G>(#T_ycXx(UCuwKgr9<@O-02 zmzyOEj_9^xk|RaMJPsA$wv#juY)>)l9ND&dG1kA8UVDOWXbTdp8)44ggzvx4#UKB7 z>ZjUbPMx?fq!;NH4@51bh^j^r;8cADjLE;q)AmS7A<+WNT0jq64mu<CYdArtbP_jw ztQjwQ{d}ab2Kn3~*!El!WEPRQFrVJHfQ+ZD7#{#K<J!(qd&KsscoP|UXVVys5xTE~ z^xzOp!+r!L$=LC|NMH+o_Wi^7)?agrp9wU!W$Arnk+%a3(%UnmN9S+TQ~;(ZQk$yF z?$H#~+KQN}vS1*KakJDTB%h2nHc$4?E<YDoe+~J;Qq80uw9^J7WHRWd)rQPiD{a;` zT=vQ~th%s;Y(S)wc&+q#oOYqF1e;BHYYGV|Ff934C7ucuC(!zu6}q6t;>mFlQU-=6 zR5(4(07@4U#pwAp7BABD{0L#|2>prt*+@2)ZTFAjPd^-in;S;5X@n#)HdqajkTVJ^ zJ_x&Y9FP7E*!}0JGbYFBBm!xN@ueGEc(2@P-EyTKDT*|%HDU?J6<+kP(Nxu8wq<ON z@LsX!iyrTK2z2qT8dKMiwD@cSrDwDuHL{fcb_pz&fQ%*d@r&uzS@f86nZS|!zyXQM zGbS$jT>uiPXn}Y>!P!J|tO8iF^qNbLSp}kj8|+6`SD=5os%;7fxeU^^S6se-fbMG# z8k_duz?L!G`lTo1RgU%zL>?1+l{iL*!HwP6ljCP1s!{s?BW96@ccN_c00000NkvXX Hu0mjfsnBKm literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square30x30Logo.png b/front/tauri/icons/Square30x30Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..005d5338f8233f2c9688e01ed76a49b0c96dbb44 GIT binary patch literal 2177 zcmV-{2!8j8P)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I000O`Nkl<Zc-oCu z3y_s%8GgS1a?Y~s?%4~=ZDkE1lxP8w#lT3cVTJ(|Ol~$>jan0?g4iV3Oyg985MD|g zX)J8AX1qW!%(QExl?jx}B8V74$#uEy{p|IeJ^$tFdB6YcVcCVoZ|C3tKi}oOzt8)A z4z4zA$3fux=DTF{P*l%ffU4UTpyK*zC@!ynvI@<b4m*%+Jdbn#Ie^3O)S#}m25slN z2hkWX)ZiJ#Ic1SxfU;`}v1s)VP`&Uz6py%ubAX=#i47DIaAM{dk_~53_otV!>laU> z<!mSCY>^IH>#H-iEDK>6n(ukvU52Gkynv!%<>=`Uh9QO0B3UF{?yQc8YI!RPU?IN< z=xA=jw)GF;&o8|(h_=XjiK!heI4-c}mFIE$s!dkl4Ykvq9{E^`2eqhlInzjZWrX1l zOH8Hh-Y%a46zZE7EybwuW!PWyCc;1)9$C#J0;Ef8Xk)Uq+qdDyxl2^C!6yj|0WAJe zFa^s|<}(oe`kBn;KT#$0IUDNehmBCFAk@Vp9UOe?kJzweiE&Yumz_Or8<Va1{T5U& z_$HZVv~t{urE#@*Y(7R6IEHacPk_+V=9?nPE8;^hh#;RYaWQjb9Jf~FA*GdSN^47{ z+cOwDr3zyvj=(>6)b#PPP2`0Pr1>kCW6`P&XlwA@Sj-L6Ay!W=!lvp3zHwbX9=yH) zw~fw2JGD8{6~LzeIsjbP!tK}Q<5#mv@bl@#xMy5G?x-Aswv5I*r&DnATs!RU@G+tK zW^}b4#eeG#3(v^Z!x+6A_I^tL4yP|do308-_{(IpXMQ;{z6mL~*@$RLg?Ma#(rEh( znT^P|%)A$f1vKI$JG-_Cd(Wp~y9zXTX#DGYjd*<ac(l}aMx^e3axK0%dm&Pt9yd7J z#G1nCcAqX*m|GDyrp*NMXe8nm7L6H#JE>V=Od;h(0UeX9qWypJQ3qZ*)(wkHMK}|D zf#)GHyolc^eDwBioB5fKdw;f-6Ny}eA_^XfgWYG-*x%-19Q}N4flaNIv4EA0Ytb^# zjeLHf*~9nWPh!g_T~M6U1MwmB70N2cVeht=97gawl#Hxou14nQH{_sAjcQKzpyo^p zH!yg9R8@p~#^=KiqIJ=7+sPDu`f&#iw`5GnTTJCp4+16&UT;XZR$|uTc@8FjZ2?Sb zDSahqlhm<ENEVN_c)0hk&4}COSUPryS+A{6W7*qHQMyq}MT-RbDljYn6fioces#Wu z&rPm2Fqk#5x&n@d*}RR%qa1qiSXXXsOZGc29tqc9Q#FX5_?o;%OsIB{7&azK?5uCY ztdR|5XHA}^*c(PvIx;!rL%SF4O$S-<7<ewSCJgeJAS16td8L!9GEpp{D9<v1(?x=r ztoV6MkD(5;fj`^H^l;M0-!Jr{kU4x%{L1wN-66@@%}wd7tz$HMfgAa|!wcozhm-}D zK@s`M12cxjaO$p6XjnEHtG`gdkk#f{KP`dA<)d+A(Fjxywc(M-+_#!Av$hdk1e!`l zyR69`+1qz+T~(o>B{Zu^TX@)6Ye@O)%-TkapousO46}QDp_7a4R@#`g1*6GS@)u<0 zhmuM>z%`kZHQCc5{t)w$<b)!}&=Q({c**+w-)SM)R3F;5Y}BV%R9e!}j>$|NV>^oY zD$_}VQCz?ArUV|CT7+T-lRWY*bFwBW_8RvZwRm<?v719Wp$${IIM;Tu-eTwQp|)d` zR_mtj0G|*nWQf_Pl)8rC@m3G(4zwFBhA?G*eM<?BE*@zf`Ib3ZlRd|?=VzAld|AZ! z5YM-ewxw7TrC~UEsLsO2f2);9WI&k&6zwAa13#WpWD?n>W}66ut3OB@c$6Xd+=tOU zoLj}Urw?_o3`ZsFNm`<B{NY58nKL|O9NGOQ!?8RcPrdtZRZv{1eLsxZmL-~uEs9|L zVM5>w2ip-F>L5e^RU{mP(S2t8SJJ~yqS`s)x(MiX`&c)l80*FS0y@lqNxLqx0P0XV zj-|VjXYj<Fi8gwBJdC_9fr+=wao9O{p0bbk_@)#J4lk_CLo?s+pGzCxbuyy&UF;=< zrVWhlYwSg*9|cp$2wHnnF`k;9F#eWcTk&oSPPF<w8u(#Bsf|6aKa2Nv{3TMW{>TA* zWyJ%b9V>Kf9Ug7=lz3_`3%Z|WK7~F%*6HJ7PXG*rL_++G;c@(Cb}7DhLjeMAk!XH& zUlOmfN;z>A2A1m}-PMH6-?<y9j*QB+pwisk|Lp5%Z}ct4b)>8K;f)DwoSwL>YW$-y zgMG~zTu24RVHNo{zQjP9!KeQ)E@I)ZY5u_Xe3nE9Th}Z%&0nq&kQP+h*;Ow;kJ&38 zR&5tDifu?ppWaG;Zl=$wN?m-G@gYm&Lm#vm*Vu8JWw<wkl2I}2d2KU(dEX;_yi~4M zO7|Bvd)qN}?p^GUeJXCTei$rV&fe?WEQiy|Vkn~)eFaqVyP3IPN9g?Rr`_0bDrGW( z&1y(RL)LqTg?~Gny`{ODprvgX*i#Gh)xUcYv+i7p&Q{p$90J8jPn(=8B|-^oCftZ~ zlEHSGJy^0kh;S*Uv>gV1V7o2~OM&-xZozZkdeAWK*IN&0=%u#~BIsJMav8q<_+~cr z!xbBP3Lq!gm@>mdsLT3WB9d*%Z2^i5qlUh{xdA&jK7yJpZw#V+<tvQTCN1C=uv;j= z9gjZ7miK;|Y>d=QMcb>;?{|%m-467nD@;A=YPMq6bI<S!!yZTp9*3rH|G#&qt6$pY zqiW7VR8Fd<6)HJ9B)c=k>&h9NIkGQ%X{-G#m$v@_7(LcE$MmX?00000NkvXXu0mjf DRfRFW literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square310x310Logo.png b/front/tauri/icons/Square310x310Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d268c942d96c32b65471e6cc314a1ea5a372c42d GIT binary patch literal 43145 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 FV1ntP@=O2# literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square44x44Logo.png b/front/tauri/icons/Square44x44Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6272096bb7197fefaaee398c93761487dca9d7f0 GIT binary patch literal 3666 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 literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square71x71Logo.png b/front/tauri/icons/Square71x71Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9cf524eef2ad8f07fff87b4be1d3f464086b58 GIT binary patch literal 6524 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 literal 0 HcmV?d00001 diff --git a/front/tauri/icons/Square89x89Logo.png b/front/tauri/icons/Square89x89Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..297ca25e7d759d244f8a2d55214926d90a22d022 GIT binary patch literal 8302 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 literal 0 HcmV?d00001 diff --git a/front/tauri/icons/StoreLogo.png b/front/tauri/icons/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..b75d0246fb00754c7ed41bebeb278b003679fec0 GIT binary patch literal 4264 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 KMNUMnLSTY=ZcpF< literal 0 HcmV?d00001 diff --git a/front/tauri/icons/icon.icns b/front/tauri/icons/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..e96f358046d561249627ba672f7dd5c912e92d70 GIT binary patch literal 547860 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 `ffRP0k7a>a3~bC>^J-<0N-i=> zQ5o&6co`;F0v*$H5(gF_Fxk!@1+0lApkjEB9FRk{umIN&+8dow?iVsC`9cM<nJ@}| zeb>f-f>bdB)A6e>PoT@iPiYiiHYkArTBk%CiCQDW+)PgyE`%&5SHI(&J!&w0B<7Wo z8`a>hcwkTx=HdY6<Yp90Ktxe!i`Efq#Xt=StV9#Il;MvF++Fj`Q0J@v&c`2}hWFqS zl7Qh?Ou`=<Pa5QEP(#%T*CuXP_-if-#%8ZBRd#++KG@fL57*$npU9I|#wy8W+w44N zmT2rt*Z@O#ry3xi+2Ie6PUQ<S<w)VXa!CjZxIp?5v!W%Oh#WD$gH)PN^{(d=Y*zn6 z`PkT=km}=vy7n(TJp7*Ea|+SIe)!lvS}Ku8O0LO7e6aSz29F`n(|DPovR2}DxI2s3 ze7kA-5LC&h9f0sZeyp4fr{@j)m#4;!^6DLNGfRcEn=L`)X6}Dol-*_Jj;5LPpLz`K zpmiJKX+wh@Ns@fCgv}k;GmDspZ`llO@?UP)V(2c8@H_jXowdf6cV%GT4#i5bDCzo1 z8*IAz=FL=kB`;H-{|OH4W@ghX_PK<rKX6I5QRq%OPpP%Da6-WP%EteS1%av6h_(#> z7<%pu(;GDL(LOrs%>=nLzdF_LP=uKy;ovbIQ71UzvnA>~ye=P%ZI;C97h4A>46sJ4 z!;6ZbsGjVMe82IahOHgDgt1Izs+<fMd^ELR!qb(8UU>fkF=~<w-8W6%6~2E%2a!`g z4?V)C+ss^$>bXNNK{}b69z@_F)Ji(9Xxs_~fPX@|=_cU!tqc2~h3Xg%J1df6w9D!; zUb(&46x<-*G8`#|9T8U)ea$}%uM`5GmZ6Y{vW9YMH~U03gU%U>j+-b=l_XXPH0yLt zZ5-5-6*DQ`Eyt3Abe;bx$~3;K%Lhz)`zwD1l{`ZV%Jl*|WA0{Y32uajK)aZceZwou zX7)n9`NL+uEmTPpH-uL1vVK>UwO@FTAqMKBVoI^cM2}|+G=3JBynqC!m(-ZqE%gnH z$|3~15qSH+DY(Ji>*Qpj4isv8DAT>uAg3x<VeG;7oY2*f5PK7?=Kg<^3JtlVE}d^B zAqLucL@}gSOk%Dl`yEqpttgt<Jj(K<&Fo<%m^j_?Dts*P3cfId9$&9^2e*Tk1}Wx> zU^vh8W>Cz4o^mR8hw4ssUSh6tZ(y1LSlyaYkFUW_1eat2{uHS*FzY9;>fuXm>-2Z_ z_5}I8?<6wraxRvTH;f|F43Mxa1^XtP)L(IrKj4hYLc5Ip;id$C=Ia=Y%=*Lv{k_ku zL52`JS#-9Yv2{Rod~9!c{D8UH>53_F4MjzzIlDRQGrp<!-tIk9bc;eQ4QBhtfT^3j z9dy>FI5BWG9Gt9ai$|;iweraS7Q*qFPAMZyXG3e?MRsRj^ZSIc>!W1hW)S4&241@^ zfMK*R;fP&dp$)t#)VneA9x0^#aQ@vG5hUb#;;a>k4>73l2f0rl<jWQ8+zz#}L2nR# z8J5#Uz;eBB@86d<`Vhcz_9uV!zxI<wZcYc8{G**lphW4W8!L`+RkXi@nx#WtXG*v5 za;%RyTkU8I`>b`?J0fN#K`<W-Tpe6iLGS4ex)qbf!4sk=;H0t?hOIVNUhwnQE+Mf% z1M=E!CtfvMWBAJosn8@2)sjAa!nG`$vwED<mDc7B?Y?LRGvxPO-dDD{LA7}(_XgN( ziGCsAN;b?Wy^g?fPI`U#=sSZKIt)5Pi?1>4xU#n~!@sTWfSd@SNITr)w@m}nRmV6# z<^p^XBlP`rCPNDfSs$5NxWX~jE!rnhLXf!2^LHLdjPZpg=YacnO#scp-c5yB%+pC% zDW6y1v#!QFtcWb}>-0t9cCWYZ?txSH<AcjSua`RigE19a6Emz<<Ll{uo+&Wt_UXQ% zrzdF><P<&$^6$Y*9y}NQgeqW|ObpC-ESTm=-IhtOf3Nk)<a^?JY~Mh#2&Y8LS2G`f zj3%IGgOfCf!AYs+!)46OBl2jik*L=WxyC1$WrmvxwZ=eP_xIg5Li5xNtKTCWlW$X? zYOlk%i`}EU=+|XDl|UBOfzz`~`$OBII>;wg1#)1m7}!t)c<=A-r$Y6_A=!`_Hh&4Q z>*m8|daz5oLKQn>*M|5gaD1Hn)ldU_D`ql=80ftUUZbtq5PVtDizt46puXE_H5Kqr z@vA-cA=F#OKD+Y!jlrC@qKsQ0`VU~%mQprHM=;R8h~4%yq@DYDi7_3pD(W}Eix7W- zO6k=L!~~)-yAvqlg|A+pa}J?|4Su2_&BBHlS)xOUnrb?^02$w9Obg@p_9(k<2i`r` zI^*EX=WcAuSEPA3g6fW_^`O!yK0v9Al!R8@a{kkOK4XQx?uZq5z9k<aP2}a*T*?f( zB33W-7&oNZFCgrDPPwm_>ICnK6KywqhGt$TGYRVH_1k>KEX>#EszAx&k2!&lg4;vl z49#PYFyo?@LYn>ffU%B<%+4(u1;6a{5a*?ayg3y8!R^->^+=ii<_Q!nz?>)bHIxYm zbr;g<yj5oyQ&}h%poMrs?Ve}0TzK#o!f*#!iKelMIn+Q)a<L=0`lz;E|C<26q`(N3 z+UawjK;bI^YWfpXsTO<DVs7L4$d7k2V?IGjx#s0v_l_V?fSjt)VCfB87n2%c)eL35 zzt<b><-s9vqAYt=t24g&5vL?#<rYYXu?w)NE!po1#X>4-aRQl|60_vw@WFW|RSB%n zD%nSEpb^^+=E>0Q$#JEA$j0eqz4&)|--Gl#M1vR&D#Ss({l$TI>nEqz6=p+SV`%<{ z_iKO~1)){_WcIyb*^NReApe}bbI0;Sn45HB?@NFbs1G$m@g>T65r&J~$Oi}$YaZUY z0|Q=by;aw=P){9qvHV{g%<Ha??s?t@LfBNdF~E1JjX6e96FpDsYJ@rF!d88wigDGE z-5cSKfvp4D`FmVx1JuJx4n9~ne<Q4VpD|n`{@NL*;{%4wy%zJ%wKDUEvJy0$z7C*T zTC!>4te_2Trv0I9z$veGND2aSz2DpKcIbg($LHr{II5&~7(E9d0uIu)`kZ|1O|Sak z_#dzS>n$AJK<i**rih=Nd~Adp!llm8=+_E_eQv6s)hGw}-%%<xB}9qT+I>?mh{+7< zWPEU-@u1hS5~)wEjps;a7bdEs)WzFXOylSwhVeqSeBxm8w9I|?@<UB>8dk*ve?>uz zunL4sZAI5@sT$%N;O##WV>&eqo18e2p8^ceohLg(E7^vScH=W_Q9FRJ_^A_F?P%)v z4^Fte+<w0yQUy5Tq+F4DJ<_jQPt?DK^9N`>qMS&vYyzojz&^8_xcsvspq$4fWLtb! z0M-w8<Obv(au@K;B6>8io7arRbctWWdo5jONLcjjnS6Y4@Vy0n^IN#A2&KC}wG8+2 z^#^`2pc__QJ58Nb3q5rJeQ<rO=6Z@P$kqjKP8+~dZD346!&k<P;@&CHU^}%0mGb9` zJsTv2CF_cr`cqJ>mx0|WC&)`vOHUyH@A{h9oudBMeg`bjQL8eNn^W72_ll$;L_Ev1 z;mDUTxi7|num}t}p$HB@t)ypfb8{l34p<rPhWAx1M1VAi*I;}nB(=qL%-o(by9Q!g zhs6?<Fm$zB%KAPyZI+z6i|Sf|d=iC7EnwYWZjpUsP*)c^;&nY?ZS_G>Vlg~-Pj(2` z0WyLIfn6SQTm`JG2*c_Pq)AXC3z9+8*uv}KZR8q>_%Q7cC4+jc(xT24x9KJ2KCT4Y zp6^6Ck7^mp6*a|L`dH=uNH+JXnH}DUvg{dqskMb9(ttBj3L7*+JMXdAIeTlk9pfKr zQT_;@5>#W%(`f-rK%XZjjY39=3)WsRshap=A1RXJ!t<V|j(4a|ICOcLLz0>s=$twd zz8mBN>PSF{^hYF*pe=zM4O7R2tRTZ~14Y5Nri&vI#+DFw9#xTHo`X*DXovF|m6ZpD za}!A3{QZeP4Kfb?x=9^vwh#(w9@f*-s52SkWT0Z$8`rbOoKt5w9)EIHG1QcBpwPAj zyyolY{LOswC6O)nwZNfnhw#!iV3KqOC&6a4aw$4Q#f)hh^NqiqF9GrtAws*XTrkZi zo>=4H<qb^;LC}e*-*RmOIsnO+PuaFgoT<b5DJyd0IrOExf%oy{!mN+MwvlW=!%>0v zUhhJ;)vW!E7CoGt?3l|`o}qZFBdq$>WmW4($W*;cWC;HL(aInQ$n;l?2$I}tAV0|A ztE1ik0*(&(K<eWWQ2^5h(EoS#sw=mPVU?ayE&?5<+(5%BL`^IPPg*y%4}gyn0rOy5 zMB%6<j|7+NX%1}-Z~>1%CXm3DnoTFSB}kS(qkJtlN@Jm!1BXRFRiRqp)PqrvFQlan zeXXz?6}D$QY{>bYlh3VCN;B~UILnl#HzCSB`Mq9^P#<2vj20=B8?2cx0m^Qyp=e@l z4X3HNGdSP8ag)1&wo+@NoY=~@Q%aLf39+C3`|dfW13{A&3~e6%zM@B$hz7Xq6Cn~_ z$CG^flJi{o5~ifV({^TiOpg1+X1%C?fV`}QY~DbqGGJ@uG+}yoH;HwvSRV^~SC5s% zpA2e9aqq=pESx)6G&yOFOYd_i-bM^19c1Wd&5O%gGd&bv%CmU30keDZYd(uxas{7O zs++qy#*;QHNKaa`v&1%QSlA!+-1oL{hwu8hH*0Y9<=c$F$Ds?4b#sAuwql()o>$r* ziv<(pK<nJutI2dsgyT;g?fpGLTAR3W;afO;#P-F@{;%%%^RmE<o^4?>U!;MhcgszK z;pK;HTkmrkwG$=6ACY@w$_Vlpdze4>n^V;nip!^<#5*A9rnyL(JW_gH?1OamN25>Q zbjVeBBPhwk(I?#GWNh0>iM(~LxKUej%4@k<d|Yswn`xVDGWI-ASRG$<QVlx7AFDfl zUXXA0att85n8|CeUurGOLhK~StXGb9dk!k=&lF6c%K!zyovAVV%fas|18%Z^58kc- zr+=k`bl+H+oe*mDIWWsLCMM?KQ`LO?Qx_xWy_tZSZ)da!eIhB$cV%Epo8x8DCXECV zYc=&K<4J+q#M#swtTM0)Zz}x?e<hEceSY!8iTljgtqb4!nkr4b7hlK$om!o#o|dx} z^5|du&q3M3Ukf+{xgruIUwFs$o&l&QLfHdxsxjrj)@U3oAw?ngH&SQC7eQI{4dM1{ z*R3*azXoh5irDL!JziYAM1dBBZoU#4mk13OD<hu;4(Cc><u};oi`IP_yk}H(np=A} zQ*>A0)Dav~PYW{i4iALIE~YKlcK`9&M&yQ$Bb?NbDjqrn;F2am;S@rRJoTdW$S7Dh zzsyy$bnrL;@t$67a=q^<eaSC)Vq_XFyZYS{NLX)0@6zjxsPo8|*)AC8ay@hKaBbaC zx~fIq56JxbD6H;$gWO<yZ)S0w9Y=q6ezgZG$aa4GdRX6RDZs)*e|1Mp;TXB3suvUO zni4@o+r2zEcCT*I%5;&Iej-XgSni#lT#pO-`!;W^wGo&;2ht++;2K^kGI6rw0Lgk> zG(r5dy}K<s8AVPloGOpD$~|-%=5e?vll%U~g9mSb+OVH3zb|@3w0t()N#|L=W=%|M zFJ*$ms4O?+)4KR6%;1iG|HqOQgI-5Wn-})d9-n1%spIQQbXCx_*5@+Z_pCbG@&V8h zdX1N+MuF<^(o7Zm1j0@KpX<0p?bJiEP)f`->C``%SLMudrgo@2&!CR?hj{BbLAJK^ znJ;7NAD*5lY0u%Tkxm#g+`7C7+`ckOK^c%5ez=#%6TyP1sS$^5c~F7ViZGP<cyvv| z5eygb?r_M5l7Q{>sv;bZ54%bwj>#+9Od*|`3hO76ID5?5<d-kM)aYl3zK)35PUh<Z ztN{<WoG`P^O#Kn=fZnh__nfTBE6O<QgTob7L1B6R=!i$DWf>To2tJgI-Y!)_85Tf4 zEpdW9S<aHgi)4VjP=emzPv%;D8{xqdWG1)WUlT`2nokUzw=7%t6iBtR2-GcqT&Dw0 zo<H1s7?hH~v?P>c!OD0Uu4%In=N_aq^RsLh>kC}q5ASg9c72n0QbuRI{dz~GN)Bi5 zJ7~kNI|}s{%Bu~qj{;P?KF)z8GMk#$h5GsZ-9uP4WBk20v~^z8_mKIODG&mgoJpMG z#Z4Opw1hy<%L0gd08b72$QZB)`W}V{4VaoMgTcE$c7HpaXLrx!c#ck}(iTt`H$P0+ zRK_)@s}ru1Jv=x^?|F|MakHNAWa4P4vfZt?Uukluhkmz)zRws}T(2zbBK!P92_`5b z+)Vy-*^%JXS!}BxC(B&IbJUKh(_o+Q%EDg$j>gDushjPLfxX^kNc2+e>j<=v4d{*h zN?KtaYn-6L(lCYA8yp@+v)9uCJhHQE^>9a&{|MPXC4iH{noS*D>aWUQ$a(JYH!s(D ze>2k?P{dMDH@ArlvduEQx;?qe{lBF2H~tqUud4c35VGpYH&)rP4Ke9YI(tgF=1T7! z&ZVhYS5Gr*WrXMOu_;xrH7M(V1RL9-sQ*<#0$V%ru8(fI%els4kRJC?9!k+Q7~+hG zX4uOfbuf<XYFoV=KcBahh7T&h1zukQYAEAvd~SB$zMnZ^ORr!XYe2t`)qlg3yIX^k z-a6>m758(mMfe+S#(`n~iaUqrX+?gM2fZAvw`h#&X9?b<!(z}In|oxi6<Kv*l&SnF zXY%V1(DFKZ{lDDIrM!9?*>6%CpTj7vN^<9qLxDhqo}$!5x<3wG=&C_lmL&Fq&*UeQ z>_69>v)>w7pKr1)Ry78ZE8>4)gQ7MV2CNEV`~(M^!9szg(0(>sV5$g*h_~H9KotiP zwltUVkx{{hj?G-5<UK!@Z}D)W^t8%6MxLWkUnKE$ae|+xgei*M1o3ZbOlmr9ss#A> zQ_%RSCRQ-oGRzq5#S6dbc%T9q3>mhDM-Le>K72B}aSyU5Cn}veS{_z7AjbN)I2a_H z%)VaC>>P)SWR4pNK5q{S^ngwQ`F|%}zsmIqG?E>o?CsjV^)D0t#gR!vpFP;X`)S|S z$na0X<|SNKkec0DJ`<o3%^T#QPdw1ZPIf$igVz^%ab9u*hemZH3F%6R9crisECyZt zmEEmGS__NF%A2{!@v2<TR!_KMnebvn8qDu|6Kg&KZtvkaspf|=oj`VbDpor%D`)8? z&#%{ieRJfU0bxdmxOl`_d1pU=TN5SHhOlGMSJ)cOmR_f#Ka}SJ%$8=JX!9_W5D?<& zh%Kr&d(1nBS88X_cr7!gZb_MTQ>`mVc{*%>|NriDGUgUnXPNc)?LFBxGkgoT-G}sc zvSWohrhJ-lwMLc-xG>yxM1>AelQ1(@BUuGzMDRwo`JwpVCeplu-*pT$yb`5O`S;?0 zr8ve2Zc?xUzS^d*T?g45lN-QxZ)M?Jj=mq}3BAYS&AR;9M7XP+)ra(RS?Adt+!mnt zi#*>SrzAMe@9)|m&JJ*2ai;%hvr-KeZVHjJTf^zd(pQWOt$gF`KXI?qJjRgHh182C z*iL;-qq%?VyO$8xsxk@C{U;u-(9}71ZL~CGs{Vz`@J;IFOht+YJz&}zoE(qyEvLab zeWN)ZX`wIOBFc4hL^#@DHAA|SZBpkv39eOT(X<&{DH>ml@*wpHMBS2$fgNd}w$KGb zr5?J_?f<){nc&t?f7Pt~SEw$9#-ubBrtM=$t+D?*mVeq2-P9nEaQi{Lq*=D+*GH_r z1K%3%FTI@9_7r7vW6ta-MW2PPTEoxinh6hqhSSBP_HY8;(8G*hH_>iQ!FcIq+$`@? zWE!REl%Y*DGgC3jw9gwc!6*!drp82RXLwlGuxG9WZ2><%z0n?QQ9zV@%JZw_4(U_f z_5*{T?D|RN*bEY>AC4L-|69p5J+z#<088}ygVhHaZhR|Kqb1v5&EwC8G5v2etsE>) zLE-&WPKd`++vy3%&(8AN3?+lgVqT45zFyjcm6Q;kmxf~kORVP-(nyefzq@rAH=b4I zp9Znvg;j}g6O+eyUqKP}r%$E?Xzhbp(J-#+1R#o7T%I6uw@O}kCZzu1wF$)DvIo+7 zbH7dUO<wT3YzhChs5-M<E0dp{+NjdlMY9<s&*-A82EZoKxJg}Q#K_VZ5#fW~)-u!{ zJiO<$eaMJ$*WvvwV%toeK?@<R!Z#)+w9oD&UlCmWC$&m|DP?xsXuhNG&F7JFmZJN5 z($M+;Vf&$3bb<`bS5wWDZi2PA&dkl$s*p4gGjA<Rz0o4NRJr;p(nRm?CIroun8n7* z7xy?qJPw82O_C~qbsafrVT}7LQ}GXri==XhqiTZ>QXyU})~o_>v#uPv)Ao+|PgX2y ztf};8yx$+*%xe!6LIr-kS`W~P(?t8Y_~F{bxD+Qsu6va3@j44-resVPvi*p;>%pz6 zX4+qFMf82o!igOrewt80qs61e%Zg?v0DaqE7w@T?kREmOXX?}fx=0z@$qcQ5DsKp= zJiOununKp9b3&c@^gOd;x|^xq)2AVD@aMT-8^SJPhKAQYzArd<&C0g~Bdi=hqBR59 z!nwaJ5mF99iqXPn2Lo-N%wF|jF?kU1Q;+cJ&#>x4k#gZ&Z$$Z}UTF_0Ep4R{USv>0 z1)K#K*AR!8>$mfxyqtIHt@GhDNPI`|oZWCW``_e`{`x@PF4t3@1rWyM;J4i`!Pyt+ z4-M~E06t}DkgLYAtHwPTN_d)r_eXhKT1JKco&d=GNf`!f{S8FKRC#@b6kvSsvOjgb zmHt0Ev?H^yj)`C6jDZkT{v^EsBo%bw-Tvz!{1Mj+9_w2Auzl<kGj?V}6B*<0I54Ch zeE_i24;m7%7gg{rDl5oS)SHoDAI^u?*Hif6#^_HTs*yzB$H<SV5vipEr|_O7kt<BW z53n*zncojr9lG$!yILuIDd5Huu*v8X2TpaQ`JZ&U5~J+Q2~#G1E{NE@>;1Ri%l(^= zK+i`Op-tE=0pXWjyB)n!xJ!9U%?V&&Nc7{)qdD8kk}fAdbLHY>KIA`(^`UT(4<nRP zd$%KZ#w}@VUUuS%KyzS-0o#U~uxchcI&10<v1u|14!<Q<n#1selFGk57)8$5#S5)^ zJ#sKoVy+YX?v?{Y@(?GrHf_UG3k6L1%NXHhe;O%Xos~mh^lwGVa6bS&ay`x9_#biX zl}Xtw*o|drzf>BvAkBy&^*q6@a{aqhFLlgdXqMPFp+u0eiQ1S8TCdeIID<TQeY=Vn zNnI5A&z*Y-RledI6Fd;KL~Ij4lvS18I8RLpOI!5Wmlwn|nteVblONLNr{s5VDF_t) zMyjv7Zx%C3<(-0F_KLPfrsqpIrc$?g1p5?a22pC4IBmvP&U}rH$*5JfzbyjD3J%D{ zR(`s@Sq|1EgGof7rawb#gxki7c{km421=k#axJM$m+-ftzpxAf1T1tY<sx^?zFRu0 zb0N@?R`2r(Q0@y_!C@;e?$MW+EsvD?l{S+y8^jNFQ+}!gOFpX}S7fv7%F@Rf9$V>z zoK8g*JqgM7EaP%c0cU_LZL5Dk0mnj5>aw!LL*qWkqrP3g-+gU=k-EJ?@RT(&X_F`Z zZ=n!vl!%k&WqYo5auPX&Q5k@!7O{rb8s4ts7B#WrbmR$cbI%yGi60%ja+|&19K)3` zM!cm~5K&IKQvbK%Ehfb6QJ$XNxGoB{j`uNACYcpPOW_O;oFsbwx40j5^+tm6A)Zi% ze=-5+=${#iX)cAet4aYo)wHD_w*ndRUd3ngba1lu=+;LB7I=iO5}K4DtUkF3i1KYT zh-o*&#K?stp!Oq#B7P=nsZ(_{0V44HF+{Ov8(QSBk+RY4O7y;5@lI2IB><BcBCVs^ z>y-8M=Ov#Dm--wM#CoQx3p}ov;7}?ZW#anV<+YwQCzYA4?O~^<>+%Dyo)y;d9q+3( z@_5Mpj8*>bchNAXH%<<loc-<<V7VzHY@cOFF@xBiS5<2Q!fXlcANj4o4hO}E6>dwR zVT!TElLeGXpUcAr=>HIswN6p9>DAtId`f%knWbt==Y)iqPU1vxVOOnAD*?R;fx1T7 z)hf5I?s^D@nZ;TAS{jLC76Sk-_7OJ|uP@lo+Yy~RoHR51zi5<r!mfRE9?UK~BTscf z0##(wJ=>C1dagHnbZf8`*Wnk$t`K^)acl|q>D#=BlyrV~e6<v<PF)pv=RDJFz78_O z#<H~6N4Ns!8cn2+qm@~>=+HwAhSYzwMBa=F(cx1y9bRx=3@|Lo3c42bnS9i~h<~Na zh?@o(yn_HAG7<{nHKK;WRwgXmARx>;QA!F@h;Vptz^@Qxq{UT$?}7h4VW5Do1A;~q zz>D%_#6{FR*Dw8GebtuMp1-&G*w?tx`fJF5^cay0WQFQZ26ZvZTg%tY%hvRkOTU_h znt%P(IHPazf2ypeXR01A*1$?5)K)h|PbExFOcY3&+&uEhce%<!AT_;`qaszBNgxG& z<}>5<bjd#wL2h*lRrrs$s!pMI?MgO2)z)wo60e_Apb#2PNplVt-G2)lT#7j1ZG3w+ z)|Y3r*uh*3UFbFKL|;##*7~h0Td*?ux|;3xvF%U?<&N=iN@r4jXF`4_a!`|i)+aIa zBPaBvTo*zw;z)~;jue7)Gda|4N6`QRYoR<D7@z>`1&p`GFBpZ0D5BrrgvIs4Fw~}V zHsij?<`o7lc@m|Xt<Q`XNq|~-FiqzAlI^V)<EshHSI~kmx>p-UN+(n^pcCGFRkAIp zcR=&iQeO^23WC&C7mURhk5rhNgcnueS^#2{@ig4U9zPCUDxQ*wAfoFk#0Up8G+5X! zi~`Hp?CoUMCnm9$Q@d<=ay?J1$0HKXb^>MRL<cp5oE#eFH&{BR=<9ZEVsbsmc?Ls& zE;d$CLlcgUkV7g$N8id?o!ki@*bN8yzJ1<M*BZ_COvg-u$meu_RGC3oKKQicQP1{6 z`=M>42${};U57%ojO^W8Zh1jG3D^kN;JqIxEiD3Z;(`~vyIpRA+XN7ZtUWncpzc?O zkRP<&s7ZZ^2gyG2+?a>WYyr7Tyv3VmliJUYn31xdsZ2^=Cgyw(auo1eageE3KqE7H z&9CZPU14}DN{TZCC?=COqN5<#i@(-zvs`)*C(*sdE{22CN@&r!;zT*VzzREeiGU=* zxd1G8@AyWHM!lX%QFw@((>i7kCf(x5^sZq5Hs-6SX?^pNf5g0z)}V_LZeA~_Sw3gr z>zty<JVTaE3GIPD1QU2${=QnA5s2>_9v&0mh8mvh0`2>CudIFyHg2fxuq(}~g%6ES zhP4JOc&p<s__vY;wZF@P^*jr?&c7b~-;dcdc^#PKZ#=M@S6mzf9CW{7F!U>;groza zP^$z9F-CmNNm49|GGePphj0`C*$#;@)d6b=KfE2Opw0~qFtwk+w^K<t)X*4BZr#sW zvQtpL&4uEvsxBmz1HYt}2TCZw9Zmt~jRV(x1a3eP&t<+=@Ghw~Q!WFFZVk@1X&E{} zte14f<aAA7G)60IzdEfyj^o2ti}#WiaUB_8d#GJX)wUOr5{Rm~8ShU{EH0s3#1hF9 z>HI*_{b%nd1RGA+$*dbQ7jpms{Z3YNYXO$6Xn@E1gtV;>ETCh%z&O%SCgXrm*Y}-A z_j9yTdZGstlM=T{D}^E?=o{&fzI4H?OO#z%CqLvPAKU0u;zY&pAAai9diWU|Ec=N2 zx(S;dx7Nj4%i<%!;OkZdG70&+vKq#{MLJBft8PqBcQ|9P9@h}2Gi{`{j++os&keFY z%a|11oUN>4ksSqyOSk0ck)e!rX_#_`$H*mfm*iZdj<V|X6>6u8RI%9()hya8VqWZa z2OVKhstb#C|6dyBUxCSXX@_9={du+}b<TIFfYB2aCRKN+q1kI+KYmHQH;;>rHQ6?a z?5`cNGj!Z|X{!2-jrJ9Vs+V1Je&<_)Ti6p(p5Da6BvV*Gk@5fv>C6T(6p{Zq>1h~q zvAID!{@`o;xd~_@c^KXr6egt?&(-g9r+!C#J{i1J2RDk3rr+z3l58hT<lcva-@E$Y z83K1`(LenmRUSpVnp-ElOp*0MJ3}~mJ08D?rh7keLeI^O4vckhCXtdQA!J0Ohf(>6 zqiEpKuf~TT6DGxnYUssT%1k2c`M6L|JHS(n$%`6{aNO1`ITmLC;X@+9l`~UWt`K03 zKMY6$jG1+xU!+U{z%&Qjj^}TM!&a!a;2;Dply{@SqZ4wqcTg^dztZUxEWh}AVNMJL ztypRTe39s4px}1$^)jy$3n<7?<^ke<>d0il^eAxClw>pt;lQieYyZ3Y7H9M3g+Ka? z5I^kWTGBa!$r!A!LIKC?^$&)Ee}rxD-SW?12v}jq9{Q*2@sY;_)D!Gy7j};w(q6_W zVQS=}8ma`_U>DSifE?T4UrE2*(PT*|gh2=ngR1P?_gDV5?bSci7P0C&`x}q0WP1_X zk$c%J{^l*OJc~|3S16;H=cqEkz~YesNW>O^@R0QNMay12?+x#COBrps{9=5{6BC~N zENTSIZGx0QxsLAhdgNQzKpVA%aZ=sU$UvlZv%WQ`DkWI0wgFI!9(f=|d{uWLpfc<r z*=)P&PM96(0u<ocVd-JX3xd+d@8h#kGJ?YG{;u*cQGEftQ04Uvah%s%TwbC?P-&23 zPOREfoN0p&@;~Ye{JD!GGrlzxcbb1Sf{c)^y7Z8||Ja;AaKA$_ZPz9+GP#BT{LzWe zS@m)pUOEj}KevRb-1HL-JTP5ZT)4l90nI8$_<?#wi@dg~Y5@ykS6N?Iz1;s6&EmeW z!=;%;QvoL{{l*hp6Lr3xf`c(X#QrLzie|B5EA(deK1;p@DAW~-pI~v+EhUBN;`?M| zE|jwTL0!1l9>>|{XVtDH*6-5#&z{yFF-Jo$M2a~toCjUnNg8DA%hOBW;YEr`s;((e zbeS%qfaRIFvmB+&4QX_K9H()g(@!3vE<Mu7Um4u|s$#^Q3Q7kJd}qemgpLJce;{6| za0G3h`4Z@wb(Zc@h`zzD3HH%XF&ExKS2m=*i{d<r$k?3NszyslS@#KsX2b#FPV8fL z>8v0~Vtx=j@L_ryU)iQ=#!>&sb@bG96k_DfgYmdd+e(rb$^q+(0!u&Wx&0^H)b-ca zk;O+*Kz~yu<{O0-M&W@wdfn7)!L3@EGs<EXeEKp!xZr65FeI>$NH|-JliXuG(41Cs zw$K~``!_nWd_%`a3ETab&4%M8X;kLLk2Z%7uhp&!REugV5E;4DyfYi4yWogIZDe$J zHDl@`RC$mgagZz~(82831AU9mREzR1vd_zbt;d&%;a^?7d@$4$?F%Dm$MIcMsJn0_ z@lH&xd=O4~D*~A4&}RF=M1PYkT;iEj0Oejf(CEU5q&>3EFd%5uydw}qgWV<p34S_= zNr5q>Fvc+s@~JgiJnv`hNon_W<@-xb8beP@qFJiZ!RZzfzg=r*9-(mBjby*N5(jT4 zUG8sj|E3ZbBnD0YcA4^Sh>+7Z#=fO6<{y~Fi{tHCwyjIbv5xd%>Zn5@j$;NuJ}}Uq zt!493>&1wbSvy}^zspvJVIB;^fogjpA6(dsz~#zpHuL;y*={#oD>l<-lNm@u<`25t zdT0e<+_3UP3IahPJFQo^&N)co5(cwRLVJ!ykOVk3P?zSd!RFA*Pi|}kwzfjo+ZuqM zo!Q+=Ozl{5a2>gm9uM4s6Z<)6Wnk#K_;&2RfwrTmG3;j@kYDMGPSOS3t&6p!Q~@HW z996Y#cPpU3BiB3TG9R0c_E|u|3~jZHh*jq0V!QXT%WH`wFwzJPJ0lxM*DVPBm6^ws zJJL_b@ss*CWN~^vBg<dhY`zipWV+fJBXRl8>wfcybES~0|3>G;Ry~VCHJz;2FA#R& zZBG#j&aHDZlq=>GLnW>y6nB&qmQB9>*=9rl39A{~_#+@MI=oPE5u1Qa(DC%o%SQ*z zA;Eo#e%pKV5zX2f=9h3~)mI2iAXb2i2*`hA9ee<VZAs=MEV!hr>CASIt8MSi#s)Nl z)KG}sJ!ijfUm+qvN@z`joan$9qbJ@;8ZsHU=uMyc7`|-&Ku&(--gLR^Fb}eSG#Aa# z0Uho<SUuelL;!rp>__;V6LXE*mOn<jTF^p1Pgdi=kWh)A4E-5OAc-^vsz<&YKq#qg zstG*<44RSjR|cO7+s$>Az5Q8EP}-4^Z7DYUu-C|M*sbX+8Z%uKGFwX~htpqo#}tuM zNyF#8txG0nnoDDnJ*L*vV~Z<?hP%%Vb?#FPYPLs#GL5B<_nTF~wgJPToim~$2?fcV z6sBOw`~*Mr_}?U&>q5aL?{r(iNy+r2d)x%-UFo8}GlpG7E#T%|OAV(c9t621unSmo z92aXC?@&K{qamZ31@Fw#GPUr-7=4YOT}5WTNeSXn+xW!+SBCK#Uk8CsfV5|!gtPsg z`5Re(^@L<F$|Wqi(<JPa?dBt*buN*>CQOQm6O?}0U@nQPkG8WHj-U@=d{X`DCHMC4 z*2+qj&kf$bPdkm*879LzQK{a(t=pyj6{Uuy%XY&N5)iAywKlK2AE)c@s3Hi^+}hGi z#*r`@sT?FRt0oAzM&nqPmC$F|4-np{&jp$I!X9sbi!PI{sYiS2{$llNYm<Hsw-7dD zOS8X`aeu2ae64WJd)Pn6ilKtY!fHf^OdDSn1i!6=8rSOMuRK_x(Pzrfb=6o2#xkT9 z8Eweae8u?_?er#o_{7gq&!F>p(jZwJ_KM|?%EvsraKpn|H~ljND-;&fl1cz=fAK!b z5rvCHiFcs^L;0%@{e6<PcRKe>O9sL?XR7$23k#b0>;VO9i8o!OL?1Izx5Xt+l6VkY zT%9;GoVSB$pr~gMl7p2tQJ9L<^jXRbt6|h@cK9gu^9@?-?Ru-fvk`x4TJrEtQewO7 z#|4_<X*;^Ic5%B-(}vk9lOfJVLQTzJg3wliKq{o^z^upyh1dGe+P|^HE`Eeovj$9+ z07BUbO27v4>lN7;7R-{>=;RwEDk%5Ve6io9Bv|5GU+@lh=ofFFyj8Q!4-bkX#o@V} z92>{=DzvUI`Mg93{}r*ib#zbI$sJeJ>ynibAG|@ld_5h;i(Gf9p5Hu#ZfSrz_*y`u ztRfaqdX5w2judJjQb2Tw&vr)=&7o+2=-K4lmDumMG3kn89{%&GKYxq}WW#?s{A|Xn zfot6Qow&O{pe9xt%ZIsXRCo8mrIz{f7!4=)OF2p<*_gml<?NURp_o4&e(_K7P90(9 zdxAtilVchB<%SLg83Ke#jT`5I(bm{N?(fdM)-{Zo@1}ClgE6KTSV$+PB2&5OhGN2L z+O|BrjVP4RpABZVeb=H<IoZCFM#sJO6@3hB=JeL`Mj%Zhh15w#FbXnbFRXhnGNJfY zl4mHUD7%t!T>f{9mb$Lz#%fn7Tq4l8WWcy)MIa2Zfuy*jw-MYlNkUKvk7JTC-x&M` z7a^V5WsK-s_NS4ridsSdYElhN2|u_hc@$_m6yZ-jCqtSt_M5(Yi(O(5W@Vn0P2XPR z&xov-DZX!6qd>k<bW8P~UPj4AGp*2n==b0_5~Q0tG<p+R!lVLKha;#AWl0;oRH)xj ze@oj_C$;tQM8&#~&H@jyODOEhy+Nlw3_fnh4U9gWi7TNBayGb=Rw_aAyyK;Axz@I; zN~Vb82>!H(6)|A+kU{uL{M*hL)#7i}fx99|jk<5s8W2%&hNs(^88tAl-)E-SH~1>W zT5_`&j}z}oph%2Evj2TY)`qOyx_tr|o&M9SRu@#>>GP@$m-{n381BRMG_Nb39wfBw z1dS!xTvy_QG-~f&Xg#8UkyZ-asDEXAGx##SsNU!q=ZHSM*C6(UCfr~OvI<ll$3xD* znu*XiG3mOszSflGDwii0jcoI;e1<%<3R@sPHF6n0TTTOEWrkI(k%SW=I=JR)PhAb( z$qcOotJ7a*5xuI!8LyCYtcwxw3Htw$^%YQ&^vt3&xVyW%EsMMB;_hw>i@UqKyD#qU z?hXqJi@Q544)gfF|K9WNyDxJlXVR5US5+!gNxG^chBlf;ch+@L26s(vTBlrGjPeKU zq%_w50=tWX*TddUV9>4PwVT|PzEy<nQ6saLJp2qRmGqn6JvE*yW&DP4xZe*^L@V)= z(JV;}FE+whra2uY7pesnh|g26p|f)(FSlSgRh-4HrqB+IhH^jHz@4Ni-#pEJe(M|& z1~M#YIohL~Lc;BwmdE^klYH1#rC9^=hwc^7+CaA@^xSa9iOZ)E%qKn4{K>RnZ5iWm z4@DV6<*uy|(v{fSkOgMHs%uCn|B~dp)Pswch{}y(u8@!dlbQv;^~|P}@0*JzKPrpD z5fwkeIa5%i!3t*<xIQ1zK4(CV+MSCf@Qw94Hr<Cl^Ctx#DbyiC{T!7~Whp9(8V=hv zQALKDmk;$G7-i3e3<Tq@tzv8ft;R>qc4tG)zfr62kc9!>btCb2@<nd|RH3?tuc!3z z1yN&LO08dYAmXITXIHeCBML*Vcx-Lmt)yXixsum1`Mn5T>}NLq@i_T|-bv4+GR3MW zm1@+#^Ic=}5Q3!cQgMu9AIRb8EkUZ+BO!RYB8<=;vaZ0T0E?kqQ5T4;b&B_VT}JK> zv*%_Pzpz^Zvrd>;iHU4e!A1!r_|eA&7!AH#jjTz22L1gq0N797nO|KTXW#qLr2G0) z`(iQpqJ<HYXMGOk#E3PTdVNi9G=Khmy=W<R;-F&Tt~<Go7H-v+dhM{cvXca6jjO`D zH%QtaYa&bq0na6n>1B32gm{T@!&vRT0|^{Y3MrLi%z1Y{(yxsC8s;$@@!a#i=4*p4 z1Z}9!*$zTzQM0t#UDQ&ClQ}v0_Y27l`*mObS3Dclj<vl^N^s5#9noNA6CO!k%rY$9 z44dOaf@yj+RN<^Z-pa{+4y#UF@;=8Hfz5{Q+-^XgE5^`=Nvt!K|DtJpQrhxPNAHDl z|CK=P5NEJ%4YjJ?nCfzxzYg#Q=ipVY0T_+7J{;S#$t3{=E!kL@n}w6cy{W%y)Y01~ zSltwj#wYmH^lcHgxJ~Zo6Q;e6_Et|7SYr#Mc))nUE=Zf;&dS=oC2=GeV(xl37KK*O zZ?`d}+t-*s2B@8vZ##Y6Y?E-usMQ^2yy#z^3-QkT>@XXlg|o%4)?}}vy5QgIqZftj z24P|mE#(M7V}w#U;(w)_HP&z7ES;%vr+PZW9i<)tHfm)ER#sa2lfpBuoczvSW$Qk? z$EHTOglZ==f}Z|*w**h=@<O_I!R>>)1ij{Pqf`B^Q#CoZmda4KJ0BtMyr#5iq~MD9 z1WJUQJwK`)Qci2Ls9DI8uJpQ_s63s6iCBw~t;Ja7YfAA%lU-1o)x7VORN*T>2Lp63 zLA(dxJhMh)`Y5E<n#Ib)%vy{dy>CXjL)e#ZS={ZJ?$rTVN&hz*FU-xi6&+QAfi`4W z<Co>r4_s$ZWTn>_>p2#avK+Sls%}^oR_d@#SDCfkP+29Mw#;kANGb>?D=zEhXB2}` z)PP9R(s=tX*CGxHY?fyIOP#t`$&Gp1CDA>=gQiIJIqPA5vJ!Um8y+>|m$VD&pz=<m zv8HlYOR#O|pY3M9N-i#>y+N#wTOGwGjGJ4jdON`t*JynaQk5g!lwX`aVr9A8ffxQ> z1gDb&hxzTJd(zkU@0YoRlY{Sns^#WXl-g>JM%5@Bo54hK7S6Qcu`1z@zvW@UwvKf5 zu8G@Fmzp(?;Br1HSL{GEyD-GMa5;EqpgN1Ru%+E&9TpwVI%(+j5g<R#+GpuX$cBCf zWqd@e<e%h5p>~LM<S;vp-~MzJ9Jv<&|DAOcj-#*Z;By{{FdgCvBIp&1zo1}`CBGE6 zKCmSlwZKitSE}lFYTeDR`<6#kZ={2u)A_hBk>qN<PS2%g1Gyw_jzX=9!|uWabT7Cj zVC@joQA2k6t+%{0>B#AhzV}+Ct}HeCw!Ol(v+|mlK85{Q=yltzr7&87piW$S(C$@6 zuL!ZuIGyj@{1|&h&}<U|XGp<z-H+Uf4v8Sx)kNxwTfpk541?y==)Ie!Nl*;Ot)4c_ zv>#5y`8X*AEDvM>Qsc7qJ#Ks5@IP-7d5A`1{v=g!fy|U;e|PdWRw!7eYeGw8sg8tR zaZQN5&yKm&+wDj>bUaS|4zJIIh1hN7ur9w51%V<&5;CSc6p*D!IE14_nmOS>QFuj8 zOswu$Xtqn_%-lo0#cSH!wegKTbo&rX#Is#z#dsi*N%bM*VwmJ-eLZWo<w4?kURG|S z@aT)#+V&m!=2r`hut;eVS5q0r?~1VoFYEPtj01UFVnVtnG69<C_wAkGS7fGoYl7fd zT01=uuW#kKL*B?e*jp+#u*+Sf7UEVoI+mBAY1x6+J4j<3U0+mGE44l-FDEER*!R5O z8>)FWv%0X$wH(9j36zEUjl5!(q=tzAUm3QTPaC?Np_kW}BH{GhMT_?`A3%1_L`-K% zOqu+noo2c@uzkz7{7?GVIKFC5-cC9>)Ru5}f&TL$h%4C=$VHS~FS;5I8r3OMwZf9y zJnWNX>sM5m@j7Ctv4vFbxAxfFue<pnjtk-+IF!rZmB6hMd`=G1>wo$m)VRLP<Xe8& z9M>o0cRD~J-N*}e0v>ZR$v;Xmg(~%XE9l*SZ4EnZ^uZZSes-D1AFK1W5ANBNqjSol zGKv$D1<-mtk9w!>Ujzw(y!=F=g9d!|2ATL&y>AkRW$DL0d9SLokIJ|$(@Ru6<@IFx z!m{Bzp_BZq2M%=lQA{57F2eYJ`Ud2AXFGV}5C~O**{MO#N7%dT`c|wIa>1i=6}aPX z`fo(3etVB^IX9!l5iNJ#)##%fPVB9;Y#O<ZJ4OnHblUvYLbl`B5GZG_Y%M73t?_Vk zyMojcsB%f*<-^ynQQp@FsRL<^*zzaRVhy>Eop6WyOqw?5=g9M5T}MewS1FOW6lDBA zmUcnmNgwq;v6d6K1iD#BU}#gNmh}Rik2_5|pjbNV0F_p`pg$WViGr`vT~5WZlD?6# z^7nWu>4ESarQ3^d{xEu#SoiwzwaODwks?oPhuX7$Aqr)A%7-drWz!(8l+<96gTjC3 z(^%=^t80OvmB(c^l!G_2CVe#jlGd3&@F3v15(PGE^K}NPHct;EqWF4>NPH7Isp;hn z;5z5T4YgdtqYteX(~n=A>aL`#-wvD^K)FMcQ&*A_XBiBi426}S6ybO9DVGI62EVEL zC7Bp7T#YI6`{RehT^0soyRF?U;7d`a&m5=H*^sY^wmJ`n>`;p%E)0e*Bkoge|4Dw) zV)=pD;v=ohr7A!3HUbG#?9@VDGlHUwC`7P56cq=_QqP=#^@mn%G%kI2u%&daTIxX& zU`1;7k`BYh-=i`RJyvhKpk})7$S<UzEcv$kSn`@-M(7@cy<hn;f?QKRaNCWTi!Vz1 z?niE>Qs6Nu$ueJeudPf5OA^54PfC=!{KMB23C4_>^g!jPL3KTJ`!^nXW!t*U-Q}SE z8n0fH`WOC}vlg9}*U{!BcQ0$jr_~$V)x}H#PLqxy6rXe1uHl;sw>h?3)m&X2N_mR< zZf(#ITQ@J{5D+s`*m%IdXNbDs`imE=2f#Z}O3jMWT%fTq0Z<~xApCsE9*jDqV@<{t zGIY{Z?Glp|ed7c5a-s(&f?0QazrR_agl*7iFKB*QhRws7z(klpp}fc~coPbz3YBow z=hSXw)SgdNYo%r82nufNweBGL+K0g(95uf1H35K9`K0*nX!BAff(kg$md-9Vopy7R z9O)%iPoj26PRK=i>f%&>TI&1O4!*qisMhI%H0=vYVx1!C`})XzvEC(|BQ`Rd+taN- zHQZFpbH|E|Dn=QMo%r&M`$yiM50fn7=tl)heSVv8AL9pQXZJ3nQ;#M5K2ev%zU1!f zB)jZ>Ih?$%vsrsgCPyM13c9Eb5{hqo-HeL;-<t)j>s9^@M|>$q@Njwo+TmoEr2+h% zv_B*KUaG)y&&{ObSSoK_y2AmdTbVJ|c{7uRZ3c`I{KD+%NhK$~LzJS6BCa6jgbK6C zg#-!V-n2_S(p9ke;`S8EwJy_fIjzuaCVZn%v)OHk{5wxRRNluU6VXPc_>(Atlid_> z@h!c~=VCL=Hs5~VWGJ&9A;~>%!EplHIGG!S*gFG$Kf%icWwsikz6vG>iabFs7Foc+ zWQVwO;_uf9PM3((Djf>I*oO3$RJZ}7c!K$4QeV3vwWeBV17YKiLPY1js-l2&fS(<* z@pDf+wNhCk=Q`+dzJQxm5M}gh%FakYyawlz;nORnyH!+^3Als_p>bhOS8}WdVikBz z@bhQHyyy>m;?1WHiKnZ~L&E0@uGHErRz8g~S>|=Sc8J*xskEfOwUoOb5e*Cj7aw{~ ziam|0+v`TH3f@9J4&$GpAowd;+^43?YUlSZunIX0R8f`voOQJ!gzLlodpQf80QfWw ze=$+xP<}Y@X*gq-T2GwOHpy-FQ)47am5$r%Zd`HL9j25a_QJKx71YRMtA(Y!ZhZJx zd|kme-T$z$;?6ClG5C3X_qQ#9<U6VrSzJyky=q>Xe=42l0Su|2AGVnRB02DVwzQ`a zB=~qBo&LHYAK)};Q+W0D4uP-R7*lyc9<@|?)D6X)!m{x?P{ioKODq54bn)F(DE7Gy z0)N8Pfaoi5JMuN;XBAO8cApD`slZ;^*Z2%zwa0PcvzlZ7K}RHuK>o^LZwq974<AKY zP`d`95&o><U1XB1#^;uCmc@aj_N@DkFV#M$RJZ=SgI3{m>7SS7ITYO}>A|qV628LS zB3==E%lvbZvK_|a;ykjTvdr06bc$Q<5&<(&L{uSag~cLA2m*rLU!5~=mc*yWM4s8k zGqK;X#;-V027EiKfXJmc?Lxi?Gj~Qf&+Faeo5#{hV@&saOQs!xD1!$&*@mcJ5aDoZ z>8T^cAW(Kaon5~91j<o|oXJACpoL`S5ig}{-50*9MZT81uvc@LO%0os?WhHqXo*@A zO8I+-`^&XFm%)lUJX*^tDkaJ^uwTj;Wmr01UvfjH+uLMP)AorDFFa#h%O0joG+6WB zY<8ZqDXC;!(oug?w6NW0t(6M?43K;<bsXAjE9|dettY9Nhkwl-YLgQ;dloH_{5J}l zO2JPprgLm%37yw$3YEHlAM5vaxwWLpA1`b2HVNm`3}hVR37D|uzWFVOGy=D8LT<I5 z$9Hs#p{8l_%t;UJ5~RdaZ-*Jrf#Ox_Y+mZ_8r1Rji%NInWpO8$%DbLEzBgVfgc?Ul zTkLN!KK|(9Jv(H1vsB)BIDrYox8dGPwegRvA0Lyazq2=t;UBj~zQN^JVREImr8?OJ zr!ykotaXp~-%wu-J5Yl#{x&<{2eHbQ6@)9N;L<{kB-Yw_Vz|-8OqPZ_dMtMG1{!~b za<aDWXr|q(DKC!nC4{N}J&K-wEk{;!IrL1NyM|k;*bwH0@yr*f;(T6m^^vGMeIWjK zx2iO_xWMdm?Bv{Vx-0AEH@O$tk%+`s8;n2W6l?dTX=o=s$R17K*1rJN#%>^nN0u*; zB}H2F+e5|o*^^&#q;-=<BypTl>=GZ(c;)oR@nrr6kC)(xWsE)_xs51F^c)aAPh4jS zD~&9VT`l84MaV6ng+}4#2Ars<ho4Bd_9mPl1xMP;xY)c!lLf)&VwQe$xF(Uup$)3b z^ta#JeRn7a`<$e(2uM2<oyoE8ibbl4hS_eEv?Mzb?m#A=@3!A*4U?ifi1Xk+>qy;i zH8=~Z0u@Bqn7{@5up9G+Uld4ZLb*^t)0S8p)Ia;8OD#l^r;37`!^?-{JkK{1i1ftE zcXiUn5fg9D4OBRQok_CHbVEzjrW15TlU8A(oO?%}dA~Jf9>&6T(Ow}FDB>*YuSSSP zhAx*GSL2MAj}%yDjiS~CVZwfaSdkleSA^a9xIoM{z}qR=7Vcxt@0>3P-9VR=4irj< zSt0cY-+JcgZ@qk29Jwld$#U`H0&mDPZHwfCVP<Beix7++-^Yw>kBd%Whhfcw-$=!( z?Bao5qFV?j-&SsxFfA{Y9$Oiz`xtIt|KP~ADb!>BPFN;<^1ftrx4TsjP?@|J0wg?h z@l3e-MJ3H%idT8lP0xstwUlMK<usNGKkZQ`1YpM|!7LgndQ;8C#mZsNkFaB~I1V%f zk1Rio)^S9+PbRX5Xkn<hKP?ix`8X53n96c0M2YH^_n|=#`GUkTbEzr~9?z<+lz%91 zi<J7$Zr#j!<q4l4c`%86Rb)ltrcB+U)FD(o*9&s8?ZR3*(7LoD(<TG#LH3BMze}-3 zzZ`kGh51X!=G^2c^!2=@vt<hlr+k0$;T^3xy^vz+sV)wzAVe869)gG8inD$(-yQzS z6OkUK@N0+wk+CKfkf3_ih+*Di;UR7v$KQyGgiCX*6ntdYiBu_Ah1S-TMNM5TUd9_6 zH!wg&l;K0|iIgqE9SAO;6Kz2gI}UT4E;}+`HsC+!a&x((@}fw%@xUz|*xItRlV{3! zRn0+e(M?mH-$qYlzECK%-4MI&e3E5_qrHv2HpFz25o*%7FE(Hc9_5bEV!036JJWtk z&XPXXrjSg;d7<q~%Cs_E4&}X`^H8CEJ40W1MX5haO&BjX7O<jYzxo>8cFeb^Mkp$i zvoY|*S#*8DMIh(z?PkG0f(A`2xw{a3SLRNMsL9A8_n1#I$(^j-opH}J3Zg%W!yL+S z5tbc7A)tn%Ukz9iO285Nb=0Xk2vj|E?vZ3}IAkUr|7vE+^s~+h0_a4;ZOSea?jBD} zEBe*cBr1;~6;r&LS3ebuuf>X_@-wQP!aFwyLo!!Wb^6dI8fyHF(Ea-!bWa%Z=Hr(M zSxtV5b!iRhK-C3@+L(*rt0afzOs5aBFz(ZsuP=$l$ll&(4L*pP>Ue0=c^>#)nmL^C zM|}VxRdR3%A^*BR8LHEU4O$~8g<;A_MkL)=7mmDZ<8%}0;W`y`S?<$G%j$cdW){*y z0@Wi3)?;TP9(#h(gZRA$IQ==$R&K|n$f;~|?_BUn*jwPEoVe!Qe8DXJ1)al)Q`)mR zxnXN<Y*WHwepD@<t%?vrO^L?4-}8|l605Hf%fq{cb!@C^UGPP2?^we<+d5$$nYX`2 zzM4KKq!q%7gd+uqRu3f*WyF1#mK40or`b}Cyc=AWsb?-<2xMOJx7`f#nsG<-YMJ*M z{2uYzjp}cx!|A=^MRT3iDwwZ(8<Mat97yg+z<}C6gx+{FR7U_zj}K9Qex8TsIlFXf zf~XX@C=;#F@#1i3`Z?Q~1F{(Rom$tHEWqL?!_@x5ptN8YYOxzZtRHG8DETY?iu7hX zq2q~x<MS*nZW{Uzj6J&^G&Rb03S+beXbd4XJ&qdvj#470D14SczTnHD0J!T2z?=Vf z12yt(u&oySN^jK#<`*}$b6iArxhR8P;$T9J{kt=t20toq<w#6%()qYKSM9R_H1g0h zMCZ$H{MmPJu%2uUMtieR{*B+f(7X+-#KUX!4sW#hG)B&Zf$ZK$dIJysA~+hr3ljc! zI<32B3aFJW&UKk=(`+EYMx|8Tjm%-jAY8kzD3Q=}-znW&;6g`A*AIT~FeUE71?pP* zI?tID_g7?V!w_!~LU)3j2zvqb-``p4w*O8aJ7vZ&b@xiDmtN$u$Fr;lyO~)Qs=ZcS z2v<>%+mbx5bS0=JJF%afF3pE2<43!<kP490^x7(Me>DG8Kc--skw&_eE`c1=*5d`a zxt}*+!#*dUE>*ivq(r;t(S9FK@B1E!WjJurt)$P9T$ffy7v9kbzzTEkrP}()D<<}M zoGdpDuxKxJ4ZYZRv}}ML+;BvlMT=IzwTSKYbAcSDVIaL-(oSMw=)VZ*)*oqXl^^Q4 zV6vTRvrQE8&m$*l>gvXztg6WgP(qg=*IbI*Fa5J>Vv%BD{$wil1NIM;9qOaK9$uQG zLlCX6|AC{XBuVHoQIG)k&6a9LdP7a9@ymf`b1M;^8;CV=)n}dJaV9J<xAA7dM{p?6 z3XNL*O?q!=r_?HxE9s*lg1c?!MnOr7FL-4!x-_=#U`;l`SnIazTHqPDF4mt5DuB^V zbC$NC!!ad*5(&3KjEWSzuE{CS`Ys0PK-+3ppc#gGB%zK>{!RB%(zf-${h+_`W;3Z7 zRhI(nNIgH?tfh)Ei{(aB7xY9;!+a`t>hBgowdviF0b8*^Xa35B!QWM`z{7Nr5;~s) zj+$Yz2HjyZo{TgRqVk9ZaU_sd8OFUb^uvaWVmgLYv*u-8lsYN97!Ey6CBE>C)BX9Q zK3%}9w(82HK6@oe8<u>g2S*??IbxC;k%H_ACPlnEkrs9_JlW?fmb(ds2TwN2E@Fv> zGF!b@ri1^dQ)|DR9^s-{Bc&-XG+7Sx(Q($Mmy=q0Jkbzz=V^UMQ$M5s9J!wGs$p%R zboP~~{PGX?g8=w1?+W<R8ffQ?jqIkW5L6MV5J@lFFQX+%6gc0KOspx&#Q<#O4=#5T z8Da?Q#%8){7zsZJgdAS?#?8a6Qh7G>`}%2P$!-OJ0&2;RLcUr=A~gFCgpTl1YuC|6 z3(vuCUA6{0DO<YHk0s}pj7QW7fJ~`CSoAw-v~QB)^SGu9St5eX0g>uJVo7O8%s-^3 z$Ku}uV@7JMcw%Q0uU_XW{rO5TUig-Le!lJ_a<S<uEIX||k!%Fv8#o~6+F9=l1o-T_ z!BZ~nj8ya3rfdEXwkBV{tEbxkje6_U$w)E-64>;rV8G4JGX=9GgRMzVj<p6|Q&mJU zqw-ss)|E{o?M6d*Y?s(pm&pZmya_pd`WlXj{DDDj-eo&=&#fspZ3`KRFD5m?tPrRn zY$<Z$Zl$8i*5QJ${S1!oexy)f>d=D+mB^j0-+piTzKasLiqCa(PJr`pvfp4yCNv)^ zmM_z5#wUz!i{1GdUpU{s0s>MJckpu328}FKmd2aEmy4qxqBwfWwM>AlrW7JOk5zf> z<?Cj;H~OZ}09u_K*)8TBMIJG`<PjGp7;c}Boi{Of@1w?IDi)eKgHp!l>t^mSo`^jb zWF~?9H-1W2RydiuonLt-w`y16-ERzS1dJ!X;`pQ@Nj75+-%AcP4vC_gR1AdFHazM? z*KZ=qSNhz@@yt_U4o)$qC*|{Ewoi5J-`g=ZgGehpE?Vl@R#VZ<7=d13R4+*2MCs2u zriXlyx5jc(;2YrrS3A8fD+88BHM3{C`6au;Zyyb#b!M1;hv?A!Ygnt_n;5Yt1_QYQ z?F>Ogk?CEXD9vhjEN_V)VxFUkmgFMWl<Ggcoe|KDWNLm|oQ=_HMz<36Liy!A;kj0& ztq-ze$Hue}T#$rr#KY;RESW+5W?Vt)yc9RZ#41|eCWTQyii8MdLX!z=U+C2fZPIAB zHK3Mc?LA_$dEM3bX8X(0#qL4<eF8BMGmU8N!YHGOxlW7Ho)&kx+`(i5HO;v{CQdN? zji}WKq|dQINc+XUX%#xv{$hn=;>5PdX4%R8;$!ssPnB`-sp&iA(e0YzJ}2P?yrq(@ z$)x_@9VlYgs>+cEc4Cs&Nj~SZS$xG8n3?VBvku=TDTuT^IRTV#G9_HRg@r@o`BBat zyT=cMs`ol|(+6+gKmDs#27de3K#lX=>yyI76mFAk%kACH+0nVLe!$)<Wo2v#9#kW? z5JZQ4)If3`Crwib>wAu`dH4h~1K4+^#)m4zMtf-E{-Il_;_Nd!4r0iHisF1~8tpdF z;1XbIa(F?cX&Vv#{6H5qsHu3Ju<ge6)1uh#Y!lxJYNjn*Mj`P|{v@-_Sr|@7Td>@n zh#McV59$$68n6BMvG3vyrYH&sb}rf*Gh7=_v+sV8(!CoC8N2YnjF<+N{h7tTB8^mH zm%B6wcI8?M=4n~QLgc8fBh{|Aa0UzPmn&O&$I|z+g!(>6e{;Y9YljqEZ(x@}NcOOJ zGeidsr=>B0#gWKA^N&R_b@Xt=V68};utiZv6Z1Ef-Ax-s%8^u^AwQu9&h{}^gKVE& zRvV@H(+4%vN&e0|^K<=2*x%LO@Mj#1eWeP)8`dr!1nEvI+&z2f{&*c+17r4_>@sD4 z1#rh`&jX$8@MHSPC5sAP820~iMfhh0Dx#ECC)0_K5NDzVr@8P>zcD@j;f*Ej6hSjG z-v<j|W77DZ|1_dqY%w#sEQ@XY`%YF-tpQo5H@Zp$s&go{8VUB0e6Y^gXM)|%T*^5R zQ#p_~^X1djJ7*o-(-NWM9yf|~PeFuhC8lRBrYqWcak;7G+dTggcTk>&q|`dR-yu;| z#yh1<3qvrWX0*oDhUm_Z_Aq7FEs`jKJ~5NlQeHP_bfI7ru|IW8y5gMl_|FXN=v;qA z$P!;nU~crjSn4Y1`Yywk(c_CP6bt$Ut^6hhsgP45UPjGIh84GK+yPg;IrPAZ%jLIV zQB5Dv!8l3D?f5snJmG&cuZYjm1Tz2NRev897F_~<MQ7d&9|sb2nnXOOj)0&i%Ja4O zE*rN#4fg-9dB4+FRsaC(JOBU$0{_jz0N@Z{U=X1IFfgRgD_}q*umAue5CFHe=|_O? zx48ue0Qv*q!2q5h(Ag;n<PG?Q!vlc;`ZN$Ii}ACaAOJKt05G)(0DuPq2!W{30Bk@^ z@@EE(3IqUP&z%8RegJ^q6~N;h)*nEA*a;{Fd3k|K0Rwvg00h7fL<h+E_{avZfII;Z zKmhdqBV7OhgZXU>5%1BkXj?XGU!pfx-I*e4?30C2a>_xE*Yuzwy00QUy~;o<y0 zX$l5F13zyEd}aXvKL8j2z+ji0mzQkE@Cp3<K$;hp6z1m_mK2#m{8J35DauLD&PmTH zstJGu04%C<Z*OPH%V%zHbE_=?^u@VZQy|d80|+#om0L{rqck@!t9BU#`cs#cms?_& zRFIRKpP6!YnVONGn^TaIm-n+UuPpP|@658i!k>A0emRAY6Io9)$;mTMSyPXNxygC= z2Z<Y?>1ohL($QUBl70RZs3!f-`}?2tdeB6^9eq*$-D_=PR#syD`)ytk1HinZ<QB9) zIe7rOF0L^D<Wyiq-o(xO`}J6EW#GRQSQh2y78T{@7g<97OCf;4Atg6A#ex1Gg8$`! zK>n}2y<d3(|KR|1!s*4~-rnKGX#&(|4e0i#-R<q&f4)y`&;UTv<L2Aj&EetA+uP<- z5<uW|XZIQedVdFjZgzK0`LZv!_jZr(L7@BN-MyX5+=av4y}h07mzV9Gy}jMT#l5|Q z{k_ATySv@Pz5Ro|J-^-k_v_vFo9*qJ_ucFF{k_G5x2LTK(9I3#@7B}X!F=A?CFpqP zp9Xi1L6_&*0;jugAIDp}yIaSgx1Cb~K*Hnp8|d-+`U&*9^_TzvK(;^bT)u)puNOOy z?f+7cbb5ZUzkhIkngsnH4hZCb;<1?jFTqY+Kde8+0p=3|;QG1$`nq4t^&dt6l0g5J zlK!~>>;rwgeSrSW`aTCsGU(~Q;ZLAs04L}Z_TT9P#8Cu#`|lFy^Jn4S{|n#!#PENn z*Z*Dq-}V1@d;j}+pV<Bnd_FM-{11G4{~_QL<Nr#@|3x5Y@xlB1LGh<64;bLnrH2~; zbdLZ3U3xz6{DlAO(sS>=`0`mv;Xf`t=kFS66w;|w;XZ{GBRNiw+u3Fk5~dVKYD;Q* z{Cd-FUY_Qz^+BcY;IGuz{uTsX+XMuB+XV68hQj8qP-`}sYHssW6IJ{DtU=svUpY%` zt}qKL%x#Gn_y?9Y4ki~_oSeQosVSkhzjYEZFd)$pVB5pL(e#0a>jB1pX@dPf4Y!3Q z^VdqYNK43z$@9rQD|*NMu8={{+maxD`+b}_B*}VL3kYF1jF4TN_im$b_v9J#^i92j zqHli9Ql)CeN0dCr@W#ISs<R=!F@CX2)*?M6Tj*I^cV5$OWmiA3@3n4RnolgtN84oM zdU(V>*S`yG$47<qeyOtu)~6Pv9phe0ZgbWzUM7ntc)w40Po1mJ?4zu4attK<*ZMB- z`}{t(z(IK+#+VAwqFWM@f*>5m$!(W%G*=`l<UP))v#)cG2><P@5)OH>4sOV+A*+ri zA2%N_1Qs+_*G=WL;BQG{?GqK@i9iiSnV=UIzd*<`e`UnQJJm9{a?Q3}p;Bo&QO?v_ z#_Yc=d`hHW)X3QjB?clO-%((Hl6vkRvA=7Epe-=edE|T#V9vv4orUhs<&S)EJKTo1 zhl&m@^3#|zA-%VjKWu#Ct;Ug}9J}J}@Tt9XQb*B*%@^*&A<S~FcJZ{CYvx2r1lyjo zCP&X=<M`oy=RgAL(ZHaYM+pu<TkL);du-o6lBY;P>d6DXpV;aUVqsye4bTCwUJ)o- z2@<tLCX5RXAawqoF2{<3W%&||gBcnBz?<~-ik<<E)&TbIWWKrLV+L=q`VhlvO2QkP z#EedWVao?3`=fcFz*#OmAE6z}V}9|97NDl1$bWLf<mp87QOF=#0xHQ@J!``0rRlqA zF^IsK{+2LS;5VMz`8f;8ANM>z{$|SynV%1(=o>mB8tkb%g?j&9wIzCmY20_UZ^Q?? zichlYT>ayj@3`rtr)g(lwsCZ=?X8>RFt#4$DxY<o5`Hsnc5jRZyS!D{lj8U<*J+~0 z&miNJE`(z6s&z<PUx=zrpG7f;M2C2N66(~vI5Kvn;#Q$q>Ri5Cx3%L4EG#b!bzt3! z0m=*U&N1<n01^G9t`wxuShe7}L%>~qw+?8`Y&*seJez{DFRFCTn+37=iwu@;%sxx| z$)CV9bv~Wzdz`zwil%dNPa;Us+rP@y--!HKb<r9w5YbK(M6VpSJKij-oWgo$VagU8 zNgDK_NIiYidP0Bb&k`MaH5Qp;1Qp`JCp32~CBO{#EJJrMcVSWQRUiq6?KSM8kXnkv z@RGvazpZ!>qkkoI=J;b{7cVa!W;s`if6ty}I15x<jyr9p`7X^YQr{4;y3a}rKl${c zf!h5+1DWq;qxE!`y?y86Nu^u?G4zsH_13x~SqJAoOcZ>KX>iK^7f$E<mr<A2wrFT? z#PPKqE3{warjQGFG$j4_SYz+HBu2XhJ^KY~WKr);VenTN4$shP*}3@SydI%LD71j- zFKDX!J&zUIPf2I`i&C1=bI*wLMUF>}Xe2}7Z&^Ux+8>EVdOU9>%BoYSqn&(Z_IZ;A zj`z)>dM>@XtDz;x;9;}#v8s!144e5u5d5${q|w)<qP<k2Fh)sTTrO~!HglHD2_miG z1raV)-fMj?-AI={7e$&6U-)q27f|O`lCTGEPI40xQN%250r;}c#5{4l0^0Se)aej1 ziMZy?;8ER>l>p6i#=2~`Cdn-H`@~>=jWNr*E!In46A#;~)!JBa<_{*VzqRoj@~mB* z9Fg*$XHP9aNdNrOATcV{_s!7qJHlv9tdXf@bdN(g!4AWA<vtHp8h`s!ND<nlF>WKZ zMlVYo<;es#ZislU+XDqs!(905Wn~f+wXt%#F`h+={fablf`A)s6N#9Pz~g+em&)jz zCOGz{uK3Ru8Mt+xjUqE;l;4)}Rip^&W8jUEw{vuv#iHKt@Y`u1^l~(MWM1jL6s3Y9 zW9fD<F6Mp;tPv_Pl*<-03!@vce|mBg%&zWy7n7d~+ir}ET!FO*6lR#qFoW$2qx<fF zTU7MblAkO3_X5F>`#bx{#(PBPA$W>(bE)_#k`<iMU8>PXy$rovs>vU6fb(};{*uCb zWua0e)0#7q4N-0iThG!J`UR_k*<$l_ic!24DqzW@5M5Alro&9%z#p}#9Cx9;H-BHZ zu-I3Mx2s>XZqg^6pYcWs7d289@z*Grf!D(d#I7w$FK#FOk8;{VwQdo9O#@rTas8iv zJ<mZATW4?d?d_AxW2;9E)m&&9E4S*LpnV5N+Fwef8K|#d!kr=_T_QCvaN78kJQWlW z6I>v9Tx$I?BVWh#^A}oYEc1DyykfibP@QZtpg1%?a-ek6*?qf9{?hz_ju$D>>|gxK zVx9*ju7tO$x2|!e=*CEJC_du*JNe#N#=W-2+EJanDAl@5N4}W|Mb52Z^^os<OUF-L z6^AtWiZ$`rh6pJI9`2j0K7UaiA64A_W79<-Qf^tFt+15vwfk?dIqgq2cyw>cY-(B+ zaSw|`x0Vv0Aw!g-E>)t{g9JR#H9M*YWOYWr@^d0tT)Rk9DtN*yaH9$89h8L(HwLN! z7;Yg89zTlLnbgPa&UcSuILLtga6+fMR~rf30q^%Zrb{3J7Ey<Tx-S90cM*I-gFUU_ z0tBV&x2@doKM#+97#XFWLkv|c<?>xAkDoMH8V^IIMfkK^*O2meSMIy!c8Jzq&6bz& z2Va{M1~P8*Q$#qEHRBO8#S>Fj5p!qq-e=$_)GG3s+Ow{r$CXx!@{GGhN=DNwQ_jzO zf(zbu->#VjUsfTI56y!SPKnQnM2Wy{h~WFWp__a~{0wJnmhJ8UDQppu+#_Dj2JwNG zGfU<Hk0lMOIYI{eVelqt_`D`8!iP_`eJlPmc>*PXPuK;RumGw`>myV6lwI*261{TY zR1|aT3rrm?-6ZD8)?<&-ow?8&)=p#t6s|{epoVW6<14H(DpG-iT|kdrE(XBys`G0T z?d&fJ0m-aeHrO|58}Fn9DjnUqQ|QfgEq7kXyUek-wbxZc1Q_^pTs|-HAq=|ksdPcp zRGW8KPM_*V+BsXCpVpd$xN*u=e=|f#2W}=Oxm;WlK0f$8-)j)?AvQYMYA=o4Ux?r? z_13$)1E-szdftCvw+g6xP=**sFQ8DPLp5Y4w?nT)^=Bi0Y7mHjGzh<xwE@+2{Zehq zNB)JSGU3QJMNd(h{~j~2NF^ItQN+gsZF)&s8HVbMpDzNnL3ZED5Z9lZ>?TfFi%6m% zht<W=aZwhD?*m-j0`h@{{)d^XU1s_LmHe~O(aj}^Ph&0$mtN`+s(LF$>ksd<#OC5U z_r{8UN62%t8V1MQBi3_YEkbk2zuf94^=Q)YV9=#Ylyk^98Ot1c1@GX|hSIZ9FDtq( zTZQTNAK&B2cQplSfDBQ?W~&ne>!Mdz;6kZ2EPI|B61PWc1I~JhoEfcXg1|NO|F}aK zdoZyE%y~jGxI(*%HmnT)p~m<Uw`T=Oa_G+gW7{DS9_c5b*moHY*J<n3E}-=TA)Q}I zsMUwy>`|fLE{6pB5;oadl7-C&qWOl_af>xYH=)YUmC@_|5yL7D1@h$&<xjwZCp`Fj zY4%0;Or*iKgX{Osl3YfjJ)$Aw$xcrk;@zgqp<ntG!gmbj%jl5L8Mm6@imC7eH#=?| z<KWkTn1if+tu|@6K9@`#P8JR?!r{{&>%BzV#2;6E2Jd<P>in-7h|h^HXR+bQV13+R zMhr*9=*U`-ea2~q`~a+3oI<y|6jYyt4r9?n6NO`UOqnE#V`_g#@#(pl%%~URi1jP8 zY~SI*jO7WgyHghPFpIf<*u}UUlBg?+5GeV0c0Y)V=|RgRvn|v9%i^0IiVR-$Z+3K~ z%u|~0w9Qw)t3J+)hHK=@BzuOR;#-uV8^4oifw&x4@)d=b6C%Q@P~iAc(_8yhv#!a* zvMUBlzkG2E#t0=Z1`rfJ5{!(^8714JldH&TcIl0B=C#}$%z`O%t>I)`=Cff9P#-jJ zkPRD#9Nw_b{rJ&MM7m%)!nFr#SO@#0>r*P-T@5)ar`+9~lL#%b1SF;C^n3a9)$=xa z9y#n!U;EfX&L&*~E?ZTKA*T9iXH9OO7-Ds^!!)vm)7D=}EzYq=PJ;GN-Kb8yMpgOS zrS?6T=?!hTf>ck^7g35O@<C56B3p1Eezv>#P~DbLeYA{;B}%F+6;n-$X_M@X(S0iW z^})zzC40vmtxT^<Hs~}frkc5IZ+}iuWhd9`1pm-QCr#YvKFb`L_TU#RVt~O1rTrNw zMj)W(II}ykkSul6pT<mYKTpkU2-x9*HH-caNul9#RvK|9F=L9A9iD<yW1xbfzKF+w zN)V#GX+toa*4=!}UN|o`30)~^B(>Ebf6T}PA4iUnbW_py1{F7YyYyJs3jtl*Qt#{E z3#)eS;k&8R7c3X(P<_)jaZ}rE?IXDPznr5dnXSf{w{sy}qNg{8mxz6&sXjDJFa2PZ zI*^W@5ZSD^wtqK#S8lqs_9ufm@o29?tE3QVq*69h4TC!GYI1k|M>Ws%QD}2#7BDAH zS&FEXAe9_Y#t9(hK!-{KdzFeF;|y;dF)f&pcUJac4#z5(myk#WoM7aggE^Lpj-BK3 zn;kGNI_Q%gzcFy~$7wF~@Yp7o|C)8&g6EU>X&)Buf6#+!HwY*vfC1N75S>I*Eszn$ zxHAag`-~?VR{DkGYpAjVR-qG2f)gB#ZxBZh<<TM>2a{d?oiF$#F^83{Z6E%sm=FI* zjzYVs!<ri8(r4Je`|)~Rjh5^=<1j-^KvYfu>d^W}D*6jo&nhCN7jny4%c#~H^E-eG z^g<JP0NHdpN;)C=rP-c9^aHGL0Hb3bLQ73FQHOY*CD2~VwbiNFg;^{$k8riR^82Mq zOUp%-F#Q`Nl$tG0TuPED(%77ufmpy%=M<_TWb&cuoL;__fQaXy(w`xkhtp!1sySW# zf$|VuoY$hPaKA?^T6oSmE5E2&-;RJ0w7R$H{5zQ>=x#7tKyC$|;zdF=m|;Enzf2d> zenU-LG^?UPt?=}zS!1p+|C(jZgBkyJH>zK@y{n_r_R<NDQ$r|P<O3CR&=~&Sh_Xc> z{FSJbpGy|Sjt_C7<1yRDyVZ}pbzo!H;l^@Uk@EC!3Ng=10^u`Z%f4&{W>dPVomQYT zI!t}!$?1=&o)5@SDnZF=zL=P4D`k?)-K@B@I>#^_+)Cx-)pT9C;%~tXJR#k>8xO#C zM66l-e}q^h{M#Ou2IT@|kK&~-?5`KhZMv?nwP5fT0TYV2zSeMme@ZuHC6&d->@6<A zPUYqHEB?U4v>zeXQZ%_ct|1KU)lzHf&CM)fEnuEt1K&OOL49n0nl`e&WOT**vkCrk zL?K2(aV2D&fj^2pZ6I6#KATmjsE#>YPl}Loq&Q+F*8Hl;)g7GXdjyoA5vyzOkvTJi zC0C)xz|#?{oFB=V4PXX||CLsha#H7F=*tD-V!`Yc8}}a~Xz~HisjO~-ze=Q6S;{x4 zuyqS>libH-5Dm1wA{zjD9=GbVdP8?^L@ldxgncqNdXL%QQpn3<r;ObblLJsMt27Gh zgd-U8z{q+Ttc%UGRP%Hd68};f^QJMn!h#>_R~byJXXDHO<Iq*s_F?y2hX}Qqf3R_C z7o#v2Y4s{>2I(}_^c4TSrlcJ;DD1gq6nM+yyh#H|Zf9*}_9mG#bcBRsL`fYkiv_3y z$nf#%+{rYN{fCPZ7HLH}cVRJ;aM9fSf+xZwPZ}p1+Gm3KF|&Kr$&vdgX1ZA8j0hyr zkLFgn<nXs~SNoBEl}K*-LrKvp!m7!X8=eWMWA&6raCBB2Uv*i8^bFTjNA~2IObf;* zylGR%9!ul!gm)IN)TCJ<B2JzL8RMq&x`Z-(n0a1sR0nw6CQld0Y}Sp8<2S`#?*6t* zwVJkBm?s<d7yVB9o3?3gRgpsd{fL~l(x?+%n-8n%Q=0jsJ9G5jW6e*`TpOm{5kiPq zoDkY>MGa3`P9SsWv~EYg_?%-<At!){spp1`JdXlx2FP`pe&UH7m&mz9TL`C^!XNy` z{sU%7f6wUHYYf#}g0GD$4>u@g$!Ar=D-FUxZ6|M%h#eRee_7{jO07wHJa=NqevagW zUN&<Z_-W^F@NThvDEX(ioYh$C30t;8qXhvzn8Rppx8R>~_7LCFZEKB3Y2#C`3RMg( zB=UoAlo`DCL%{w8v%z+Vwu)JwN_?A6<{+)k^NNe0U-u02;+I>JU|$xx+sYbVi<`5} z)_^gyp%Cl$Y!Aw{gN3G~a10mw%6_};5^*)pcbe)vtU~t)K8R(9hi1{X`%4@Ni}aos zYwzbqp5K??tpcIyL%0RHNnP@4Xtt{+eG|S>VSS&g3Oro;_3_1<N;xrXV%ec|e#mbG z%1mRnPB<owMf-=u!v&2h=|yclvRHmUo(MS9XN$T$uyS6C-vlIe-a_|Oxqw=N2@Lhh zsY-sVdCd=u58%7GL9}I*OLfKl=5d)uRgOQEQIx{_971W?SfX#*StY0>zQ}AgqAbtz zc;)?GMdQF)mPXYStzY%m39r9pw7;U)PU5c$uo}p>Nt%)gki%+{GQtGFLyE3Vy1XS; zaN0W)3X;p6@8P_cYm9Ax$PH~uAbLHbH@yPZQ;x<G1w&%ob1@>UoLBdn{zNah#WcF1 z%O~&bTMSj`ZzZe$w3U(VwywWY*Esz0JF@0w-fVIMmH#4Au2m#V1l-}9jI%Y8!vP$> zK{2~4cB#Qf;_pohlubKn;1ilPGSAbJ9~jYk@V8twDRiiA5ej_#n@1`>upMA8C6?p& z71Fx+cnWfF=U+nt>M(7|aaM}&u?>nyIVPNbpA+*io5Ui?ZAs?*9(T-*2h697#wJ(? z?=9)Q7ssS1R_DqV{jFUR<4R*|NA1RLc(X<_bW(E2u14+vR}&HXvGqhx)L)|lMJ`-H zJ65-7Tx#p>e-ZKMt=s<M6SoQ;K8DaFizs7>IA^9x_8IGFLT;0Yrc!;$(#mg0UOG%} z*<wt(76d`DI3+i}(jU7b8{J+L#D1>C=TAIT?O`a7xOOA<ENk*e+(5~ySl^)8HSkGU zvkb%<^jA9`85y8R(aBIIWDT{!S%{&C*W1bzGsW8v3wg9h;=f8(Ja}kFx!IqG@U}g8 zxjF0(d(mKB#V>6Q1?lvaf*{zEu!c(vB&tO0&M{#c^}(aSp(+6c&SSCe+4jVlg`KJ_ z3WUI#4<!5NAh?M^YDI%ige^Z*auw|P4ZhHy@r+5NXfNWc`4h?+hQ5A(yGzc92IV$# z)vt9l?@2o^ozY2tQE47cw^h9RBNT=7<7DDDK}D6G@FO-{Ye-4=Ml649n_$2b8@Zp0 zHk~cs>=?Ax-80&sC2jVSgIpTUe(m~y?&?9qNf+jwrjKR{CWT*@sNhAg@KrLz999Tb zs}G)3vS)jGh?tWh?;xDIqgqcg=l|-E!k?nx&{$fQQ3zzPf-^%WO4+nSe_>$ACHUhD zQ7-9^4t;P%7B=8ORNYVdqg^4s^@8R*dDs^L-q`x_FVThwhzy2Kdpf!xd&ro-ayGWM zg*-$HUZRUv;5mpdWwjr<s!#+=&A+H%h-f~0GM_~5)`XMn2bo@gZIa(0zHIosis=cc zpyDWwQ-XwJ#>jPtfeO3r>iLWF*aopl>~7>Qm_X?ho^QtKu#yTTV}IcM;G?emKiG?O zbl^(EI7J<iq>=kE;D+xEL-K>1n#_BLhX&-j?z?BdcwK%SBF__zt}?lyx}FEYtb-{1 zN-G2mYjZTBQJjrg0c0BkuZFQNz#ugM5`yt?%P3f8HLMxG<<7Ur{+oZsqeWi^c9`M- zWRqQ2Y}p4-*DWT)7XP<A+{BF6^`>C!XiRQJ5b=C5#qYqnx)q>l^3hagBG{Ia2M5&o zxb+hC+-7zGXP3}flYHPi$4t))eKvls&~sZ*%@dA+_hR1&p)x=qnCU!X-=aN5^0@RO zlo1I+mlxs{1vV(JbTWF(GyaP^ZJ$Z=oan(BK7QQwz$1OzZ4zy^-xUH<du=@84HTV8 z?Yu=T8NzJA5?#SBj7U#aDr)h2&J{=$%NBvjaXX_M?|7?P#^pTYJ<}-uds?=+(5W}% zAhfOlwoq!BbUxLQHXM<RK=2uNT!*CJcAZg&#zI#bUcf8Zh0{2-K~f}i&)gZ|I$6)& zPr-Uclz5uN>VhQ2f4DA;6;ar_Y67_1;JM$;M!Fx(Dr^tn*BY4~hlQ^bD_UM7LR>V$ zbU2x!Vql0zR3epYrstD3gt`3v+(7qAXE*<yL)VO2a{oK{MK^`(*b~#!2u<$_r-Lg% zgexcl7Fy*_&hfR@=!An7A?wc-^TgEw$ELot#x0KKY@crsBJiBkbTaf!Ui+5;4Wu*8 zsS<998ywf)37DFXO(os;9Bd^*Px!MaJL4bE7}cOm-8U+gbo4L`n}3wf;}?Gh*+a-7 z3_PjEr`;9tPBrl;9cwqFq!2%>!6ZqCean<&z~<|uW|t3k?^|BxJ+FbUq)VIVE7X2J zWjEF<o;q*^J3oYe!)3o^Z@(v5)Bx)JpmE$I@=7JUmqS9P?~v5-B4^|#E!Je`TpI1e z;)I@w^fFg`k+EEW&qf-9tI?qSRqY3B7I;hc>;RdcREm#&?NoceBnCI@7PYAnk(!lH z-kv|nchPSfK3HkJAa)5V+lAMfBGt~YY4+{OJaFWitgGq!%Y1u-0-Q+}<M;<)<4R{8 zTwhPX3_>bf4{S(nEGAm4K4A03Bz}&%)z=&G@84GGJ_Ct%R|5RXr2F4Wo))OXMieo! zs^@XNl`Q@h%L4;sf>Pa%GD;c*#H=<)mKp+H&`SLy6O=Cpq^jSU_ZD~!cGu5(sRp-8 z?^l@}_6A>B!${Ns-^v1dC6h4zFdFuLYF{r*GL>Jmm%axzDqw!bOc1nB4U?LmK2^Jl zkkmEm_NS{1GueWYIzu{|h?{*Qw~!DyUluj;BY|Azn##VtTn+U;@KN1i=i2OiV5r%~ zG!Z?4b>WwI!_RxTa2L~t4^M0%kP<A)G{0t)iuku>*I)Jph}KtzCR!P9k)X;D!Yt!0 z3=fFr5P$Xddq{-x_O%dfCVg^6UzB5hl%A)drnkAjMnHT|_7uR>4W;`oph#xz>*0Xr z>y8)3oGos4PT-wg@R&{Y<AbIBZUh5Y5s%j2`Egjs^G;h+^IWT}E`O}#j<-VQQ(YwJ z52EZjXAA$hr_b(rz@=N7Rdnv{8@dN~KJ8=vKzn)xDJ8-LJ;FRdC5K_y3C+p1gIAH& zl^SCDcZX_*JdedF?B?PQ<ac=ETIYDYGWSBiZEq>9`+Y}?iiv7-dS&;V#Xo*YbGZ88 z>#igdM4#*+PPxhQ_A{jyWng%KR=&zXfFIKB7nS_tBUw5;9cW&6IkljGjq>7FZ~w5& z<>(6sFA0}Uh1_?$5P8q)dqcnd!T2Gt>4cFM&OnP~*bVSPcWvCFw|9osXJGW9KA|Qu z?Rb>S3%9=*#q4@`ZRGO$06V#_jZXnV?ItWA6KbG7jnejL#BcO37MjHg$5TAhYEFKR zBoNucI<P<&WF*8ZG@1}8G)Ein=8&!X!TyaYnZ=-bo`@BpRa-o(CCvP5--`_PH2d&- zzgJw-n@KbEm(O)YEL0`JIjkn6A+u2WQ&;Jw7Qqd=zCEqMQGJ^K<A)q%EeN&qbxTC| z1(hTFssOcDChGNb$4@JrqdSzk&jE8s(ynUjbIOPHivN8YUYh>ABEHZhe6X#sOhzzn zfSE{GFI$M7FL*!^vIt&JRT96f_C>Qd?_FT{3mLCJmNBM7o$7!WkOLy#4d(~Xak_>` zaz%k|(?zH^bSQOH+tUn<{`31D*WX*&@Ig0+s~PM2SCf4pjqE}HymXMh@-MsK9;ZIZ zm4RK70*!GELg;qC)`S%%tp~`b9LOp`P5&)^+4>I^oV>ig=T=!7Rl55Z#47K`*cVo6 z1ScjT638B760un~9R;BpBTRq3K}HzdysMUwnF$T85BQ^iy|j#zS<y;ggk~f2Ti)0V za%v@vqj>~_{17h@S40yj5n`sZuj~UNerkmfnwpvf-;RsPN*+?@#RduBRz=fM!V$uE zX@d)bDmcZw5U$t_NKZHW%-^9x;BA#G=SO3ZKX>`IuS{wi;@>4A&EU|V=oI?M((2%Z zatkz{g3q@Jt*3LUL5+3*yZ2?VUy`u}jW;~n&Z?4az%eD8DmgM3iLqPiwDmHpU+|1a z8DPcvA-$MypDz_Nk4NLf=1a)=LkQ@q0)x52p!k~3N>Q3htl~USC7Cyd78ADq4@uYH z7+3eSH#QpEc9W*Do5pryHEe8coHjNZH?|wwR%6?Cvf2Ii{eAZzxOdJyXXcqR&peaI zeLKw*1Bhy_*`oy4e7N)*GXlr}E8?kxxN7^vhHC`?t&-}yC7~joCuV|Mx+P%3u@4+w zNFA?81zsm_M^1i^T8dNMA*cJK`>WkFt#3k^_^(-TapvA(v6r-)PcoI)&9$}1K`VrA z>K|Q^T3{|%VLDHH896Pi8Wd4`;E72a(gloq6U-4NlvR;U1ZjG=h7P|Wjc>WQi_<-^ zZMIviImsN0Oww3Em&1t4%~z%Rf>TR4Bd?#htymoBN8$CZ62u2~BRewk#ivaYE0lf^ zQAacSibq)z_PLVBMWY&^^=L=%x9Ga5w${rJ`2<5X`-_q~B_j&KnDlBvd82WRnz##2 z0+ECzQ{TuviG0)N#mfv3-3v<cn42b9=Yw@zpgTHLM*%*bbRayQF;&}_==ZHCwZi@K zE%1pm+!;JcsLJM#HJP&2>+?p|dK7;0UgvP#kNV{`Ma|->CM;|)iE5lYp5dl7qbhXo zHD*EWA1$|Fuz))9A(v}qbX_aQ*J4o`m0m>f4#aE>PO2#lLDCuV-V>{NSxFbG$DwaF zIsgUO{I8L=Nma5*KAe%P<M~~#;}L1t`J_{aO8{Chd%r5Eb3>SXpgy3F|0NWpxc@<! zX~T1I!O_&Tj%Q{a#;w*a7b7L_Y{Uy_rICWZI3!QRLa0i{Jj!kP9l4UTdG<$HXY|vj z6X_X@!O%+;D*r5P>ScDQC*Y$#b3luC_{(G=D5~8sFZg?wczaSTyH5xRhSdXK&C|Sn zYy-D99#1758frwz-oYUctNK4KK|zHsbZ#5bB|xW*gq#ugFI%$QPZg@41gcCEP?e>~ z(U-uE1Przfhq-{1_ndkVM-BF@m3fM@i2$4j8Z?}z6crwDtAMyvqXWX!f4Z>C`Z%G@ zVRCc|MR<ZA&{}T$`96x?i8P*GneFv{e9r!Z1CloO!492TR}%8n+xgFGjbmOme!4Q` zLD`>#QhMg=4#_jC>D0ZVab;mR3~^ry=|Xio*Lpi^^j#YErZr{o(5M@bZ#S(%yKC1L z9D0U+<`OCj<k(N^VdKf*(v2vY8BtZeyVfL)0~2wr8Eho7hHu6RosQ4x|AlkR`Wn&k zt%e$Wsz)OPmZ(<946dG|)<gH2k*Xo0#2Da-UM`w=wIGnS6jPwlQ)%z^NqHvcQQxP( zgb9mXLl^LTo*P)?_$-tRVos*X7{+sRiwzvSgO;Om2n)fLYfmmex=%N)8czYx{)=`> ze(xs9s1wvv)~%8!L)w}i=6^aRawBnL(%R+aab?STvy1o8#TT|J?NlJ9IAyFU#EI7n zbgZ06a8b?gJfq|2^8IkM2@(ir9BX`fr|kk;;!d`y0hZy&PeeYn)%+TC4TZk=gnRbB zz221)1r*<;|9#Ll<5#t{cU&j3f!A>F%2J8*?LPfCf-7?oFC@}&&crm6tYjD|RJ{4# zkFXq*H=4J(VbD!qEp81LDhb2U{<u<QEa{0cXX1=jkS_A^SHdXj*UtD&{G`O|k74ix zbuNs3lW}<6-pwfi1v_Xz3ziv>M17aZ0<BPrZ`hM{m6QIGm5Z*T+I~+P{oQ>_TMvR% zMvhY&^i9lOB{96yzFz1Tl4MEYDUL<!?-A^EZJe{5Dcv{JLK6T(qNxwn-_2Bt*yK34 zl1vZ=<zoWGU?}IYFOhA{sl!V?A1jFxIDSt87$!#;s^c8{eqkUm!4I-RID_#@jrUuv zPu1pIL)PN_5mI3B(hVNw?Ev{&L3bXEU<~EX=46_6f?^WGdAXoLX;^Y)Sc_BM@INSS zbHpB_{bj^~v)SG<>C`+KK0!n*A)`ht5R9v1OQfIY^!>v1UmD-dL3jEUihJfQQNq@^ zl*x@E6pWA?qkg-y+@VCg53%3H-91(ey~8`=OqAK)WSMbebh@pwA!~PmZHTCjzkI{| z++LH{`jH;vO)|p}Ow9~iH`TUa0JC@sb+#kyW(!VihiyPq-^5v5L=MpB2(}{|V^)(E zY_mgEl%uVz!PD%s`wZ#zXD4Y7;fqg7&FUKkfP~7=@w4GGEbv0;q_E33AKX*ya`A(D zj&9gT<UrsiBFGs8^EpHeX{t*kwoZZYqx0ntmp2IV!59*9@Hie?X7V?lwC6gUotBkV z@VP1UNzfsh0=N_P@#wXkYs)dG7n@TY<P$4Wu$a4j&g-m?Z8vV@+3Fp#k@(Ab*COAe zl@D71IA^Matxa+@VgO0YYg~+h2t1x5(tpQXCy60~&p89{2pK;5p2GGO)WAty_2XYr z+vi9%>m?+uu|IRKa8_M3_igp{nbqWZb|-Es$mtTu$9>0Zv#!<|nKKr5cSD?yh$;kx zHbUI%KtJHlqU2GWSQF0uNZ==;QOQXHHxNAupx&oUz<9=zEB`7UM^%+G5ta*rdM&E= z?)W~?TNhQL*2i0!&<-pB5rCdq{I|Kx$gkA10aC5j*!ubZIUY*vQ82@tI1NHie0GX$ ze`&Jq^@t@&bA{6v6!T#zwvL9#Rz7P^GK9shB0i55(jJ*;Gv3tAP^QL$HaKXg6@odr zcB#kU!Rws{AwXGK6kcyCL1izv&sC7mZ83a1dn~K`FnsCig6Yb?cMx!7!X}!bXju2$ zvQ#&KtV|>!hU}1gr!#gOvbbAd0nqx`#1+LCz#VrvLljI)t=+bCa|49eu7NwFEJ81V z>W3hBXnG=R!#pc%=r^xh{%D;41e>`5{t-P5!wErddF+RcO}fUqfr<`wM5V0N^tn!% zlxn9s2b>&wwk4{eaVIVMSh7JOFzF|oc;p>CSUH-1KL}@6_sJbm@oy2Mm336J7_ea4 zyn3==9XGz*^%LcCsCjKyzotHhuUMrpQpNt@47via+IOK@WZR|is>`Gu)d8@agN5I& zz@*y`VwKy+gF3Qy@8q9uMC=`)8q%(0Ir`Fdr8tO56f1p;k5Er{4lE^C){?CQcv_s~ z$@nsd!7<Tco2CaC4?58gObl=j4N19u4ovX{wI+htbYxO&%lq>%kc4?Fk+$1=6h#-> zbeguabpb|iaFK5ip&%(MPW6s6B;AfX5uc90V4<L!gy6{YsIE7Y27Pv@r6Rh=6;1&C zYqk;ZE%am41~sV;Z^SM!$*=S9-%HB*Zyf?(R^qIEqig*r6D8vL6gFMGp(@=F&)^4u zFtcK|nAM4Ewix3(^A4ryqgSX-KpcLcGc;x4W_bo=W^VNly|W?<%`*`g;6<+E2HJ2) zc^4XjpexLViQ@&)!0Y?q4F~H(@=4^Gw7>~O5*|KA#4Nz1GN(Vl(C2{maDbd?Cx05z z#oCI<|0MreHmNfV3zR2{QVDxqXyU0=M`HnpMh{9^gB&AlhXBz!UKq{yAAu2@Pq>Y% zTQbewzZg#7Z5nO=u)Nx9(3o$4p#TyI|2sruRCAq8iGpng4c~_wQ7k9_-4(sx9Htmk zMBKe4<^iea6$fZ!sX{nD#)Jkpj(Z&nP4aLjwM^H+lAhJ-sgM!8;Wy?>$WZ}Qr*oVs zIUu?TNleoJfLm$Abb+}dZx`e&iC{nepP884+<q`K(Ip(ru+l#F25v%9r8QGY`Mlw? zWym}-e5&Mn(yj#|zQ(S*O{+jDu~gss34~hx(<ErF8z-cKCM|)~4hoAkW!AbIfsTTL zNCnwJPWhD$0+3Qpv1Tv2WRmWMgO%0VOP0;WIUp2}<m@7-i3F&tKu-N)SKDq{_Sf38 zK4%%Va&1*MZPijAw?@^{%7RW}^SvN&W3e2kR@nXA*Ux<0&QNDP9IOc-TPash&}Bj} zd8E6BUipnfj5)WT4?Jyl!5>J@wq#1&!%P0)fn%rc(;OhnEpI<2pw6j}ChX&eyDXLV z4#4B0JqM{<D9pnS)4>@&NoF-&pi9v-xb2*wrPWrHP=jBbSliUZ93~E?0wC-rFIbMi z+5WyVS-1`!dk_;vgGM9#j+>I<kqZb3OA+Otx*L&yX(}W8c;6A+Ivg0*w%S0@Ez9;- z=Gz|U8EDk*)Jv3qy1esb?xV!pDbo;xS@e{<EX;9U)9lb#v*^3B7Sc7vq%Us>#^;w5 zZNg<tZ5S`2j$rY+-H~VY&#n6dQ9WxAErc5IzHqG3t7zxZ@b!E1%#WP-j)nT0FeK@d zHS-(&|G<~&jrFk+lccw@`2w~o3jmW`GCE(A+0^1s*y@NNGc3#^MPcs2SKFd;T9gRQ zjK6~bU5da6>Z&^xIQfZd&x@yWuPaXF-RqZT?C|cm1)-XG-y!-sl`^wXQQ+p^D=3Pu z_2NE$=kZ8t1P3cV$9+J6wewU-2+ZxdUS=}#;u~82<crcZv}%T1@pS)2rvgYr`L+YW zhC=DovLhxaE$5}=l5Xf61&I^l^_vY6#qWRdLz8u@pygktb*19iIzSsh=Az)-mmB%C zrrZ4=l$n>})xzZn)5r!ST;<Of>VQzknm(dq36w?)+`s*NJi{cZV7IR>6UlsX_`GYN z7d*KcxEv1W1I;4?oF;NNz~xh7+3YeLFjwzuHXS#NoKUZ}m5=gZjsvdAU(1+FQfvj! zuLkIE{kL{?xY%uF@r5vpF-xHu(%2I-c1c9PnM`hFaZ^4xFn9cl8N6>8tY?i89LKFi z(1sbAsO=Jj{JRk2KG<y%%j$230`sY^M@(kq?vRI~CAl@SRNOIk_)pYu2cotA#l}7} zqy!SJES&?NE;jsoA<WN9703k$(NoD>{{Lj$3quaSl0J1iB$QA+z%%6pE+3jcK`$D= z2aF0rf@wFv&R>;;ebly_awpW*AuO@o_ad4sls!*1c};3^>tOk38QHM^RxE5VHsn$7 zl4*on7~KF~^s1LbegOp!O$)DFI(bYqvPh|s^c+Lgw{>M+0e|=wz7Sf$`mGt?mwV!) zRhHX#jzV|^$<*t(JL24hM*$AMe;^^{ELf{#iqKR)ns%=k6R})SKtn@|vVzjJzUhSP z<EsFyw>Z>gJ#qpl2LG9U$FQHfV<2#Bn$cA#5{d96PGuC|HDLvmPZ_tq_xHquN`HME zS^<mY^kxG6h^>sR!n?6XHtxAk#}SAXZaaSBg{Q{8WZDCv<#Fio$st!4#UDl)0i4AP zT>aU=v$%0>Xkw05@@WJ{6cRPgRxZ`~l}L1J<YKl-rrIjxz%=}zG%(!$|MwjW0uv^} z_tILYx}no@ZegJZCqMe-ZG-i=QQjuI+wK$;bMW6^H@)e|do-Rpf3naKAH?m+S!aIT zz>aJ}meOD?jpfL1-7$af0wsgku67hjE4^Sb&#@_-umV*L-_^s#w2r3f#IC@DHqbbN zx!xBydJ4?`H2UYaiN#C%djB^D(El<b(>kFUU#^S2YSPhgJGPlj_qgaL0UQv=cje0Y zoG#4n`JN3<|6BOdP9p|KU(7$^-ho(5m^rX{ry%@Zy!Ll31!H=U6_lO{@%qUIK~sO$ z8Q+p>zhfa`)k?W$GzV8jA2=HR7cdCgkq(;hV>#oPm}GMTxtvt1G0aO*HHStwI9Ko6 zF;>Uhmkl&>_d9cc1#9+yHl*>Y?Sny5f!R(MgT5rYyYa-EW&0YT`i{_RFHR+C4T4li z2MP^^kY2ChmQQUhxPz6y#o7M1Vs&fSHXPbn2PmafKZ{SA`-yU{Ke}6^EF@Uk3;(R^ z8pz%2%q2y3J{CVfB;(2ngewFfE3vYlfwC3*jDIFDJDlhb2tgiDvi#rOM=y+x1JW7? zot18rs_y;=A^T{Imvb1YFiSoPPNu++mZCeV|1`mU>cSk=$Rk0nqaMNQpTMQU)aH1C zQ3HhTCLUt?`!zsEUy1*8K1YBe7uf3e3Lbv&+*_$O5Wf2j@!Nw<sNwvw%+ky7;>CY| zJi&M%k(+-Uce{l?xk8GGAc|>m1kRwUK-Ew(Qxbu+J}AE86?4W)L5qwoCorT4P|J11 zjg8x#D@42#0zve8GFI6eP`H|nftb$`L1VW-w^DXD`@?@}&j|0UH>}szRdn9`Z+hC= z=uz{tbishQ$0sG>78LvHdWljWOeg-p-q9c=z?(kIaoODyIXe^;0R2S!SRtrhcPihV zE>m<=ncuNvVy+U-fXYL`!kpoIO*S}|W&TzF-R9JeaMlaM<R7A3&#YMF1d?>zat#fw z5@l~tS(?E8Kt-xt|8?wHPQZ06D99K61bk0<<Kr{|vH~jK@hc+N#A2Tv%0s)8bVg4h zXxj_96FbL)PpV81qK(UTJX}F$Rya*4MoRr6jA3H_zb)m99^41>n~`eHaJ93KD@zig zuPRSH>Z4$1aQ+SAZ+8==zc?JDe1b-F{V>J!Akna9$C_wU2O~NgN-b3@GYYQ*#-2CG z-*70lOR_tTD1-qAHg@6G|FEb_eDN~~Y<m6gm_JgPMGOEX!U7dei+)zVEeH{A6O0k% zxZL!;P2h^piESpM_M94~J|-j+vk5&4$n=2k08RuY`ZIh&7M`(4^dR#IvbbyR)_3Fg z5IN{cL@l4fnmP5uB2_rr@eHd*`cWYWS@!tf4_a=QT`{yY%QMLVU~Mp1y{qII+;JJ) zs%4z3x0t{=&q%t`OZqRkePEMC2xLVy(E8Z2Rf~lWsD@!@nN+g$sQ-+;d+ZI(y!5wY z#EAQ56|Q>R11NvsfHxM2zo@BsK4_qZUYuI}cSMY-?z`JGXJ)_tAquCANz5xXv#<ZP zLc3+=^-26)w6=aEms+Av!h|t#$ATDj*;u|ubOI)ibRRh%AMh7Mi>@;4br2WW3~~Qp zW!xF9eloo5bxr$Eha=&dbAB?$T5{mGB8@LJ`+%Zw|LcIu5s}TJ_nfL%hxRXvV01mO zRC>CNDfpVkcJE1b3vlU&;r3apuZ0`+$#OdIy#P?F&FF~7=lN6EyP$&SBY{zr^9xoG zYd2rG24_d`&e+qAr>J;Cz^`>M{f`$J?wu>Z_qTB^>VG@4V%5uKQb5PUw>PZWCt+XN z&EgO@TDHf7)x_aIfgD4m>g9kKS#_b8oNWEf!z|3h3v5L+vazFj?r6*<@~=&>$s#z9 z{V;v`ye1Pe+e6p-;xld^!Xp`}Qh46XR3GDDdote2_f=-!hMc2mYoxs%fYKi!-A+!s zgF33wqZi#EAw0M?rVX*!OZseN@N-Y=y9R<d-E>k6YMl4I|5yK-*EnOmHL_!GU`<bR z@RnH(ZN|9Sn?UvA<fGkyoKE6uVb|WP=21Zo*$hLA0U;HgPT)D3#(rcCY_JFZ<RbE} z3yf6B8Ic$eX^=WEAgvE(3FFPKa6fFBZ#3ww1hvOGOcNlPd*rS&<;VaLkgS97M8ujS z>(o(n{2JO-aO#NcXf^tnM|x6TgiR@%(f@DB6pwbFQK*ylXUR(^Q7MA(X$7W(jAPVB z&)$R#4<oML2RJyZ(}L%t+`%@*PjF=7$D}**TMDw&0K&{OSL9&W@Nw#5mZ(y)Zv(G` zXV3BTfcSb?=OUs8`0}xOk+}DK0J7fJiR?w?nmiA$U<CsIgL&z;R`NCKi;(gxMonRZ zs13v|FI6HAE-E6Buarw$CfR%5^94@O{_kL1F8KvmNtQ~4=SNWs@zs~dj`?B!6|p2G zzQ3qJgHtsb;FHSYYFS`zMnU~0f9ye`{Nl>uX#2whxG6DvX3J7Nb6Sw=BZ3bF<C#5# zzljp!aT=tR2BiWq$bHSC)w?0N2sv~5ESyNqcT5;?J1RLUA^R%6jPWG3mk0fBS)N6{ zO9-B&C&g^Y(#$tstj*;p>>Z-@`pXmA4SuA=of@lELD*lwS=<v&Punj8v;oY2A&Qb~ zM8o=<1W@Vq=2lU(DDrPSG^`O?pH@JP7odN7a%~@0@;C!Rk7JPh-!zN@U&>(?Au#$p zf`~LtoV?f$DBN^xe{67`bmYFf$$20rQj_}}RqZEDFpMjOJjyNgbXEaI2s$Y&<|(?9 zx~42dhmG%@ZYF7o$Xg?)Zta}<=l6HZ#-5@o%e-s9`#=8CdrTX}A)-GT)m-VNV{X=x z3zWSRR-Xdgz;8`%Ps8J>U!NR*J@rl}{sF#}6(ViBFT}m|U9cPbAdy?Jw0bYuBTP2L zYRXm=a3ygo{Juh`M{I$?+{1!QfR)=HLZ+jZb@T76mB`U*gE0eWo8aB3lyXvcTuvvP zM5Hi|N$*p2TqxJz{8iO;I|J7>3bR{h<Vg8&S{U=$U%lD$pC_M<2)ic@Thr)3QP@&( zZh_aE$ZjB2DzybgS*gC1>kGP|-N(^b!O{3ky6damAsJEcw9$%n&D{8vOz8z4s`d5- z7+(XJym?No(BFe>^=|5WQCC7<dn%ZF_Y1B>8D2r_LQsZS<(RRnl2uz5mg1bTS*R>w zx6Av@5RV~E?ow%lU6ORiC!-#N!35WKVy52ndz5*$`mbS?9fjoKwC11{#EsZCN^>67 zF@PgC!)W~0d@=Czu}DQDG4K7>?vft$cFZqhV|t7~D+@wZ=;s3`)#ui@Y!&dwcFCkg zn*&OrQsJoa82-A_Jv2P-U%H*y5(|Y6rgX;a*Y~<)SU?5Q9?YX7|JExB;D_Xb<C0t^ zBR`}0sh~lqefnzR;@voWPakA~+3MKvw)eYS{=?XvCFNWFa(-k+Udav0EDLq7`XIf4 zfExUrr3%r2uJu8yGnmU}saF4TG~6)(pW4OnTUdo#zRfJypgfHv?!D_lB%+Kryt|{T z-CQsw-_0GwgwCHXW}166N1636YLBaN-8ZevM4=%pGHzU@b+Mj0!vAj55e(jL@Fyrb zgSF4_76~hkUuP<0QUXiu#P|;a^x|?kye!Uusqo;iS=h}C=H1Q}obX8h;yaD#c)Ux) zzg)+&Is~1wZDbdQ)`;>woC$epSNTi2YTJ|6MHOtxMan-9{;Jb`GcA|3VE2)`&*PJ7 zAbi`A`pc<rWHK9((~;0}w7~8vQ%(DOpifJ_#@t9ouv^bb$AG?takSyHwESn^Wd_*~ z+q^n6+V9Bk0g-qBZR~Qo?G<?yJb>V`dCwJbk$GWha%f3g%fv8Aq3WG?U1Hbbf>9uq z@*{i!`UNi5Q$c)ebRt?~?-zs>$>oP~qHM8Wtr|KX1)GCCXou$bwxGN^XcogbE>@a! z{wvv^`tdODLIfd@=RG6km!mpf-L;M)FmD<B(hQw9sM}Zc#A)XD2-nu>IIAQOea=ES z6_l|7XXP_wIGXv-U=T{`B$TmpsJXs+nMn%bE9ZU@VU#*>Nlr~_^;f-wDB~%N=i(zg z<a}c5sj2bQyJkHI3=?BTJSR7?4Bnc~K@imyuzntkQcXjZDf|>oh3m>Cx-`LY5t*Y% zg?@YZ?Yy6t>Tl{^nJ{jiOnWqUK4bXjwTJ`i!Uxg9+=i4Xq=;!<>xPu+;I2Oi{J`(Y z@ch7`mN&iSyEmEpGx~R*&q!$^dLW9W_iDoI;3fVVccZ%{QVs{la9st0phwvAigqxa zd68iu!xc?z>`Z?qor0u+Pfduj6-o-^d~Y6@x7D0)8OPa<S<G#tVt7mO0N~fpU{mfy z@w>hXO54mG9{9)Gm<cUM`D8FO6;!}SAN35vG{H&#eWotP7&Au;?FWqUw$49bb8Hm< z=CW))q*HGO@ejYq!KnHE$U-)z@76+WQb$h??uiV%B`f7Wq-o{6YFgN%5vdotGg8>* zh&Z9i){T!RrMkIdFhDvqQ=+-f>Fy_pGk{y6HN-9-5mLA|gS{;iqqx)32_N}B&QU!2 zC%1T5;GLhD-J6=-n*fwkFybq$w7++9WaAU~JEBsjMVZ85q#BpU-4m~FOlX^T+OFFS z2N-iL#=i&@Ga&At7>iu=A-;%Vy|%8!H1rA_yC)<P)I`$x4SdkakfV1qd)e&YR0B+y z9mI6bJJV%{NTou4lI{*D^i+r;R(FZTv=(qC-g}|gMOn?-@H53*^{^(T4psTna-0e; zlR=0f0>g-Qf`3O$>@wL2DX3@zDWiDVF7?rl=?S<U)bF$#Zs>!FGx&s0Rc0@Y=kwt( zao6YjAQFE7q0gz6Bw&$tftaTta=3H%<8YQ#QfcCLpm<Cgk)Jn#FLDUW=`OU84LqDW zr4zF06_Tuu89;qXt^lh}rcm%`1HKn-d&<J7UiyRIb!WX@1WeSCc0c)3y;V@jE1=>E zh#bQr`8R=;3j(i;n%%uBSvm<~JEq8)dDbcCrRfP;9dt-yv%kXxWL6gB^AL%=;t<3J zz#hHxe(@yySdVD{aVI5R|B+f*rYs}7L+29{*<pUg1Q@bMlccc5`q*k{Buu!A<OsL4 z30G{C86kFu_<0XY_L^tjSj*NW_Jf#*2U^lzrWbEYMIv8Fy|S`ATe9v*W9#rP>WBAc zmL}`0i$AC;HY?YNLdv8Z`W$3J2N)T+m`ccj{fMlBLGk^_St_-QzltQU1M%RCnBqBz zj@9A4`!b{oe`%vP+<etWTh?&$VY7DUTuH(sW+piqP)F41s*Nx4=B35bL2;{(7jT%q z^v$uuE$YG!EXgGtm>)cv*C5r6TJP8XgA2(C?c-Zq>?mOORd&5|J5Xsm<oWIG5ywBH z8kQ;7l5tLFpQy;ZDB9Df7;P^0!n~Q;8D$J&hj#w^ZufKY`-X^&i?+HZv+^{e_F&dn z>r@Qe&@jZ3BL&=+?7u=fVNa)|L2h?&>n%5!lUuZnETc<WyqD}czAyHux{rrwBg+TK zKWur)BNX{x$&29q2<y3$!o<8{PM(C7jBx!^&CAYR$l2xPIZrxysP&Zz_CWw`*vn6& zwBo}TlgP~@JWl33;#Cye4rtb|tEdy2ILOER_Mh2I!XP<P>*oI+7h37*KsLo-Vdg}} za1pW^Z|<)Fg<lE8T0w-zCOgw-A<$L``Cr(b_Z{_i=NeN7GF8+XILD$plw57GtlVW> zZS_5s-qV*q^&^C1wSxIQ(b@3uu(nrs)qW0oaw((soDuSIxdfoxX^3_`r{V=p$I zso$6T?wURQgr&kmpv7`%W)*3331}8*07hCpe86);k#NGlcyM(>)f%AvK*m`}x<gO0 z(VMfF!2(Eu>mdN>^PZ3G<Iu;hG>m^7kG*dUSyXX(tbL*rquQu_vwJ$AKW_1tv?$)I z7)AKb;n4`+>fON0XN=<9Lb9{0`g5KgtNE)e3{_E}2m+b1>SjpeD%BJV;x`kE)_*XW zZ0QYUoe!JV%}QCn92@W~AD2E}R9l^8SNZ<E)q~*|+@CE735$$<(9x`f<VW>rmYs@- zjVoptdWJjJ0NX@uV=N0aRCqX6=%<m6sIR{ro$WRmd+@l&4uPAM0r(?3bK*Pji7foq z7_|4()LGVfKWnV-T9xaM+L9&4ShRZSYf9S?Uwd<wsUO2(sdP|~O3-{pPZBztjRqo~ z2)TkP?&qV9Bh5?WSEhLd&%<I95vP!hrtw#(I&#v^5%-lYxlrVjY{=x(nq@1)p(-IL z!;4Z|=2K<OxKgiD>q}TvO+DATorn_*e1@^kiEP4CXu3<Lu*wu2?45Ab4xeF9s9V-h z)v#iGm(x{P2(l(gjtU1ySYQOwmohGW!nc)}IO9WG<<21tG0x%eZ#KV?tiC2U0b35o zxI0k{ON@Dm-(S751cn@)O<ke~Qw7>Lyu~i7@3VDVrN15YP{Vt?+<iNO`rWO4NFF2o zkS)MR(JaGtsJ>9Kp3%kj_~+g;N!m%X=k-oVy2T86`X&$hFz&bA0bf((yBa`x<3A4# zd+&|xtUjHGG}ZPehOZ1937<a)xd{C5$0wga6vHBw7pbFPj+x>eN|6*)OgKrZgL{`8 z#O=6|1AjBCwZJK*@R*ePtw`^yo-MA0vrg3u!4HG)vT%eEsi$#r)wscG<lSQg4qT-@ zdVD{Cm6P4VHn6<HNSm=)5}Ah4xb?A#UJo;;n2N=7ipC3cHb;rt6rk5*?}zsDox6Ee zhOQV&;z8wCwLW!=&z_9K@V96I;26>j?#AAAILdSNd*MaTjQWPg1iMy|Wf9#+6`UAP zo*P@K6Q?hOdMBD;x2?;!^31)!mc#<z;{aA$`*Ypi=#*{Y4?~&vrwCp*@!Xb4a_pEc zdS}ofBX@r%-pF!Yp>%Ih7Iaj){xZseJyCpyAx%*2c56Ld<VJ6V-3JtS6(4}ZXUP+c zXYC`b+CST#ylO!!2bLkKNnGh4zAUm{pC7VvhtYo1RiI%y37kY1O}fAfYdjZ-oj&lL zYnuM(e{xzv)a^H!f>NXp{@FD+K}-VB*L@0I)Rm47;&>OX$z&5IU#<5VNsdzD{H_yY zwnQoEdH_ojlWw7cs{_2!kB;6Nw1Qyofq#@<*8iRgaz*xX`TAms3N<&cem2^udSqW7 zZ@m))w|ya&JD5N?rLMb;+IBJib4}`}2wie4@#kp+<2??V#rtA?EC1M%FW+tHmJ&dc z=mA?E5_v@2#F3-gvHxUSDK!cu71PFyg5s9^<T77R+TzxV8}zeSV5()4dM5}YHzlDN zT*uY>`?*r&SGwICKIka7`fV|>Z#^kDupEhlz~J4t37=8oH?7Gb9WUJk|EyE*YHYZx zBcoMaM1cq2(inC`Ed99viSZQvyix4vS-Q69o4av-?^BH|eh9|cg70%Cgr}8Y4fMST z-~<ff-+GXG(F8=F(V>T4&X*>#MM`~`>c;4}eiz8{-J@5G?GFBa#HM|PAxFTla8_R- zrV)q_?)=#dCi;<m>x;QdoksdKgT(0=(d1Qwfp|SsJp6<=_Co`AkDQ6(WuKfG=((wq zO!Yi8iz)q+Aa~fRzv1FQf5hf4%9Y)>e#&v-6!_TkMHV0B#Eq$^*gFy3>jv1KNPyL& zuYa_UBGps}w)5W#<Kl;V5Av#~!N5L?s+C`_=>-H%72>~n>3;@Rz=d;(1`ssO@oGls z)c$>DU56Y}1iU>Ny1Dn~&3M{`sCruqU?A;l!o+tN#9N@79_MSKee|T@e<yI-sUlG} z^hFsQyHclmB7eRpuuWkY>S}tW<W1obbGV7UYEG8>@mg5D+6ZZ-t=EEQMx|p~4%QqE zS!eCl_!aEt*D$&h1lal{RfY{OXDtrQC>dkL_>f5LJX$}tD&p~`Z|RVLvU9xoN&PtD zt2qXb775;Oa?UpHRG>WLqjOg7RW9@1-tPcMKz4OSbB1iGb-qBv)tFX-{=HI15NXjQ z#CQ4r-vW%!ep`0IzJrfS;$*f@%x<Xe@V_#GE)e7P=Fz&qOb8A*|4-huF%uOKHPG#? z{hNrEvd+tD9cxb}5HrjBfs19c!kVKq?qQOUnr;p2-S}UFz~&k`W-ia;-8V`+j%Am3 ze{XYiEe?8%^K_mfPIc?R3PcB9Nk6%qKouss>rtOTZjnv+2!w*d5H$UQuO^nmOQ;aW z^e8zD;QC%Z&Jbm(f_SL%`CetfrG>ZqA1YFP=jhx!!FtfET4R&6+u|fJZ+LCjd7Gir zg6zV;p;AZH*c&AbRS$JIjq4Kx|Le*1D4Y{SfoH&(X5Jz<$S=l66dw?$?YKREnr4q` z*hqR$l6`u=BbCl-NUd~+dYa8+y@1A)*!@>^R<ql=t~+mnCZwx%Sh74bS+1xbsCvtg z1m?V1{K6^q+6P-Ww9mXxu+9CEgK#edVHySJQx?|<ddT>1|M*sT!68<Yt_iseT|~=B z%1;L-LW6A7S08yndd(<&%R55?f^0m+886FYVgiM`@8@L#%5`9HvG#e(#dpa%z4Fs5 zNw=ovAp_5jNyPw)BrXbU!bT$D&{Jv#c4IY!w~OFHwCYG6B2L30>yu_(p*D$IJGC*k zTbPkJemwL0<L%T3XgTvASHtQh^O3=foJ>VS09o&<-TkSr8|&1pZ}>I=?}Fp`^2(d_ zfWJlt#*&g!u8@JIl(n_g<lEET;WFvoqz5ATdT5wXdn=v&SGk@nnu;VLEbcUb4ys?* zhp|G5%esIh0dc?VlpLoy+YRjqr26}_gfb(3K%}_#F^MHlnKJ&^WUlVJ>34LrvZiTX zP}V=s(sE=!-4E&iez@C(Rq;(V9>=`N79|SQPA~bTZmtC`3D@|Gtp#9vAo+KEI9O2R zj;QjPy7xqr`V??vv)dJw_aR>cg3x)CxlhXm(kn(`oFXmrip2wn!1V*HfBek(8`+;^ ziH?!WK)=oY@2qA%kTUhOQU|AAG2T(ueg#Y+`eV<nVgYOYdbsf)Imf9nbQWk3+wk%f z3GdAzc%l4Tx4M06alqqAjDet+AN!2|Mr%Gg9fGq)Gu@#RY@FB;+UttXg9Ky!)sg8C znxHkCVgb`C51h`VF2$V`-dgt;ZE)1ysR{kIlNQQ*;RKIz=F$DulJL^87#9B@zMV9v zdG99T==LgH%jXnd=G0R01105@Dm~t~Bq8oNV3_c)pJl(Z|LLj}2ApGT+y0fsug_4M zg1apMctr*fOYklB8OPvxzP4XK@^f@J<23DzTUX^Wj(0P>hs2I&WKdLY0~1fy_Fzn? z7xE?pUA2-tie$Y(dvLon7ZJ`fGCm>6cmr_t#i$%lI!}p1@>xLvIid69>ZsZow#!Gw zU+T^^y}I#>a$v$=L^WcmUfURlR!$N8jRYv0gM#^7MYt&(%{UK{T-Dl?=zI(KUtAP* zOs?<xwN$=8Qc}7UJxsg5r}QmWYJ=NNhelkeFe|U84+ZF+zOu@79C}|oc>&HjUPI>% zh90H#-nPnBsLu&hNmmAnp1P=LA9z5ISC_l55vMWXW%8d1cQdz-b|s;P{|w!g^5})H z*;v_wbp($hLpjkJ>7qV}&R*yNB@A}$x))Yyk=w|*lOQ0S&#}jXDiSe5px#wE4SP(~ zUdUwrIr4m43#X9ZOy11&x@(|sZ$s2?A#9G5&x4A*pe98!^!>)J>5QHL$BniZmy()U z#jK0s#x$bU*HGZ24;lLf?R?G@HY4)Eq1A29UVk;6rJ$7gXnv{`H?amYyzr30u(2D` zw6h-M3|V0{9aD}w_n>9CoW52K5In$yfAUrZw|(=yMX}t8=H$ciU;a@?yuG^;F6U!5 z%v=bbIgipOzRyk&#BL$g+>b&EqF=qA@Btc>#BO0EWTkDRqXpDPud~=jAh1oA&kJhg zlt5*b(w_}YJrN@{W`M_E(Tn?(%kJ+Z)#B2=;{=s<3#DLFc`DbrKj>$<IllJq4NswK z!?6hfA#}ovo}?7G=FA|A+&zBYv;zP6=n)=l1_Rg&aeA|{&`McfvfZvrcmEC4hLQgB ztC}ShNyZyM_4kV#CT?OC32&wJn1nJPMg{p9R~kxIfL|7chvj+qzooyi808Md2jwG; zd4Gq_AD@{2p#o~Wjov~e0R(X|{0S0dZHIN0sU=*WJz!`xnrCd9YTcfAKp?SCwSEfz zH2366n8|1kfg4(YecOZEpW+LkVd}CMS8C-hL<2u8e#j8Kjk=Ca&!)t9_m>diN+x1l z{#vhzjNf280wFYVWyEhO<To^<iH8DzhTrX<!Y)dxaZ4QDz(Kp<YuDI6B!`0T97^qi z`M<H*&-P%vk@<tJjaZY<L&gh<WQBVFwUVX<?l*HAVrwX{$L{4|_uj3`*H57__J@z4 zD(2--QHya^2N-Ir&0Tov)p8zJ`;rM}jMLpK*@pevfFO7}nNh|`8)Ie;_PED=@wT{S zF*++ZqnEFsO{5dggt-nyli-6mC(E$j%gkIF(6ui1>_oA5JZ*899V)`*LKEW$F*v&? zbS)=3OUgb&Em#jdnC*aSgFDK?8Z8+KZL#aiZn(n|%zX0B&=jF1Y>!xt^R1vvk%Q$n za4!5xvWcJ|o%OO|r);oQ!I^1Wa>j>LY>P8DX=65lO#UV%F)t2s3lG6qeb-U^aW4mn ziC-b>j@x%J0OPqE_Yk@8P)+ofHo(g51bP{^zWs`RgMKTF4J52e&iocsU-;fe&MEZV z5*jBon>}~wpE5hG<Rd(hs)bXOzq!x|)+c6DLJg}W=rLD;&UZH|j&Wf7&$THNJ+&#F z{|444XrTnj?k8>)OLs`rm*bhanSRjO0>ir=IgD;?y+z{(x`paJ%2@)Rkb_<F05g$K zmaVxi@69BI@aS+28uRG`a_gST1snX4c~b5D$l1=ncvuZronO{3UV(}Oo%7nk8#4w& zL(v}gAD*3U@2vW#wFiCfm&e@6iuzQKzkV_LD$PEV#67t>n|R9OxH{t!{f5U3_q57l z-!m+@fi*R^d7Uyi^eZ%94gDXbERS)hEQty1^bqOHR+{K9O(M}3CfXDmsBF@lhU@%d z+j@+eGZT|tZq19V7X8C05paQ+zc#;8M<wZ_QpTx7`3~^Zo4BNk72PZ5?weH{Zq2*) z@)b<2U=J<_TBoVtoTrRS`4{eqpd-pby3uO6Eb&hd^rMZ^%xlpP(<Uo~(#22D)h229 zfTZTkiT3zVf0&p-lusmST*7V%MxyXFs*1YlY_roEQoNH1U3LOL^m^9wV**F*r(#1b zFz{YCw={&U>n=ViCm{w6)25r|kGP*pAuN=J<JR+Yw3n^nZ7rF?6jOFp>l17pO$u`D zz})LP802qTJJKC7oLlJh6~>a4wTtc74;5x{ey(cU?=A9{vCYA|KR-Q+elKu~Sr3ZS zzp7X7sRJq>lA5|us@T6pC^=4-#+CGDr41G=`Z-d?iKrSRxP&Z%vWtH^qKsaAR*GYz za4cNdwJP{KvJRmCRuVD$Ax$=QgEr&w<LF<@bPI8wB%ao^_8{oN?~6xC;iYXJy3gnS z;zd%?Y%G1UZwbG_Ecch{(^j{0tFG|M{X{Zc2BSJm9?|_|{h034o0*yikCz`h3$Mc1 zI*%Xh3KRMf(nOn?Li;YF-dh%-lP^ynA>Fgph<;CgXbmb%s$isX5Aw6>ledolS+0_# z&ff*+=}Hsx+|XvJqoHaaZQJEBs~w;u8i<xxrtN8EV;aLdYoci=!x^P-^JY|W{!4GY zSDSBI80DZ#RfE}RQF*4sP=ST0IU!gBz44QxVQYE@Y2b^EU<@-GA!icX8db(3^~&Nv z)q~G%M&5X*1LC8FkI^zYf;djGLT*`}gp*AVtl|`$3<sbD+Lm_TN4)A_BxQcUjd7eT zPjNdz*QDR8F|EeyQ~g()_8Tbb6T~4+w>BOY+rhv4p;`Dq*9uxV(d@S`YhR<o;!YoX z3_VI%6HcrQLEC5M7dsv82s-$DWPi*pbpjO+2n(1?M!rQ9qKj@7>}5h$Y3sKjjxGvv z{CyqD%<EWJxchS6m%B9Tmt@ed5;y;wJA=~7EqE*SyQXruBh6PV_9}b$Le8T+7q#={ z-_v;o_y7m%re$?%`W)6oG3vj45Fx4ywF_smmrH3&C`OPa+hT*t$(vDu?8c{31= zZHxX#<zAmA+(;OK$WziL0z!`kIO62qBIaa*H4lacVSAO0#r$adjq^|cMk-FP<Jo&R zT>Xxp4jQ6V(^&Ok(cg0TW1AQ=zRfG{@db0r+`yNOf}s?Ac#kxlV-(NkqyzoJ+N!s5 z7ig2PSixTNnP^vaQgfi;ZT7t~DNGmn&Gw#A2rBFS18<=1QZM;)wPGoQFlRJ=VbOHc ztL5bOu;W3va8blUYO$cgG!cx)<;95bIq8>b$WarAT$y0PpVGx&X?pYvyJe|Suuny% z4~tJ|$RPzxac)kRlhbl2&&08Y9dW>CAS@~57u2yKAQzztJ6iSJ=>U>>YYYJSn%;ue z2|9(J5y^lym{wD{(u5_>5HPIZ*(+P8>R-)hwZIKRk9~r|FZYqyp|~N-iRiL(UOxSz zvi>kRCtg@yRS_Bh8@XI!PbFZSncDruZgpi+E_=lnNshG48u*sFlU)Z5Uiw{@koZd* z>%t1!9Hw5OGJfRA3>I+WPCd=;PC4S==hk-)R>1nND;#D((!mcG7v496(lr{idxpCV z0h^<xsl1Y9#x+O;G_q@1(%6(2eB$tmw@LIwW*)A=hIv=`=DVF3k=eLC>pd}%Bk6pJ z-swTv4L(CsKct@wwt$dQXKoF?8NzHwvCmW=@Y|*(N`1wunw0uPZCq^Xm*f#Ke{Wl* zLyOb*wa61uF16*ew72=;#2smjc$?eHb=E(n?3zdXH>CGR2W=vfr#GrHent7-QPYLw zpL-VubAtrrTitO>u%K~uLeEhlstv^IKWv^nJAn~7Nthp;E!1yQj<1MlgMh#Ku&rd! z>h0soy!B9Y^IH2j0<^zSc;t_f_By=tzX-+6SFh~0PjWt%!?%5TkWg?|u7$;Z`~c8f zf+)xNWeIS7;l7~j1fjORWLi6dBN0JHw;s)fB!~!IGjtNu7}LfuCIz{AkUo3vLXEsV zx>Gwx(*<C5atN)u;enuB3h(|gv2Al?b_>Etvi%7Tw=&0D^7^P^mn0&^k8=uC29mrO zgmIh}*JI9#e(i6*ya#(Qqha@}*m}GDZUvZ2c&%uRuFkx}`L=vEw~e#%NrD#A!{+wv zC<u)+FO>Iu;Wo+!bUTnodz2a#{Gz7mmG`Xs;R=mn#4qJIrZZ2(UPzs^)2@<<XM3f= zl-hvQwR}aU_e9KUh}9sKW)<^~ldY*fCpdm}k2-Yo{7rPMq;p@42lx8dZ1+UZ@%uJg zWbA}(taRk77e*N2?r0z7=xvx^lGG>IwAp`!1u+bK9MO-q{4jVJ1H?CjDv<l-e6X%` zsWUiZ*~<T-=L+#l@sKtYWO0vOu&Lf?_7O08WONG7xi9Mt@kLohB-`qevu*ot$Z^g1 z*Xs%-;mgF@$`1T+8g>V53~WfX87sa1aX{8`s3ax9xGj3P5B#b5V%1c-4ys9<0s0n) z@)bwTZA{nPJdtvS6}-v2J$NG~l%Y=`6Q1n?9b6fswQi~lc#5AXHkQ$gtd5OS+n>#7 z3%L>=5i?xW?>*2OpOvvsq6zcedZpDcE_^UD-6;c}^nES}zMcJ$`#~9oIVwaQ@(HRk zrgroDDDbER;6z9#(f$>Wj+zBMM%wFa8Wl=E%Vj{=W=B`)kRlAwWJMB=fZL$#L4{;z zW$QI0wQJ6i=U>-VemErJ98UL6;w#e0FD`egg1z>;#8Q9ic1dA9nBa}z;TP^va%!mt zbA=(q{xc}UbDCRn(K+zAjzFE-p4?PD`)%8Yss|<<5(YVSMFZVS+3*2}hq-L+qn;Kj z%PpC{aiMN=Q<+D|?iJFz2|Ew(XA1zJcXLQChX*|zeHz?vZaki}N<tHvv|3w&0R?$v z71ZY*N=Zxpp8Ff2bb&{9)G&HB;9yl~3|XvZ9BFKt2&GHj5g{xxoJ{*2{tlLvNDi<) z8cHEYt_Dq^m11Up^>;^oz<0k<H?92woQ7Q?1E}ab8hrK0G-_)lmW}mM#@W?v2*}*% z@r1#ON+3OyfYUe~mh9GcvcwQ=xN?_Vus)885f4XbBR=HgtJs#7O+;Kdm^Q@NqRxl( zht=N$(&5FF(a&pERD5B{ey-J*9AbtnaWnqpzPQ(Uh~HPGa}+HxL#ibQ<Wg%k<mom; z4iJQdKSs5hTgk$-eDN&%_2zkL@*w7h`&s-lqJZGh)fq-uA1m-4tF3ruiJtFg$e3)X z6k$*rkP=FXOX7bTsvyb@Nc(=y>-J4X^G6|=%)VmF>es-j2Hl<d&)NgeL}9>s$B_MN zdB?g3>I9mPBz&8XI7f2y!f@MXK57;_QNSf=D3V-eaX-_YP*jKUm&81J+DJ%`LjVCt zjOq+>FdAHWrjiN;$Sa|e`Gx=wpL1}B>W)alK7fm#Z=aG-=s5yOlz>zsab|Dj8RFVP zUys?ZMIf>?n2J`aZG9c};g2oa#w^m$q0HlYf~lRrRGBB4Bx7hR{5!OENhZBruufcF zvvOaD?Fd@xL4xF%L#$NE!Q}SU0fCcEca1_R2UcW^3a{oEGgj`tZWr$9POV8%>F`5% zC;_pII&Q)%3DtXw(t#W2o=;uW?p36o?WkDyK4>imm-&&bq}R0%)74uK9?8f6ut@h7 zADx(62v*Vo#N6ctax;r+RFV!MvU;+z6`wTI9Q!)70CaMc;V?;-T#~aXTY2kO%%!Y) zeLkY6?1qY<S=;r`X+1gW*c@ZdxM+=P*T3bWb$<+YD1rUB@a18b{hzW({4ebXQgOQ# zuLIiAz_)0vMk`WSC%1;&JiBN-hcskGN`$En-9fxqGnAv+Mn6P}68TM-??fk(yl-k5 z$pq8r;e19Ltod(nU!LtZ(s&Q0eX6)mOp1RyToKm`L>Yz?If=ci{s8#_S@2+)W^c`- zj8c$axheBz)h@q!U@&e;T#<9Ma<4&F3(GHRtYg8-rCt!U*kc<BlLX2y&cENMpCb4? z4nv<OzXj%UxZem=oiMcf&}~Ie!PO0jO_P+}oVIivGlA#W|8%O+>huU`7CUSszaMox zGgE*jh8gRbs1`<-y;3cxr#VQj?ePIqU)1FMoLx*aS@F^hY7*!K6uP^``(2YadFDv3 znzhQN5mrgFQjXnSKHL>k?~T#{S`K{~=F4K<5K15KRlahV-+)ZG?=W;f@bi6(|L9M! zPnje=B7ANCI{xLF2KUXYz9VkS)uE6|%$%x1%#GBH_1V><W_AttPkO7A;?;Z90S9>e z9aA))chXKMgJ>&(er{Kenl!v(HnuR$7oI-RAD=t$tOdsLowZRXorvjzVB|ngQg~kI z9{TNiVgwdX(L@K|FtT55D%V@W=YA3HG+Xsdg2^sue$kTN0gW`cUu3YvL=fqy7e}-} z)SX?bH_ku)F!}x^^$?fCY+PfnWJBybc9xd8X99Gfw^rU=Wc=BO+eUYKgm?S>`&T=g zML5K_f&PUefD<_M=`x`*G<FhZls3`UXtpBObz!(F+yw$`k?+eL_aj^AkUNMK&ip$| zu(ru8(`uByR*ZhK>A5=pbDUFrU01RU6CJ~Fc+7|OMHY|5A<)VrGe-$Cu<lSVJtBy4 zgOc9m3d%c~>J$mZO{+1rKNb1i#F?b9kKI>WI*~ds*Elrf8h&)_7bx45buo9T`iD?} zGSGZveL2iLJds-U$%SM_c7g^8o7jU-Ofz7|boDud|L4`phIVKTGu@2s*IOkiEvy=~ z4#=A;ba*PE<#WUqqr#w>sltm3Y7+7oDoKs8O2mz1;)B5%1S`toUF>)lu@!QF;hrHT zIa{vlF>M$;!(LlBC@nA1s3&ffB7{_(5PQuYTpHsLfnmikaYrY^?~7Texbc$tXpaYA z%#YV##~JUZp6bBp03T(&i$xU>Zb}z{{M$wdk6~Gv9VM|ie{VSE(31H#(<Hg}p-2*s z8acN%=&w%k&cXIE1RY>~zafHAn`4it*k3&27FR~>P(}p||MZ@mL~r*pFAw!RlIQ=p zOHUshP$?<$2tK?5b3?~a8-%PnjuoopRw1#R<>CRR-by{^2gDv(hT9lJ2CLWG&~GGF zzs?XdIs)|cA}CEB*L8^Wb(7xV7OxUuXKwa?9IE$OeZg$JqXx(^T(aysYvd0Qe)326 z+Ij0)A^a}8N;WvuX?|QuScJOk)Ib?A`C;wcD$OMEZU3FMRA4OoNR*C{1`V#7(`x*B zBwqc}V3az(?RS+#g3A3C;p5>%GJXW4Dl+Qxh8G9n{!)a9)p*1Yp<~ddh9&M}`1cmW zPwnrJ95!Hp!IdqhqoE+q>V5f!WHEW^-gvzDwrfKk>R16|Ete-cn$>qz;_e`!ZUoU6 z1=otbFU3Qq9rGv7(_dkngr#39G9%Tpawp`rB&r1C)UqUh_FMn_h;OafNP>G-t3Sm- zHHtKXJ>X_>qD!?AwSJbJ3GZyPttstY7r8o%`{mbs&t^wfJ|y7!eeX~tYrRzw5s@)` za(24FA~ZRNlCyMBqc8c5c(;g+wve*?;dS;KVYk5z{gqgAd@8k&PGJfxLAx(n7+aS* zA6>Fhi*vFwvNV}Y(<?^brAT5%B$o;^KvE6<ZKNBPYFdTiRyspRICRpxG0o`9+rH(i zw*(Fx%F;d>atfVkT|1A4#Bs(jZZb2OBKt@E*h(@33Qqa_py&rj9|YZfwD<p`=&S<T zT7m$Y1efA&#ocLfr?^wRxR&CsB{;?1UEAXB?yg0PJH_3Tm-m^UYuVj9cXsBSsK}Jo z<3t)<p_OOji!%6Lu4};UrdavRKJE(Smt=PjU5>%OQ3|1|hr>hrs;4xea^}s3k5KQ{ zz}lSw>@d;*i-I@-L0E4`OQiS#P&9!0+lTi!UWi&*Lcah<D@3w*Ur*DcLv@X|wq3DH z2@kNEjU~T7p?2(aobvCCKmgDEsaG7BoDQUcf8NHk#&s-||F}Ky(Ib_$Nk=FDA=UjA zqVA}d-<crLlGYX{zP6+uA1d<TYXTQyI6wv>VsSXTp>+Ex7v)E3Uzj-asQBS~qiE|2 z<}gIe7}MgB{X{Lrwb$zH5cs<y>3bVmd<G=zP7f8SBOt#M*1RuG*6D@0>0in%NR#^8 zUUp209c@kG{2<5md2~-k_C_sHX18VUi!k;s>foF4lL+CVad%|I)BE@yaLU9OLL1}n zXSrN}qCj3XF>}0!@uJuVIg~BsP~84>bN}p$5iS=}-{<?1yODoF6?f_HX{&a0AFu*Y zZ=B2+h9TCYS+2hh<T2x@pb<Ry6!)U%qJ`0yyl0tDUEEjmXOmdahUGzU+k9#Sc!{*& z8w<xL)n+l4S676Bwl!2OVk|`b#~d88pE284S+p$GMZ5&_wmk=k!%#gVnGE<Ba)F4P z8vxO>(fr_#aUyzxfO0YTs@MFm*$e@g?{W4US*kN;7uGP!t$?md1{u|u9i+;RpjZ%* z?W6hY&=r?-YPTElyzg=%8S^hzS3d1Ld?7(;wp@ZRr7x)H-+9tE!^eS#%<+}Me+$a4 z@|Xqc^n0i`o!s|gmh`e3uG-n~bIp6FhtFcfZM-Y8+kf{Ft`4R%SP+47)WZ7P&$w;u zhviiKqgHlr_<ah(wj<tEY`~rSr})p!eq7$3(u6<F2T|@mwRy=gaD?EQkmUdmRHuq0 zouNoqc>iq6hB2+<QG9U5R}l#pXGX{^>M3Oj-H^3tMo6co)4nr(0NGn)6W^=dCUcLA zz(qHj8BE^~9l$wPv{1A($5A50;s;R9Z2;CkjC{2pg0TY}2rqP8Xqt#_T<qETXkL8= z)0DucknVNlh5Pd0-?<JO*t*+!e8nl*l8gwH==^wUk_Fu1zYC;(y_?*9mL;tVQjr+d z3@2c2_v|x~RT=nOdy-J~8WJ0+x+vjWAFbj`;O_>MJ|udx;y1-tPx{*i>p5MV2$BoW zHee(B%C}8q&Jt~jOFYF~-AeY^!<T!iPnQnSr|op1&C3I6R3!;z5|4ZVwdr5Pz`{jj z^44!?J;5|Imv}p`<Ycl=sP1lB52AE?llCC^c-GeR+No)aX4eUZBupM@@;PJ|AIh&9 za1_q}i$|v;1n8n6-@QaLx6lxiZ^Rl(&$#<MzLN9x4QyktdQX|#A2atw;NIpY-s7cD zuMBhxPfzk6Ys7$(MrXi=yu|I;tt95JJZEya7V_G3XHq~|St2U_y#~Hzhu*T2IL0=S zpmps>1M`dda~c+0&CPdrJma2ID7#a!#$&}|#=Or@AtB%y^(wOaf!du(ZLmoRcq2i( zTb{%ZqtSz98Cj*U%O$0unSOMJ-r?<D0!JUyj|%q;J6y;aw8@5|Hl?PMq%d4n45^Hj z=J&}kgLY%W;2{WPqAvtvDV|3lc1qNty%)0a=jJ67IWTBmFdbrCME<)3(?7#-jLew* z>kf7j@<?uw8gCNzVr4d5x<{WCab`a%bY0fU`!|+BDV5;T)25B|<AMSq*tI&U`}<69 zwa#}tk3!n|`g}21|Bf$eS!bkDF(JE+D_tF=RmmT&aWso4<4eNDw*?!V29dMUaawp$ zk**>naTb7rkUEc}Tk5fY;1UF0m;a-LwI9LRg5uXD%yLBJ#HV5T?w+yW&VU{_jO}(U zwXU7?2B3<#J`KudKF!?ZkP4=6-MdPOVl-X0X{Fd1*;Y#wGY>*NRi)yW=e7*OjJ}K~ ze*Ocf4&IG*X*UNi$c}TenkJFF(N-SvK=LQ&GaHCH#2=V*VEQaDupPzc^f(5u(g}Q> zhravD3KtdQw&2pfb=jT(_ni+R;CrVZ4zs#Mj`R$W9uv;m$c-!5reX_Ae;lp2^;af% z2`xqVhyBhbg`_IFUR|U*e*oY6I#Gvt4yYbOVy(w;2XHt{SZNGVa*y~j*_$azs_@nq zM)WRSm%64s!?LYa9MOO4=&E}~i*bl{Y>_%F8@q*m(E#XPVYD-ESF5RQ3!G1y?n84W z!zgrX@Rd=;kL2|97^lrGZn5a)A{XUSH=f;pxWsH`ux?V2jQkw%{0zWLQs=#zmNrNE zS}n8}EGXm1FLTHzRZYmvkZBY!m>aTM;nu|U-Xdo$|J@i}xkV%H?iU|_%fcVyy9n7t z&Pl(gY*_3HE|o6H{#wuz*6^7u6_7YFZ`<R1c$YqwM#}f5iRNF`^HfL?zfH&h`MmF4 z|K(q<4D08eMw7Gx!1=m}B6Ba7VC=kMm&#DRsi(#jc(C;*$Ke%rW$71U=w#_Q2&L>5 z(Rj1=tS0+IQH(kKQ7XO$dJt(TJPTatJ*Nd>kFE}))3&U-Wuk0@`uAE2li%dqqU7Zk zIZkAWH=qMsAKCFe1l{fK_8RlNBHw}}Zg1!`D%k4Ld>eWL3-<pRA%Ue(dzxuqOR^?E zYmp|<d)9G5J2B+%%5jbbG^gU$7x@>Nt!w>uNh>zr&Dw7SmLYRKPN7e${sg3N3{(Kz zzQnp2Ysv&>B=!7GLrWL%N6(pL(KYT6cO?5vxSuf~M*6UM@_9jtqCn1K`HtvUrbNY@ z%54_E`;F7}W=cd5Ejn|HAX$EIXMP>KVix6B=lI1q`SR^#lBI@EvnN5jZ^lWN);eNK zkI?Ak0LNqNg(Bj*N=J1U=U*-cQ6h2Z*7Z#ZMJ8nH_Xr<!bkvLu`k#Ygc0WM4*<}Lm zt`NL`t^p8hWk76_@Fc+<d`_P7==q$&JT#;#5u!8eU=Xsa%-nln#qsC-<^|AkQFDoj z>!5LG)``14@BW@m16f;;${Sv?L&UI8u^5@37;QK%`cTn%(K<o})*DBIE<sRDE?<LB zQ!vl_m>L2V<6!EAM&Ya6-_WgB*S^O5H6D7!y#0F4QcSj1%bQ2$8Dw#S;1#Oub4LGq zK71QBc}tV%{~)9s`11xJC)mfRWw~PMd_?B7FWZyRUxbIuAB6NU9e?10OkrCwD96iH z69IlfRnKnnb2FqHP|nyQVFG5Ow@45u=1?eKzxOOK|F<RA%=D0LbnbmJ+ORy$xy_M5 zNLudFY3G552F+t*@_<20p&@w3KC)<F!vn%BL2$e7{qAkNR`&HK|3PAR|D^)VIwTO( zn$+KNccpRdPzCtW_2u$#l%+lyNt_Wu+!vtGh<vySZ{$_|V`WS_bL1j_)-TkIKx<_< zT|O{`b0542SA)5YD$P^wrej$c;$|lk*%G3Npws@(WV}TD;-d(Byp48}7hb%T<lj-V z+BDO|*W?<V+Lw@xCG`}p2Yo94+6s8Fr3crwyz$q?WA{4=X;ig8_5k}PXjiav2#n<% z&qdM84iQf{6_~Qu{AOIB`Gy#XsmIh)T~A4n8S%h0!SL{VD#;vkOpEGF1djz2KCSJ1 zbc>>SSk*Ip@^xXF8eO;qAlF@8;S#t${Xka-Pya2mn0%xqiSi5YT1m7oiqjn>4<fgX zT4TIQIKK?ebaLfa(;E=$J)})7%VIUEfZ>mHcZ;%ZaQ!QEH-{H;v)(juYn=vOpKfsY zqgT)E1~_5*+Z~^2${GqLLVaYL%5&xPJ^~U<t@V#+l2^vSTCfx77G`gI3^Ym%rBr|X z906`Yy?Ct*Ftf@*Cl95y9*4sJWH}1ea<!tt?A#K@?Qs|8w6`Uk*#zIpE};@wv)H>b zJbgH!h#>M8>%pyo`0(F#H0@|Ei6$Qvv9NwdXslc`*DRyi_D<-iT(ejtep&X`ztH#^ z-LURkiJVvQl(>9&0n0IE@4V$WD6~--Q1x4M81*49UW*}fE(*6lW|;pJ+%fZUz;JaX zJZ`jnJ#cLMx_D81VSRy>R3D;hfd7~*A8?w9wemfK6gn}F(jh0A7l-h)&g5$lHZ!+F z*`pN8pH(P%Q!tBhb+W*&-;niPg<Zw!ov@gGJW7zYY_p2&Xsl@>!b=5%PzLKY?_tq0 z=M$4$)aLQ`_u&Kl^7l!NfcHt4hccph$Dg`m9euu8i<s9oK4M~U*UizwqsIB&h07Oq zed4gspVu!oUPDS-A6LDkbtNCAeGK`$KZ*~?=p%{PXfkyRYP{0Jvpw9xo0>zLm%BgY z_cbMWA)_B}MM~UI+Vsacz|_x1%jXrfLifwy6^(s!weF>nve9HdGJQ9pIZD<b(YTB& z_rx}LnWl-j<2L8fl64S9eQ#P0HD+7{M;(d{ce(j!S@gBqz^O#Rh3Yzb#KQKX4#X;* z!uHM)?5a5CPr3_&eJ^11#={<MaNY?d;*SyVTXpZx0;5xj{y%*4=xLZ_hiSL(?~>DA zAJVUA14**BL>&G|zhgG62tnJ2b2vmjK-sZ!29NlZZX|_t!*=7ys$Ri*rIeVfk$4sb z>8(DC+O+rk59<g?aKsmq9a^0YxDz|xltNG(8OwryPm=~I(>5}7gWYSfm+m41(>i{y zG$`Qnod?CpJ20%c?pMy_wdY)&xKIWr_Xp21WH}bin0x&g(}qR98T;=lNhdsyIqYrr ztEzCRqh-i{2aMn2#=&Zfy}GWC%fvj645F7H$gtMvpHBCUOPn7d7-y$E+=^VOOx3_j zRBKteD7O0#iL||T)t?ItUOOa2^WP=1QK{fr&`W3obWMp$0A+{w^r$2UJolc`R+Z`C z%J7~Y;%ReA_q%c*|J}wVVhAy3*5=Y30ICFnifx{4flGt&0rw!MS21KBW!~)MMYcKc z1PK%gXK0<cJW>3*CLBn6;?TM}aGL-F>%O9ChVjnmBJifpC2Q#DtcsQLZCyzLveWa? zz5AsrDxgspFagmz)1NWiW!-XEMHR27>Sw4vnHQssxJZnyxb-sNiTKOgJ5&_Tvtzu$ zPt!33j7n;hgOrJeGqBWrG(n0bZNz7EJpvzmxSM7e6ajxC`bKGA%L-x{%In+6+s5TE zlMQiNNK^J({@1NCCeG5oJ1y@YYlK-EIW+gIUyQ5rBK%gx-4)JIuFKCA_>?sN;rM)e zNEYY-<((y-cj+0<l2*-xGa-R~y7vC9FK%x~(7(USXiAV}r00!%`!|HfE>Arw7o`{l zE|mQhGlt`%+Ie7!c;`?MI6)X_obdN{AfBZh0V9c;^Rox1z6+v1hiWJ1dAZ!kD@Dx) zFiN)HO<}@HU^wGx??+`*O!m?TXsS>`#qr_!_f5_m4ivwtL#P*9&*81`(I>fQE8j?@ zetervV;BPBnLahKpmyrgbDf(xJ&?yQTKIgNHuz$;ePln^sg9WVP1g&AKuPfZQ{{&* zZ|afq*`JEsDV+DQS{W5ad|r2#&zlKE<XS*=8IyD7Ar@(tbNQPZcF98MkjRRkMYNB` zWE@-j5g_(hZ+;cWgF1=ZDVbJ~(oad#E<zvaqk(@)4`0xt>}P3S@3OfOloMwxdOn$j zri8wQ?+xxOcD`owyy(asRVOWQtiPQWOuF@PPd2i$BB~B3N#?V@Lm&UTjg>j+`gKtU z3tstoP~!lXdj9k!!D|jn{35xUW8sKD_TZm4UWZh13EsRFB2Mb#u-QrWc~0djs>|Mu z8c*rRHtgdRY=SJ1=SZRc1$U!U2)>VnMnOg$%MDz*(vRFi$wfR*3OA9P$}dn8v7h4i zWUQxtADrUv&51uKQs>l+MU*RfP8O7D;aszx3N%eCoH)v%n0P`<8y@e{xRdf!a5$gf zYGZD`*kK+!X-vBnrSRX*pb*UHiYad23(<ldsmlS#yXN18{rC{_wcgWn^f*7S3-F(t z`h528L4bkoa7q^i#!9uuqs2^uS<9y-YCo^Kt(2MV<c}t@qyX+QE}au4;j>w`+Je*6 zR|DwYzJyhbBonN1_5w3(kMKJZaxsS#_h!X5r09WZ6&rMP$s(G@bt$UTtqtz2xC$JA zc8CCa%}UIinq37t59G@bt|dbEpm~0E_6Cz;F8Q#4;v&@j8ian=^)kvB_}&<}r9S{M zvTwXHjg%lOG<+a>b1>*0>y2bR>|R%8Ys%9ep;fc|*+GL241g8+lALgbBI4DPe1X&# z1G34lF8g#Pc*+0G4G9}-83Bt;7jiFjT7x@3&!IwsLvz1j=XAceHV(#^fA9<Ftd2kZ zu4HY``rTozfBJoc)G_{#Mnz-hI$<!6=29a5yn=reLv|VQh?#n3O;RyD8Qn^I099hI z-oPxbI!H_(h}Cw>aWpih^Tp(wqzR-UILa~3)X$Veoj+9Nb0ac=O0nmkpGQ0<rq&%Q zzi{NpRLBTSn#<oaM@1(6%5n&yt7{_J^Iy+b_D-m%CVfX3UdC?4QZ<47D}k7AuY@Y7 z@C6GyPaW?$EspN}s_)1~UkeA<AGH&)(^8jG(e{Uos!S18)<=QV>B)-awnG=Ksn1W7 z-vZj#%9?F;%k#U|wCG?OSyBs|wC<AYMlWV$SxcZxC)gTS<3MF%daF-p_qHy$-B=^q zEqL#PvVl}LbG9h+Vx?CLDE})s)b3;`RU`>pi44Tv3H#pdMUOSg9A2KFZKYPYjvJ>K z%BG-Ub#EX1+*@3I<ez@sNXu#>45u#{Uf?q5LQK_eHXI3>CnF$oaqc)U4NMM1xJGu` z2ZW=QDquwZee_V?R$5NFv`p0f#OpY2hB;9{kw{^mKw6Z2vDa_#YKZgfnYq@Yp!Z@> z4ff@Uulhc9ZG7UQVNCnQ$kh>TVP6)^&!awJpfEL#3XWn3mj}_pWxt5Oe5mEs1^!CJ zhS4iz51jU1(M6w6d><bj0|x(UOl!K%Vl#I&z76<>fVP~p@tFV-yUZb!uK$ios0`j_ zsV2xXq|14t8-2?}3UvOl#WvP>p<2{e&;R}r7?Mc7y7Hw#UW~I=JF_Yq*Xi4G{}q+0 zs5PBQU<b(6Ejr0MKmcKxX6u+>$fZ(TFU;tDcYpw9yXOTtk%+n|VerLI+KY%}&j@_s zt_vlR$&KPKu%fvIIC-VPi0{oUNtQVj@+c<T?`8Eg&_)FP`|T6F9(R*p$NF~KRll9p znQ;i!pVl$>o0-Cgt4x@?Y-24Fl0NQTkf=2!fyN!QBwNl{{aQej0&FjC`!V>b*F1Q> zFxMw5CF{ZmLaw*oWkx`sLk58m@5Ai)`+QWxT?^baRgm&90rFa;fFkLfV0-JaT!CXO z_BD=DB7;c~=Ck*hFvs0K#%-ktF~U4b2)*;n5vum?y5Xnq3*>PwS2vxua-ROI2!hS) zmc7#%uj98j>!shmOj6OS{M+?*%cIw<&!Nh6ivJpu2-3a1h7Pxp{5=mM5Q0lWBVy7! zi9cdb2`ff-h<3%;U>>zPfIFgnZ@O~EdEwJ?)+}lOR4cPH9>P<=yU3F=zr)Lvk{zMr zs_>BFn=GrXS(do9u(xd%pJv^SNl&WeR@ULC$-04aa3oQD&nQ@?>69Jv<~Nw21-BM+ zN$ZRDEn93$UfKjL&~ojINDov{P~0>WdOjWF7JC$*;4sY7lR;A}6O?WK*!)osGc9Ff z@6ckqJ}NIIFm~!=LL9b5kc}#fLh*Ee7e>I!O<m1$K}K$3CV!^w@I&|vD_KHa%Y27y z_pVEi%Ct2F7d8?LKyp}5DlZGYn8)7@#Q%M=|M8Y=^=@9b@;%L2VX3Cc^dIOKh;fv4 zJ^b@eCbzHRLr2n*fpo3#EizdU8<LH&0edt(8BRTI)SmC;hi|0^2_P&57~BszTUeLc zGEfLFRj%1`u%O$ghZe)CQnegQc+;CQ={Yg;ZA1SpRb`9E;EjykEDFkt0<9jMbX<OZ zY?<8}2B`D#epi~~53-W*TyMb9KZqEB%hb@*6(&6@v&{K1eN)q^C$%IZS@(!Hx>xOV zb*Bnbas}Su-$kf={z_fIpK$#B5)ne)bYO|=p{KFcQzYgEA#u8U>B-QEOc$;VkbEK| zIT^OOiy0|Jh_w}h=m~okql3pN_)v_G4spd{WzOiV%_&;LiyJYB;YfaZ0-Ty^+W-}^ zz3f2qk13j7$sKUP{D^fC!LjlL4W@zCuGM#y(QY)1h%Ektz+g5~rN-qpo%0u@xt#Y3 z)J&i2yQ`!CwreSgtY9V>9Uw}~^rOyNq5<;RS6DxU1``Zv72=l4;^?ac@(<|)4y!X( z?hH1I_4O4{cRdncj(5Y0z6t2S7n6flY_ZA+MD@Jjpy<#*{-nOKnD0{^=zh@6nO(Gx z4O~$|4<mOqTw$QMshbv0Te-ZertFH)L7t$DF;m_fW<6TDBAwtdXvjCoKd4d}rzIQo z7PNs$@U7XG12rrHh(@Ob#j@M*p{RB18$paOccp=8Ij_^GR_R)ghPSj)kxD<3&F`B@ z3hV}Mq(yqt?!@ntO$ec77RgEi5B;pblxF1}@vx?)53jI6|B+vXk<GVTO4gH1ibmFH z=MU?cjxE1S7;h7dogYWZf*5_r5%cUczP8Q|Z_@F5EO1OrdpKaU-^~QIJe|JMOcDkk zu9w4$_wHVYvU=dt+i(iFDJ@TYOX2&~g3w~Os0NRCOM)~*vIjZTt*OJ&q9z)S5YRD+ z+yV9%(`m}XEU3Fj`ML1Ujsp_Q_*a@o)rbiWk3irM2Fk4uL+V2`inql<*VI<`Xf334 zYRfTHFbOxKN>uLKgNP0j!OA4Z<V#JJf0Utg*s9W)g-%K>e0*Jtf{Qo$Zn`iCUAaab zqj<ffdC&xblD9*5%#<0tVTa7hHf8R2O5_c&I%<r>gPiKCF}E0!610jpp(`p|+$o_) zu8<T><BJ5o@}fjKW-5Ky8-KjyNHv_$X-%H#-7YJnup;QIrvdFtR)^@A0`DwOwVbX( z*xE4o>&)?w;f3bKr_ai{4@BZmZpHpyUX5nfJ!S;w8A2*L>>rsi^LsP=R#N>@pss>8 z%j38aURwrZ!Z1V+uO<j}+=$@T*+4ot`Whfx)8U7Ec3-Fs08vK7+$U;$wfhOMSTbRC z1@bP^J00FTqfe6mjPD7dMPSB@hnKNG6pJ#bjK3Ytj}f|Bb-m8FH5#W)7#yqXm>#B= zM`Vb%44Su;MTJJ07tjW84{#rln5YK)WU^dIGMEV(8;Z<>Y@mpwmX^0*578Gm&g+DT zobEvHBIArJ+^&wp6wYm}5xR<8c~HL?zP^Dr67O{Pz=2=&#vQ)vzz~8Y>s%G?aa(^$ zWiPjkknViQSL|gMREOg*fV3sxjFK%pgJ<WUop-~t$7Dr>Lv)+n%cX{?q0+Gl7Uhww z!vRNnpt=f{^J6a7lfev}RP&K+;gP<>n>)ZTzkE$;CN|gcjN9O3g-|J{_U15ZP|4^j zBsX2R10|1BAdYGD!$a9@jB}3Ji*eEnRJ;D}iU#_M-#PX1)s*j_Eu^PCW#$z?+()sy zF?}Dy|0CG3mM~3`w`)Y+7cUVr&eZjWH#JrJE4E!<JP3AfCtJDzzQ^%*XKIPxPUOnF zbwy={o#zDU_vWIT`8Ce&trC3gBG?rFZF`Mhq*!4+c%Vg6nNO~PQiX6KuDxm5phH;^ zgDlpq{ZVQKSRaytO^skdVPp9&*TwW!;TVR%hm3-Y3ktVO%qT+vh|*#|tmtp7#jru? z+?9u1{f?f=JR`AKnBwvQmeoVo(1Vqh<epV2UblLYm0a^NrnX35k{4G5=sm6RtT+D# z<!?#S&as2CPRjPg)uId3_$8~tYjbhs?y%9KM8eM`;ls>(XmRRH%p|7HOy0z6F{|cI znn^%W<a9sM1LIGoRpanDzo;ko({Y>~5fAcy_Q0C3>eud0yJB@=myzPW8%&IY_G`U| z?)xK&8U9lkGa6k?I;NzXPwWugN9#<<huJ*IG7@RXCr;glu@jI?+-?bsd`!`=CW-jK zXm)OzPsYnQZFePlMAxRamOOk|PH4Hb9V&9w$KPEUjQduWHu@)O#~a3EW;XDU+o+h} zRKlQ}=e7hdR-t!kw{(7zaIx>~Lt!nxX%!k(e1{)-)!pa{;-BVdKiH2Wz;ZmmcdThz z1a*dKU-KP4P`|o_hWZnN-BtA<-LQtLzXVTquXd$BpAA?)fz^k44q@U06QH`%Y(Y$z zQi_L~O#9~nFB@_WatK*<_A{C5E;cW301``Bi(uktAhAY1Pymo=(%Fm~6@EQ~jPhdh zyv`WyDn7!1f|(XN=-(@a+oyz*fvqhV{5oXyLx`Kka3R-~K#&L7D1$M7tJDa<@;c9@ z60Z46vT&kj%|=FJxqcAJ0fQ5kis9bNwTB>l?>+96&0zO~T^8B5UQPz_9{GSZB*xsn z?F@kqXEVH_Y64EN{oR`{J&s+P7uHVu;>m&!pAmXO-ZJF-9a-ALhyk+JFk$MV)4zRF zP1!KZrS6%~)zNIZH0a7>_h47}Z!)?4ZiRn5i?(=9$drBLI2!helG$!ksDPW%yrOu( zXLLe$Ws{1Ou;5?lw+ye&_TX7X8QrE`O9%g{Q)oMq;cIdQ1XHK|Ym+4HT>wIYmo_?& zNj6F?Y^l1TgHP$CrDm!(H@rH;lT`;1pQzyPhtjW+#It?E=}bN#Mi9p}3Qzd<GM+B> z&fv{(Yp(sXE<aD~>emzlC^P?9xpFFC^%)!$97x2J2H?OV5Ts6O%(Z;mo^rA4^f-!n zkay}7!QEc9Q0GSH-c~AR3Nd_Z4gMukPrl>oIjBopE0>43U(^_2@Md@S!hHZvGJ8|r zoM9J~4|@Mu;NcGojC1OopO0(cHO*vmzoD%*n3kR&$`!g<!D?D!zfs{8P*f}t|Ju9+ z7vChY%ZK)V_G^=vip~VFag~U7QTR{Vf^P<eF8|_nGr!tV1e0|}xO<<;Q858KAIU0u zTcTrbj1Ix0&JY^ErfU+t6#9I{L4GnaN#t8ll?wN40>R*|fM1^;1gw1Je-CgfqS$=A z&9Lp2e-Zhlz50dBVu1NXn!PmfXUD^2RX9hmdIiVy)^59JO-C!Rp90w~!rsaS0ME^u z{;x7r17%^B34Q5cq>?jCITA(AGx$mzc|6<Hc`Jb~Z5N?L5T^`GLR%ur@IZE0{?Tnd z!_z9Vg;QHj*qJQRJQpyV*3<NUSYBIwrg5wb%^@?iWA4C0Z2uf8E9fs}1ekipd~4u& z&w?6RqfWd22m}0nNCb3jg!cUs&%7lfSr@oQRGRHG^|)z}=1f8!JRTcm1iVIxE?(z< zk+3x<$zpRs&`f{n&i_{Q>DdwnBPNsQ$!JLnoS{XjvwT5mt!oupFH=F!W)@1XWWMr@ z-&wS(_+-qr$8aJF0dF>3HCw!a4KeACHNLi8AAdqQW||GQwCoN=(0JDPoOmIKkQ{|e z#6E5Q>qAUobDwmOo{IR}G9id4qz5K9%==_+j~L4r$$0C72grK0Hl>=)i)MHGm1($W zFs=f$WmPA8IlR5u&ZHR)u9_9hq?HyA18J)67WZ%YqamfU(sor9(!fy78)dH52*&!5 z?qb=|z2O3&pc&s?<fmG9etlhw__596n8wSIKBCZzsTl|Eh-aBrYuCh1-+VzhSl(km zq&OYbs6gR;dZ`$fY&Yq!c4+VavMu0`k2l8Y%2>sR532=kuC5pWhT2Y1!#+1Ux+>F$ zmTxKy_gZjNN%=Z6m7~NHr^9T%tpgW%$1NKpGmnBRy2UU&EAPmNi5|tt?5e4rNSwAW zNxAJpuBR&>TN3}s?cVVcI<mNodIpRJW#E|m=gQefwf8z57ITxWsCb}M+Dpibs1$5} z;xm62hff}jAIa!NedeCGUB0Pmj`LtoKCwMLAPU<I4mPfQOyr{~xN`rL$OAK&qD9H} z{9%+;53Km%>_RtHpqttE=tazu@!)*sO!m$M<R(HGq-~5>%nFn;4|jTAwdHq%Ff&Vq zZ#R!0HMwiVX1&d8)4-_yh;_CMC=JwX97cvpG!qkn6|R^`Th$3JoC-)u2v;u_)4qoE zEyi9TCFGu(+iN1fj)Pr}3lED*G1u4TB3+z>YiS|D5VQJdR#pm>1dX&db|wHtkP6b^ zxuKF!o>^Zj!wn#dw!OWpJR*RaeRrA}pmcmfiQc!@Sa7w=|M2X~@3KuYw!p>oDr7J- z!1AZ@wwr)J6+rAWPhVNBkMe7Pm$46)d}4OxLAJ<gKeBCWeW+SFRW7whCZ#gic;JbA zfKI-#`w#k|*jsw?3p&q*s8u{Un%1&u5TD9v_x#``K+0mf{v(T_GVLGb2_wmsTX!W` z2Jv+vES{9AF-iVTMgfLMq#}un<caD_S$ail@3y>tCu4fvEJi56hw(Dwf|&a7OHl%h z1fpnf{Uxd#hnyr#y8i9d{B*m1GrOzr>YshrbhJ|6%L+bywoVhnrCVP^pGlw<8(Z() z#;npnogjn}9fi@`xUlN4=XhcMfJ`>-jdAmI5$-USU(|vqYsQF>Zm^W&EAJbvH$b@V z72!Lh3?8$~oEbv82nHGWchHSvwE4j@awr1o*N@4GTP;kL`LIE^+dEL_js|RUYNvg4 z;59pF?!BTSB$P!<r{@58VkR%v$yGu-)4g%!Ib_#%7fd4eHmi^xPhQ9~?x2%a=}Z|7 z_aUK!pCvWSN0fu48*tOM%tM5sMaymq%dGCSih8L8x>o2U2;#L+0iq08*$$T1{==d3 z<11_AzUd>L7&0$^mx)g?jFvA9^kH_+Z*5w+q|13>*Bi)lgojnN>iB?S6S&prTwC)k z&AzrdTnxG|{oR!HP~1EB2P>ii=3iZ)@D_rAuv)su+8Qsjbm{(tr^ugc_EG-tx*3&B zZJbH+Sp9=#(l!ei1NZCG@c`TR9>Q#x0{m_c=+;I#!xN7mNKA<pn~x{=%2<>0Hym|f z+WC3$!T!+&Wm`Gsy@Vcm6bY3e^K;)R1jfWZf1d$)Y8U6^xx;e=@*Xc13sb3~=grfh z$3(oG&8nBjAc~^Yv1blEJPrV#a@}ngY!Cw1|H)$8AEkDaR&p-}q4@baA~x&j%%bp` zG6oW>e?kRZi0gR`QVY+K7(5`KX}I1hD8B_-Sguz5Z}0<@zG-a(sMg)rHtu~yiuV^2 zf}BcE6*vO2uyd~{T!86ah;`3Eg+M(A*}1!E1q>EomOt|`?q-SdbA8RSz(Bs2XsOL+ zI!#8`53>YAfdBK0?kZ7dd*mj2eyw0cObLRW8G*!4YCekLz1J1|Z>CobBTc>g3x};^ z)0<RFj|{Yw0yGfYYs8VvM~c%JQDEtY*vZf#S$8!l5V9@te|$JbE1uv6r=bN5WP5C` zd1O}$Yh5w%0urpDek)-@PdiX|8Is54xb>HuA=vZkd>LDXL6pXKzkWQxdQ5_~5p@cT z@`c<1VE_Ne=<Fo>Gv(JTLN+GgrbAfEEV6SJMY{wu_Ih++wx<B`Lyl>b!Hb`A_e=)# zVU)Bd?aYUnhI^&n#ov&CKtP5$E$04AowasPDKSwb_~3w_Lik7vz<7UP`R@t8t&$q$ zO@0uflP*J~naH8lEAl@_+5>rRYI+8NFGzQ8*T13k8W;<U0)&+@;0+_nH?#QCm%HZ) z%XIC+uQNqAFP*bGNayw*@UGO0+n@iZH`mT%F~eiY-0YcU2W+z5zh;`bVYJ!*JRA(Y zVIQ)Rm4BR$zhuA^*VV2J@+D~00<p4o(NODo**3USVNL~gODu}<4Q{7DwQ-=d<GkhK zhcSjP;hca&99CE&z(=2S{?^`FIkj#EYZteXXN1YtkVb?KVo1Im-C1GBUv1p~w7}?@ zm|#@NJ4v~#Y}!?yFdlh?3}9~!Xl?BXVW@O+%b@lMXP(SwzA~iVK_!<z+M3n|$JePn zv>&?vox=yNaXGe~?(FDRFU8^_TmE*O!U4rB&ALfiG|jq;4Y}97iqS|P5HJDU2_VFu zH$CuSNdvCpzC1R>)RjqX6lZJ1!5!fZKX<Z2xf$@SXV0`hil1{99=tYyh{79D#RyLH z@u5dijIl_UNOrgPL#FMmC4$jx!%0gdLr;|+4DTY5{aVC*;BAV4$6-um`a~=u#<TNI z4sqhDk@NPv=Vj&_L*gqU*^~*a9}!|n9Xp$92ZX`JFVNF0KK@0iBzT~H-{)pYz|k!d z+h2`;RnOC)Yg6CqoyVJ%ig%Q74VXwm+Cp_|<BnvClLR=#bikEC^5m65YtRD-2!x{T zB=Z~oJt5R(r>$b2H%qc6VZ}VV0TTLM#8XBHt*5ZRhK<2pGI;~e=Nd;2WOC)WNs79@ z{eS+SGMVrrZf~#2mVDz*!&=<mTQri4AXnb=6LDI=Dzv?n5d-L%sRq))(J+@!=Z}G1 zN1flHgY};hzu2yUXvuZt9>Mj*BSdZT&<D9XpOxkV_=(Rm7v(0a#_Ufok;wtRw@35S z*%RqAq<{Cs(4um}3KzB(1|vPxN$|B;6O^jWah8NY<-iZS+P`$=z3G}3QFU8C##piw ziz^R7R^F;VAkZ^3SHV^e>kxh_BuUAbar8jeR{@5APGFZpu4*5GH*WqL>8Bi(bW#eD zEyO~<YxQh{T-a-XC#dZAK4e$Cq$gvD!oiFP`h)59rV_=kzUpz12|2$Gq}TG2gR@F1 z^>rb9%Tud0U=Pw<zR<U$Cxv}901N!(2%mFOnG4!CBWK?2+QH2jAVWWd^xh5~8_gaK zd5QPs-2nJ&XIqdymBudXLkS3`0kuYE9dR{-SP6ccmn<#wME!3u>VN)9p8<c&)d9kl zzBj7{>98g(O#dG4dp?3~Zesf2*foUMJr)B#&}4`YE4#H37y9i2mnZLRbfL5t-3|}q zvHkQpeD%Z|w1bwRNkqFXhdeO!`81Z^yT48kUMis-z#>L(8pam7qHy0)q>z&YkXo`r zzzhs$8ss_AX9lJ`#@u53J%;XMCtZ)z^91l;gZd8^aCp3A-`Tj<#FIWdfoQ_n&l4UB zi7g@_Nv=&W=fS}bbK3RBNC#|buINm@kf6_h{>s=1176J|D8i4AkwsE#J{DV>17Vke zEV6Pbcsf*dgLI}A23$_Of6?FHmx;IP!yzl#T882<v6kZ@!uC0B2JA&^LkDkqv{%^F zO5OPthJW}~ZPPja*pGsh&8x`bYj45qpgIGY#KWw@2k=|m;!VX%%WyMkR(WY;0jDy( zr~n2I?qDhw&^l+os~rqDO^Q{=V?q{3-G?lqivIcsuE!F*_RJR>Ub6saLJEL|kWv<* ztp#(I4~9$Dih_wEpgu1}bQ7JF00{x)wS{VmUpO*WAf*n1j5+BOc-TFc9;Ge4c6>sM zvlJTjVmjeL6|cY#NcTrU*8tQRTfngS=rtu77-*_Eg%gO&@r$>M)2H`Ar*TKFxgaz! ztZDU9dR~)VP668#rX?7xAM|j^3Wda{UP*su+Opix%-^5r{y@?v)ivD*8(viEo9=lA z^nXm7eG=8IH`0PjRybx>c8qC4_eD{_Du{L&SmFm3l{hA*SHkftl*xa)OD+B8Og?!7 zTIg!9Xm1BSr~p0RK(ObJAhI8@_D6AeK>%-NDj77g`jTA>lA%Y+CmpYmF08-BCjUPQ z;XzMar=$BTKZN#^(NZ)TwB^%~<i)J0Mh_aY)D46!`nE8_S}j3Yw%)XSpy@B8UAogB z>-c4F;M8}JKjsC<0XT7Cl^|F^{0^CIez-W=bFD7<i4#@)r@WQS&rknekZq6*nB$Kn zR#jEaU{8uQp^87{-3aEXzO`BYyFA4c&AoMOIMJJq>G})IdZYkFsO}@rgP1L|r0%mZ zTGZi>N`HyeW7fZVL-iHb8JI-?c*A@x281341o3FgKX)|`XfSMgE}z#`E$cqF_*5OH zFYbve!a4FXbvHCjcqJLMT&o3>K~CdZ4Tj3wbB*7RyichUJ-SZ;qW&zF4`{fnZV577 zDu;=}B(;%#{Mo<QJ6)?Y*$=^m{_|h^3;3Ew3_Ae^r3HzzRZ5-RdwRXRkVkU<+tma` ziUXBYwKDBd5plF79Y;cpmkZXUaM*Du@vF&dSrQP{JVN)@)4C@MzD@lchyeTlk<~Eq z#Dv`vLgT8gM?JcAjgs|>QJEH(XITIZNBk*AU;q0z%wk-nWG>%|pzTra)vU3#ttyIG z(!VLTFk$a({mw0_n~kzhU2B@07wB2<@ft8MHqrJD_F5+`2GpQi>uosv8Wa%L>l?&W zNT;RC?~+9AiG%pw!~OZH!!*zSSzLz>=@%=_k}!<V@1=62=Oj2TmOnTibC<5qM|-mB zesiqBhXUq3p6)YCqe}V#BVSCcDc`Nmcmb_98Mkk<EI(OjZjEpS0%(q!SiU;8TsDGw z-T^~Le&)@>e3#<vCXN0A<^Cn4W*H3uqjkYS<pKZ~ZT-UxgV5KQ($K-)V3TL%Ix@+e zY2#l4L?mnlx@2Y~;z;CR9DiGM({>q0Hzq59H>cTOxSqZpZ<<)&G0$Q@Ycp~OG{2w3 zV~6T_P;j$b0HmA6MMlZO)H$G_wOLw2Bbwi>q~bxS=;#wZrmbfS+!p6sVnjgpr$@zQ zOFNj*B4J=AhLbKdpO_m(jnVs_FZhT5#l2sT-+{O7$s0KC1=h3v7iJPbG0VaF^$^AA zG^>9&6~OwyAQDn{-!0?Fs6MeN@8dbV!Zre%o!%x<r+)+hVMqbxCxwsLdEOX@zcLA! zJi!EONcrRg%XPlGB|R{gFy*Zbjx0uDjY4jKdg2u>MF;m11asDGe^uOb$v0YGm(0X& zw&hOW!t{%iW^|`muS0W#+daOEJLoTJM|VY|xxCiIho0J5oRCUX*vyhXN-QX5N<&+s zLFh4G1#1BCpxq7tyuWMYXi<hk`6?9bE$C{_0DibtfT#`~rFN{elme{?-rlqIy_jeV zVZb#2`9!LrW`uBLgpf`@Z4KWkWa)yIyr@k%|L=oUyB`~?3xMFa()jO3_Z?t2IQKBI z&kjpTeGTPFjV|hq3UC61T?GE^xRWd&qFE7mpy>S&6+S?-Mhi%Ei}1f}1GNoZ-8D97 z9@l=qCRCc8Q_iD))_4w4j0Lbo7Le)VtoT&*|0iL40OZ==<HZ$2Jn;3L%=0}S{j%~1 zfA>3>Kx>cOZm%B6Bt5oNwmdZyoU-FCtqZ|Gi!$gNCHsr=BFqT<(jKly3iHMga#6wq z*x@V?^83YVwydRlLJccnhmMs9YnZn8kaBk_%6Wvz@zzubN{xFd3B*ruVE-;QS>oLq zetahYUvIPs)AsF)?kV@qDei)-j{X9ve>AL4@8NHOU1OFdTC}fdix6ivfLqvf5*aN@ zxPRmgbO`X0!w0mx!6q7U1S_Ep3P;+~x_xLOhF4CmBOTo8`bGekT_<d5rwAx`NaNo0 z0kE=OqbnEp<FzZ*^nd7?Ku*t^pBI$vA(v$mo=v5S>_YorUV*D5m@v!+<tNC$2E@1T znZaB#7JpA8X;&N`R8cjAOda7_=+}OlG~yQG%ZMlipf2*6nAV~Z#lth|F1julM>Gc1 zL3)GlK)SFtpbT0e+2Zi!x6cYH(clA*!SS`KWi=p;3@>p{BrG^G2q2^z_u+jWm%&}0 zf-`}=BC}>#>PQDQYMMX}2xN*XfZ)Sp>>tg->XfY<Nw|C<3^<c=q@HiEmD4*Q0$Sg} zL4+Bg1-mVmAbyp<!1kd@l^}Om;WLn&bY1rVo=DDT>yXjpCF!kCmx=zw&B)Keh9h9( zq*gEhHXP#jAXiC2qO6#(9~dU^C0H3lV%a83F*R}rcb(clN>s{#UYS%ic_Nn?ImR6+ z|9)cs;+C$`+)5n$1gsH?43*x<M~l|N4`708K!qJ5wno}NQPYr)Zp(*ez;Ovq_^Zqh znteJ(er7((IeG7CRMr=H!i0C=x@xurv+F?_N=$8yN3swlZ8e?vqCNz)s9^N^N;wX3 zSnk5^#tIhV8cJH&`Q$teJKs;sjZCpW)rnm0UxBRBr^i3+dk?t*g5~_R<(OJqiRZkZ zTK*#I3gzb)27_$qD;Pg5LLE&L7>I&5c`~4>@FRWH)*}a?U---x)LVzefMhwUU)~^B zd>tmh^Y`h<P>#97zTB{HRBtpVImq3HH&-wYq|ju%KvdG^RVy;fBOB{Ae0|o)3^*0R zNr<k884)(F0U7I#@Qf&a9w1m8xJJ*Cg?mA-h`}E1!_T!>sEs#jt;8-~!E)6#4my~w zd&zylyrelKA^IS{40RbCHr~A0>en(Jg4Bl&$k@Qf-10~CZ-@hZdALxiBsddcp!PCs z>LJSn_+(leE4aI~ZqBkl#Em{f>L^U=6+!xka9%<qxbY3NoXY;(#(u$g31HpRoo?YH zg=%;{)<kxYYACI)d_*N8Y+!y_p31i_%EJ#xq=Gkz=}86Z!zQ&=Xc$*j5&*)0(_@+V ztkmtB+X0kX#iewsquALf3p&-gEi%^5x|U2mq^o}T-29Kqzv*<>IJJ!%zGf|UkI;2Z z?2j{a<o|4=F!eStA8a-WM_B<fF-`bf^I}Mp*Y(rri=FhNP+b=v9Gz1*6E8S6t-%A& z31pPIIv>c4KLC*K2|-UhbPKsH$(|lA`LS~GWR}AUer|`QoG=G)>H*T%F^Rw#2WkR> zR%s0&zz`u{1W=3icVxbgI*oI&AsM=7WzE|YZ+4D3f_6E5J8tS@Uv@e|^j1(dF8}ze zg<2i4_&mScHr~`>?R9keRe-9Puy<Sz>PSN6ub>SzUO$OP%4fla79x+PeJS7UqkfQ6 z0Al(HnF!!elVc~Clgn{e4F7IydVjx~dzBXVL<a4M?zBN2puztp24!yDgocK2p}iq8 zAvjLrIr|sqYxqsJSQUel$(-qjI5f`#=3km`b>yg^?jk+Yqi4|Ohc=DJn`t&N6-SC1 zTQ0CroQLBY6?dQ1p8MY2<B33b-u=u^J?4>1fJHd~gEjh+FhhPlNu%=%0|KqHfoQwj zY5hRiMCtlP;l|y<3J+v&gW#&ly6L9#FxpQ5Ny(b>d7B=^++n1CQ7c(U%AzTc$hp~1 zbc`7wcgXJ;jlB-fci!&7xD91$eS<pJDpr9lpIkvEQMj15-n1!5?SAcKY_B)MabEAn z58GRtg@eaWR>W>NA>X;!wKU2X$9p|A2kD>0rs@EKaYTJ@0(h$;BpD3exx~M-%r@7E zt?H7Bo2Ij7Aisyj+zHQyAgM76?U|r-y+CuEp{P3|sAP3q5=*|q!E2jw4@?T5&XfOX zJD{+L^-c0ym3=EA>wN2#T7Dzk6vt!g+G{uEIP?PM11w))uUe9_duEbIi2X3))O$mQ zHp@qETFi`jKOpQvk&w`;vsj(WCw#DN#QFPSo8lRdrsp~r7b@KZf4P+k99xI`hBR(_ z<<dl;SZ3Ep1okz~ig6qBAv#RsSyVT7pioxas1V<%EKp=6eKxJd-?<poFlLa4oTPwM zV!XH+Oj7Xze<ucW&4JRzOlA}=KAlRa8HFsU&?ddWaQJnr0U`i{f5QgQcg75F8CGKL zZfDf4nAA6_4YCIbeqF{5Ucas|>Z?k~`c4akAyppV&%hB3h_41S(>Ama%;ro^)Byhc z6o3`dUo;B9t$zMXUrNehfI+H0pSi%T^~@onAX>FJRX}KD6dH^i9E0cNH!^6d0e`>} ztBG7X&g6|{-if=LH7U+}YswC7zkU3O=8yBtM_S+)LkfY{L-0=XjAVPr2UCcc>+fB- z?YvBa)>$O(g6-eRh46=g$(aO}F95O;GJrN>#;Tivz6`s}k@qaVh%dxp(uN^PZ_;@) zEcVLfi*C~;b)`*|Vbee^fd+m_6j>pc^+|FZ$<t4f1QML~T9ueJ&MNzR563w#p2Ig( zy}`BkaN?)L$7VV7OG9$mTn>9tBte~S#h@&T){hsNc;^^a8NBJjKtH7!UDti_1knL@ za98O|r5x{_UV<SK&Dz{zcf}Rv?m&<NF80eZYTj;}obcN!uKML4l7o{>#xn1L=)t;d zt_=}GaTV<EQ-Qg%imUB?C|TTjaK41Xge|KU2EM5>U)RQoF*AsR*YyeY3~Qut3#x|m z4t+nTO;d;yId<=oC$p%~n-BSHzw=L~KTpVviYh|r;5X_~_nC6g;KMD9dhXiQqgLGh zXEQo=x7MNO#F{Fw1g_mtBxs3=Rq4a&+iTkMg_$G?{~fY6=pN;f-CxdqlHhGJJxS)n zYWmRMvNZY9F(ft@-9*NB*gZ{(kk<ZP(i}Ql7PndP)bc*Wh9KwXzdcVD6crSKk4E3T zf6jT=;wmgb_>`$`KwkA#Gv;~+@IQ)!DOph2+NKCZu4P8!+@HORNbM6YBW5-c&X#qV z3*-g2e8uU}(O>`+*t2Qu5Wo3RowfvTtO|dNTw?uQtZtiXbV?4KJ)FM8IZqGGT;$YI zui-R9n20W#!DVt(^p58|Y~=c6F05+)J@7%51d1z_s|g?JFxN#*RqSJgpgqbxB7B&g z`f;U!Ier(4657zUvbVUPzFNVIq%eMi$O53!I00|^0C89ZP*xN7<%1yn%FAhA=e^9^ ze(2CgX%NMvTpzywH)rJ+Y*1_0St~u3X_t0xAoOGYMADz3276DwFR$s<yTdq(d1rkE z$0&yyA^+gubOQf;Zs_~3vI^4sfr`%+9hHWh-b6Q?{kW8<Htf8ZcO)nojTk-|{)ijJ z6G_o%N?tap-PkHu?1oOf&n6^vDQMrwyT@+6mi{Pjh}C1<$KG_fCh@Q|qc0+V(zO{L z&5W01i5u%sAF%9uUtDZrnTTJh2rIMxSqnCA`?O83dXTlJp6JxdI&W1!t22|r!behk z<T1~iS&HtF_gPnVBm~eVM+$GZMBp{uAL36foj_m7yQo<mzyBnPl9#6U_&NK--(yx) z#<{25g2BPXHEzeF;>l~v%dk1r&tL)7t@YLH_tvjTv}`_8i(+3O-h>cz0!E9afE@Ny zibJ)YrBh-|EqS9qX@5GiBAlz(ha;6(jLc2%#qQHx<&-V3e@?sevtBu+H}$u3f+t%3 z6}x)ZvR9(rZ`IySNA7*pAFda`heV%}9X7rONU>LP&TfUUxY+p9Ukmg4#<;xHH}5NR z=Ngqb9}a2Gr@XGl?-r+LGyH5uxwzss!4%J7V`@@b(@mwma6K_DwVm6(p<w~o7yG?0 zrKW6MUuHlJ{LQ0746W^0F`#yLFZ|JLtzZ$+rXarm7^&A%K2Q}DJ?|1h;0w~9<iGlo zbs8${1MnF(ZiTL#<#}#9a+X(;PemWvd11U;W3UY9$ER<g!mnAcLY-lV&kjS$6r%o^ z)m#L3>aBUfb0A4^phi}*jT9Fm_9d%==tg+QH_3Y2(d0l74QkBpdDSYf8BY<A%s{Dg zLI@LRemF@x5Fk|}bMgLOMjHzCVuE5=O!>CT-GoSSuXQF${pRBfvUru=F#oL@>mNa1 zACiv_?ePLUN)x{D-zLNd6X6Ci1pnND+C61q^_F`47Fu~cU}u82s>J7+)LoY9RR9dH z@(aD79oXy}&bHKC^FOX!$qGWUe+_a$D=s&WnAx9lH+Xiu^UAmTbatn?ZVE*Q^;|Y7 zifYBQZx~szMwN>xhU9l-5>INPSeS(DL(L;)l<p)QgIKr;zGrgcKXjyq@15rk*o!Q! zAWWXSbrJfhK5h`zs1FOgtJ@i0DY4j?c>h75h^Fm2=umk2O~3b84|lY4tN=0oJTG$a zN9b`vS@>tXp{%)7FoRqYNs*H7w`PK%?Q!nIz88k~epA^OgG=$9^!-*XapnLQ+h7fl z-#HmhKHri(w9t{dO)$7I9D-+a;LtI?KrO$M*fj8H!S5W!f=}<R>^XY8-uu+)Y{YO8 zaK&-AAju${BEZNMHK=`;fggBPIFoS;+NW1jb<plwla*(byY0fVmChH_OvZmb&}q$5 zaL#-jzRq0&ZlZNDNH;$~hzmb4+^o9heL6S}aAvi^DXGNeAf#FM)Gu^2`#m+i77+PR zAd%Mf*Fe@eY^M_{92Q0WJ80BszKf~S|8ac}f51hIQ$7H;+qJp0;pr}n>TeuYkMf<s zMSRW_@3U$#&*w(#{{VtOeZLiQ^H9ugTd!@e#B5B*x-2}MKa_{@cXec?klEju1BYYm zoMB#dMN+BJv%Gfw%zNk179pO;B#}p8(3lnkS2RH03%)0OZz|?@G87{cB_I!XqTj;e zxxbeUO&LpfutkaCd*O<FMN>tzb^P~vqTlutF+<(t=qLMM_-8LLQ(xbeiCn$!$<qcd zGACw;wxo;PNo&9N=S|AN*o!0#o<Nl+#@gdAZ2!z%o+`0k6MSF#mHD0~NO?KoJq*!z z9VX$_%_zu`p;bq|6=4(Ji~7R62Sg`GlmNbU><VBJ7#*DJ*P|e_q+^8rlRT%px^b(q zb;GVJPwefwO|yXvnw@!CDcLjZCBWHdjhS+cc$?Rv%qH#(`b<vl&!E$A_nHFPmrBOx z&t6Dx4{SpH$~yA`C=bkmTfm9+&%<C80HXvPD9Aua+-o^xV@A1b2_Q1G^nGn!_r%o8 zj(@y01d}Uz?g3-Uu~6gUbgT#9`OW(QuQ{4bs+f4g@_RD|^j?y4KN=XG$tn8EMzd`V zdM`A8r`%6<+tnVU@L($NQusqF09*y&>le3EwD%>H>rlB5)A^h4e%31Pree>0ID4o{ zvp)pG3~ii6-{_{}uV_<qQpz}>-vV!VHTq|?;K&51B>$<8h{@ua+zvg~YOpzhS0({g zT#Ob)Pp(EB4;H$+HRl~6dIS*9d7k^7uy^9@3Hh(BBsVwt6^}W0G76$n0QP<6`*!l& zQ~`8(PBISw^MsiO0gw8EeKk6v<^}4VDfv8C<Bn#*U*H5ZXYW{`aaKYa1%MWz>^j$u zk^q#ku5&l|`jOq8qq+)UvZ$B=)$ii`C6MeRm^$<<6A&l=%~iM*&Bav7Rf(gSY^FTj z3fF|Y^!f9g=eggBwyujjb_a<2vy9mYaq?VvJYfE0e)c1^??(elz4w{W>%SaR0l+f9 z?dT_6{o=uJh-CKceg&X^qU7y13axn;gwB}n&&)wiFCbe>u8X?a`;w3ug>ljYA>see zL;ZQ*`Kt;5N79Khm9Zy!dot(UgS2PSPi3O3V}|s-sCgn`cgxX~PdpJxLMi>+(oJbL zWp_nnXfpF#ppi^*eXgF9GEQ!Hn{qpUp!R%8;I-|Y+qdA0V_DBKzhgWA`(6PUbgQK* zq+LM|n=HFIXS1FDOumY%W1gPo4$rIA^C*}cfNrFe0b@Yt^%@MB9$Wo2-B8C(y1wM} zr1vFEmbuD6_e9#cF|W5GQ^_mmI?wrmIRH64?=5hY0a9@GRtUfl8O3_v38J)OVf%~S zmy3sGJ%<1~*&Kj_;Q`3pWWM=E6HJJ7kiU7*e^Xq&_`E$7gByehs-!N^l^D5>e<mIP ztpF6*>U1)E1qW^;*>$+OW2UDQ0QW*dtO>x%InPx{dt}S)QLJ?GW#0E6<4x&5#ZW6> zL3|+F0h=k9cmRy>KY(R`O8Cp#?mjO-LVKB`yOz4(%;wiuvA9?6o<3&|zi@LMZj&ne zqCdx$p^tl-*|4+Wpf7oljZl~Yt(xqD`!|S~n+1@)Gc@L98hfVJWoAsiC(t1Pvyq8B zRg@qN0q|VsIp2xWE{=ObX^c|~De*w&{JeW;u`~Nl5T*3YTS74Ve<fu@05Sa#8y<jt zf8}a6sGUKD08~OqPdnAj`|~;>5)FKhn44-Wd*c+m5jKKIcI0Z(BU?n-%<Vjky&2ss z!3l#KNzGIonT1}-5HiG>V3TzO?A-YG%pXVfXW+4C{{QJr4}d6R)#YLQvsSZghfU|# z)N`Kaz902h0pu|SurD9SQ56?S2y)9k%iqk;<`uE!-_?d+wEyeg1{IpJ%<s_AHcWt~ zo6P=Ifa1ZETDqV!>~4An=kN6U65`AP6azibITk&cp7X49al;l)hH8hYg`G!4{p0T{ zF8~W6*#%9eM2m!(&f*!2zcK4QHRhc8KS7TrFSAaN<MG!X3ZCmc=Xvgji3y6_YmDkt zg-!w#+5@?_)Lhf#E6~Tm3<1Q32f$|qz*zs$HsiH#VR8WcSS`dnC!wh%!1Q*Mv=*MX zP{kuJ0_h+J+WpUMb-Vps-8s7ngHC72Q{Cw1D=vmf5IJt9S3UCQg5GQBPlA>GmS~K5 zta;4274VR^2SzxXcLY^~-V9V2Agu!ETO&C`e*~uBC_=2gl!KId08%2L#H)937HX1) z0<8cTCcp!i1CXr(khG9FJjd<A5hYh7bim0Quvg}>I!j)Fsthn|4W;kM)BO+w!Y%BE z=9aD}bSqj`%HoU$V1@rq%@jyejmMV9n8%vOe1XQk(x(9MJ<5|%>UU}xuNTjGp8I~3 zU$<jc0Yf^i(`IDuR{G^!&v{|0Fv#EtH4)Ik^wt?F;IO|Jz`;Nt4?xlsBF^yy?whEd z=?CD5J`$1qo_;?QAZy{whPKw_cqk`g##=s=7pm_5&5+NHy8#}lxw5x769YLa$eVC# z+GauDam=%=utPPrJjOiMJmx(1RkycWQ=YsogMzA|%zIIDp67ly+R6l&%Qc)ynB#~S zvoMy~3ouCA%Hy2Rl!->kzMoH{@7dqU<S}A}xkE>njzLU-`x>ejK$--YZyL_6ocXMQ zS6B;obrPD`8Y;-wH6U$f02K>eq<`+VLafk+*o_`>&AW_jxP>>7k)ng+WQm>~@i1T2 zOmvy<G<&&GQ(lmap&nNrV;*ZBa~^xX2T^8A%U=m^?;Pei&U2mTJkR}hn7L5SA<5bK z_g##vKH|z3uDoCprotXma7_}RuR{R`O5hm?x@>iX{ZzmQuM99YHMwc&&|dM~vIl?{ zBQw$&{#+9)Mb0jxH-@Ox@m3gNvBR68qD2k*6qme(0FsITJ;1{>_J?H%z{NsEmjqfo zQ}7t`So4_k*bnP5H}_<VrzTJH9%`>y)pMTbKCglPlg`z=Pfkjmm1M$n75k#<g(3Rh zpRW|;K`HQ(2w&%a4RAW{cOjU~0SGcofa1U@05T8~WvT#je6E8Q6(<3*7Cu}^snFuQ zwx~_AxKm;3(==SBP4EGkLF^9gKkqzH0r%g8C=)UgH2&jdl?O0K2Ui6olyo)$aHobm z4RO)f@)+}2^O*D4^F7GklROQ2e-C<tI!PX$^E~%?4J7hk<hT|~UyLI?0FWL4X2UG( zF*g_Q@>wFFcuVrsz88VKbD3s9%mW}c>1aU_1MJ&oK!fVgBV7-g64B(>0v%M`$L>%T z{!B<y)QthM<!X7&LQmQl)3~?D9m*RabE5}2o^4qw*QjrvFekv#no3NYqDO8K=!y(^ z5Ueurq+<=Fq(0KQMPoXp$C$^O$2^NjEAV-9;BD!|LN7FEuCK85ubF^Ejv4j(tBhnf zOiz(u@!pd(VCwlmekWEGt0rWeh}ki{81_gR=1xsPD1*PrvY%H`gAP&xWEf!oheR@U z=s~Q?(6~8AC+BtOgU*W=-w>(bBL(GtHu+MyY$k%<)~LygbQ2nWS_-%q!DG)t>BVsm z7e)(`8-OiRUl$td=4lp>36s~#W9LhPD9AD8vE?!5vED1;mj1Ie6##r>6OXbjuyeBt z`pXk_4ggnPu<+--r{4pR%Lr-@{kv*I&if7T`(YgKi89O`1j~4q^(^!2Orfzx#}Lm= zY|jO-Ken$v(>O@V&{QlgjNRTzlcUKn=yVD~)uNkjXpKPC)*DXUyp__K>qr}OC=;(4 zW;Vs_dvoi-==H{M9F#57*QbkeQ(^0FxkVafSM8Xt3z;n)ML7-6<Y|5gRc0nbb2{@M zMPRPt;@V_EjxmpQHufx#Q7UtQI60@@^WrkbMQ#J!jidll#0Ki!Sr1db)~Y@$(}+wc z*Z<fyIRLrBfDYZP0PxsLCPqKg2yTB;0S~$yzG9a3bvjl_0f?6&6##Y#AbgB3*!!cA zl%YXRgte|x1j0C-F3Dodk^0jg1Sskdz-U1w1M=bw_L_u=RZZ?X-G@aIn)Qx{;gU#N z?>ZT0K^|^HqP&=WQTH$4gf!X?u}PcC=j#DJUK1)aO%en;x!mCMh(tk@?kruX?Kn6_ zR{yJ$MO>RG%J{$ewTYdJJXHYjyfAsWj@EPOTsiaqn`S5##Lixe4e5!lLI6qu7%8Y` zSV<3$oK;~A@`m#M$b0>2M=1f_0rz2_D*-IyN!G_~_^&v$idN_jZqN%YY*hgE;V7hc z+7QtwF8W>~8uOvNC81@{jooiGnFQ#_dT3W<PCDlu(Gmt!wv6e4y)gINe1vER%2GCc zcD75V+ASCtHG5k+ril^Vi^C+O&Ww0CIqYGU>odKS@W`}&-9tqt&wXn1VOm5d1UWQ@ zJeEABJhnW>LJQT7Zt0r05KDHdnp_aB{b%c+lmFP$m4+MlkmVVtRRF^UXHO&n_NR9D zcmRUFR`3Udv?G+Vo@GACeg{E!1z~p$VbG)(!z4{Rx#jx|nH`vKJ}<^~9fJ<zhfkh7 zoO%|leRDSMxDEmI_of$vK9s8q5=mkXdttuWR2C9H597U2lG)S2P$*aR`B4v-#|oGr zp(S@nt}@Z&K#n*l`^=M11xL?cIaZO<aCr=QEO|_MY?FK~kuRli@I@h+-<<fzb^lAG z1Z)P8+FSO({O&!ySQ3!cq}S0=JOGZ^Vrl1jesko7$DfIq>V}AE4-lz+2gK=3k&7mf zvYur=$$k%Rag~0tL2qc$5$4bA-RY4)a>ISi%Ej(yjzi};2W^o1xM-39Wm{TDYUe!{ zs$HXbyR10Nzb##ev5bq}Y6dv6>B^0so4jNbbMks?+`iq8Lo%GKwm73qi(jpFDYT)P zrkq^2Y1;Mqon)LxDtBVK;^4}75pT^D<(LllvCg<Tl{C`0k9&XS(!YBo{O@H;ULBEP zCC&M!n<OhL227O$pppQSvRLF#_;2xl>kt6%`RsK}yD{dIhhgUiBDu~8jz=B<m%aY0 z9>$KWBMKS_+HG{35yFmsqpPR!{zzNui6IN)nuTo1Sx-Cwc`gIodLgWh^J3&gz>1sk z0GP|nVbs|;DB?`b7C&W;{5E?4=r}(b^+!8onOA@E-EPB>8fIgl6>^U<OI;8v_cSXu zYh53HsFqUp%4|+RItGd3O0U5JP3B`Y53fxr1%Stt$JWgMIH%qeGgq@+@`Rq>HyZ(N zG(tHiq<UytNb8(|JSOZq*_up!P3&zPFVVhJ)aM^%$~AM2C{~>qSG%euv#&!)aW>a+ z|18QlF#%&8-FHhdiq$r}a)T6sbq^&cL{Mzdd)g44DAg474c{+=p%<CDHub>npSt9t zS6X47>(Dc&tu7}vWq>LSz)65!PjBG-uEx|8Ba%hQ8{{n#{_F)<?G$vaeZF@T6Jn8@ zzHX?^t!WPrxhT_a$R%GK(paKpb&G|6l-|3<TH3!3x5pYk(U(lg62~FI$ccWJ$o2o~ zQ~@tf6fsp%(vm9!Om#?Jt3(D_oe#+R|9m5)BapcOk?{b;gFlnci&9EB?>Uo2r{`B; z4i$8>*0Km9m2bp}m>Z@PllD%&nrKhlh^JU&amJ1pZUnd7MuB9$htR|AyIhLWq@xR$ zbUD{c?`rP-Qcp37Gn+<iasYH$&LCRIT;0daiSct@gB**S&^Z9YWKrcj!8p!@C=7i* zXV2ejg}6rob6t}Hm2!G7`tJ)v8Tb?<)vvI?x<CSqm6~;(Y4j~!oACs|HVW#U4@~4k z1HzU+3;!z<1zGmTV`zlG8s}Jgw!EA(EoSGd@dSNC$}KB|0hb@SLVEBL`qe#=&mc&# zRlFDdJPdi16oXDFgsT6SCC9$%#caw*4Z+v`Dt*&J&&c(l6JUL@i%2x-p#ADU{qHDn zIo`qS(GHHB^)Yowsn(q)jaHzzHuu3!m9-~LW^T+`#9dXl-3a0>3~xPNgB&bCqs*Da zRc;B)jA(Ne=H}MgcP6V<h~8La9`6Uoak)O8cgbanKHZ~u`7$R;(E_a%M9+Ko8kn%= zO>$pL%IR3~O)Q%pq`GWVr-S9L(&3p-<xB%hM~{KZkpM<$J~P?R2XiGkc07iA9c)~z z(H_GIfKvE}D#wAZ-9g;L-kFR0gWj%r61-`8X~MC$M<{@|(BNt2SN8bInm0!&ln(Y` zNG^_5e{vT7rK;LsmcH%c_UCQfztu*4l@x&g*Z+q6ZD+f<{6QCElN}sBt7@9MZ5pjm z?Na-Q2gqzX(z&5KjIB#jh)hCA=KXnFl*-+v!-w3KlZ2#9nqxX(C%N&-XYzU<<oRW1 z7E4LG2TQt93YP=2awDAdo@Ezk-mZ<sRGbZ&(bF<*l$^oNp&6cEtlY2?(Di#SKnxh0 z{fZtUsO*c}U!LYNm;1d=asT&cOSm}dq3HD{wz@fVGox=_X3vrLU!KcL+Q{hf(B)X- zm{SW(yox-HQ*3OMxdD^2^`7SNrVKhSW&vzV=GV9<uVJ6E0F!ndI`E3L84YQd_wpt_ z`Rg`5{A(ZIeohKN)CF$;Cc?~-E;^e{c%`%lXB-KsMeJ=uZ0p3xO4F!sQuMtqS4n3W zoMbej>40mV&Pt1NNGtkS^A(bviwRS1HbPQrT+CDyuf9n}GIig1n~7$w@D%FmzV#)# zA1uH)fo+L|8Vdmi$ALNQB&mY?vcdN&BWVw#Y_j%ZghFNWjaF2P-?z!?X9a+t8{yy4 z;klwK@=K|#<+|&nVJ&X-^FYt#`}COXFG=QqPVZHwDUr#|s7gb_!E8nCGtt)W<hi^K zC+@vRZ25P>0h}-U3rbci4}iKgg@Psl-fZCBR~?f1GAqzaJ`hLT6_Dux**+=gTWUNb z`x>F<hn5<8M$OSJx-%o1PjD!JLjY5xox99KuPJrI4E1bYjg91-9Cel)pX0ds$7{YU zGb)n%YRZ%Z#`*OCWTCRt(=+7F^U6d~dNH_ss(iPNpDp`nwW4HVIgWBe8kcw&?H?sT zTE#3Fq2jEvNs{p|Gq*gA$z^i;|6sn1cV|lUydcLc`Mh?O=NUc9whp~<-2cnEn#(+= zTe=h!Igd4`EU4O(DEUSl%#)JF2bUf9D`I)_%Ve8EDQ~aZ$JaYCg&EoXuOp@Vzy4n? zz07X8ArB?%<s~Zxz$?b640qrZ)@iiX$a65QKks56j!!lT&BWF_Iw6oP(4nFlusmk9 zB6I2nyck(nvWCv#fIFP(5-ZXRWC?Y0b{ADXL#Du3sLBj32mH-ifXR}Jg{qTwe%k{@ zDLl-cuJ?~jxZhDpfo~Uz(t7IZB&1K62HB4_7lH~&#<`=P+8HR%cP7!6?>Fr}?DjuL z);<gVA1{<;@*jInpwdFr+k^_Q<UQ#xVYh@9IHUl4LEavo%d7yjP3$f<1X%g&4I#2m z%>Lmjev3KX_L{4Xw)9@e6BDD!d&>xSpM?H$S7rY<gG>x&9~HXwO~)){mfl$6b&~NL zQr2@=An0lZfD;6~5-9+JwF6QDoH0l*K+m1sKTUy<S*&_v>1G<z)I6gAsNsv^d|myZ z(_jUFDO1@+$4U&>xW;ksXL9QS&@o`46@WX<kgmta@gbMA^+I1auUJ}=d7g<5(p(MB zD-oJQodw$qWZm+;VGD#~s$Xq{k{))mt1RMB^T+dexP3Ipdu5|as%<l2kvP=ZtE$NZ zYNTY(ls%jpaq-GzQ6~NI*p&3zlc5wEyMi7EC+F9nDzj-UhXu_|GB-cp@MQ%EUysnr zUY_r#Ngg)U8IDk-KeOav<b$7!0q@Ui>v5h-?0sQ{j9FjX#{aLqj(NTpJF^nyee9BK zZ_t2jlC1Zo%uf`6kb`VtTWSchJD`|_@(%1v_kY|sMzTGUoFHnFusgl1<BfT&tnasl zSQ}@pe4ZBPJZ-AXJja~@!wkz+ZWE`>DLN{Vj_bVF$@IJFDq7%;?%wNAopmr3v}@mh zD;wUNE|FKm#pz)We|Nu&e_8J0v-JRh$q9fezTwYCTCkWJ<vmg@mV`5;$6NP7Fy_BU z@qpt)o^0;(&TJ9a=#j^wmT~(#dhGUcPQ<z_{Zlyr8*P=m!kr-_k(OrX@w$4_ZFSUw zJC4qi^*=8?08T>N+@HIWvkOs|5UIBB>$>EdpT~P4mbi0Z^^6(*8g${CB<s6U=EH;l zA|4UW2BcpK(SYg~T*JOkP*$odPX;o=q-DnB5S@_Y>KO$whZJ4?8aVTE&yY}=A*+(< zfd#jtjnEV3$m69X9$}c|Ol1kLc7^0lU*zoRZf{t|$$U2Nxd7%oyMc1;b7cTu%azH3 zq&wyc0c{kMpb*M)qjNVnFC}jsDIe#4ngW}o2G#Iy=nitn$g^{GLRtOan=j$$P+IE8 zji8L;v=^A=vaNr!H;Lyg&t0CwtFrVjN=pBbgnROd)aRSl95dUf@&Kqdz=m=pkJW&K zmP;p8Ww`Y~D*(N>Yrh5F`iDSnLA1ec($l7t^--8n02F-s47~xQ1fbLV+5LsMk12<L zYK5vn1RqU$J{-F}vpX-N(9@1K^BOP8*@_AS44W8ToDyB+y~wqv3A4_mXU4P}<jVNE z9^f>^iKSNtX>2d*BX-K`bs5ihf95m`KBl_mo(@cY^BK8{zoKisP8Q=jU3(m8Gf|g8 z@GW&6bw|03HJf<$yxhuJ_kMOh3aQBG<i(yMav@ziBW3RB=i(Gu`sYRpcwwx7mnhz! z75?U)8iKsMyZz083lneFZGTz7@SNqj%X7FJ#yuH=Vh`-8NneIIPWG2MSqA8!;HuxT zUX!?qb4LN#JExkVqW@j(sJ<_;$qd}DWjDPS#W#^W{G8-3IMKg@o+LnFGz72$(2&mu z56S+>1L$%8sEv!uL%2+9iOm1az|Hl1=<n6Y8>S2a$ShrF8y8)^HGm{9I&oE~`|-(I zKwb@BZm`G5ZOk;J(7MfDn2hEeJ+s;Loiq!?@e=nBaPjGehhHxH_@|{VezWFdy%qI( zafHgGS2wgbo80{PEbsEegul>pED~`~eho|U;j*IjeRH~qmnXTiUqLE76GdmsU=^Jn zRWSGWmT!;rUeQ0EE@NfE|Lav>&Rtph8ONEv7kkXs6uQc&AY{%;ITNOdbZ-kMM@o24 zUkP)bP`O=9$NWI^F{E=ezr7f~;}G<})&ht31vt##N&3lT-oQeit$z~&h#&E#dwO)T zB|EXM59P(WtZ9L>33Mh_mluJPRa%W3ZbZiDVp#<+Wa@OoRMXiDf-;e0Y+=x@!rJ;L z>poqZkV0~y>ZZgULY0#7mF)$hN;kt};Oo|D+`y?wD{zj&H`Aq}yhgrv1>N9@Jpn7- zP`brsw@Ny?{h6I+Ffu<s?r=P57&P%VM45$=ebis((D_$sK33?uxP<crDLGfi3)0(h zY21@de!NV5QA=CMS-1aQ*lbj&LnZc^YiHt|o0}nivC@@um*=pQkgmE<d5!yL?{Qku zpw64E|6#*3(s%v2VM^^euegT+h@Wu_U{1EZugSQgzRi4pRs!_wjBR>}tNfG)AkKOK z)DQgP2Hnwh=`Pssq-2>1Alr44hRBRv%+{u|v<J+PoY4X+2HjX{=zObLK=Q#!j83+U z2l;1n?%7PV6kwO#r|W@q{huW3|7CI+k7wR*%BuGo1`$kgav0w`_7t!paE9FFUy%av z<pza7bQol%Ns(hePFvxb#0e)(5<TV1eMz5N&4G9;r-In3CJySzm=M{S_^^32o(kP7 zo;@39M?G95YoEh6C&<;mK+5SP=RNeX`<lwQy#}LWXXOpM|D^|D#g}t;%_Onvl8(GK zoXHv$l0QVBb3s=ZalT4vFC=AbGrXMJ#nnZ3T7gU~mhW-)XANM_O%<9TJ_=h1{56FB zx=i@*3jxTv3lVQfEdip1!ES_ofkEBqSm-kaEjOg$$+EREP<}LkY=_RC^AxJIjLBx$ zx@>2OF7`mXaiNFU)0G(!cWMkmd`&`ytt#eHU(np}LLgVJ$H%!o2A^{=Gw+h7n`{Bo zlfyMt%E`6y%!lwHg#v!LOq(x#@H2WJkAWf3>9_pN-w7Y%X7|5CJV{5Io>qJ!b&=7W zn=Gkz$S+S8@dmm4In$rZIZbW9pXS3Q^RnRV&0g$A;mRu4DsLskSM?BUP1S<cDX83) zKwn@kuhB%PqLd_unHV{&c$7RgOfu&6m;UE?{bk2E)cZTLF|r3B2$TZN`7}u~=KgDY z*IPp@M2D=5I=ScQ5PdlSQo2Q5!~wYnd{P3u4$_sruSN#Ql;32!(Y1Xg{Q2NGUcdE| z*ZI+ZUfiXNW2;P_v)Xc!4JV3wRhYbT0`&B1&@ql>a-*^^WJ{RKkftk65}Qow%=eHt zAlq!k5ajTcNVYsWSlG{ct}MMO$#8%p1uF|u-oV(ZY-##x_FVCE4qJt?m?!RA_}Raj z`B`jT6TK6oFRRe(_PlYrsv8_Dnd}~B4-G$O#gnO<+4|?0|4ZcdKR4#}TsVIPhd=@t zhQCyi+bespp^#^SC)53rrRE*lJAO-6|MhwxbBT<LD(Phr=QsY}v(xKLOfJi0uhcP8 zN;#C{IsG1@{4TicnVAZJ6)piZ&6u1_Gp;>QUi(y#+FYb2YsvBH1~xG~(L%B6(`!9d z05l5Z7Klgzh{#0%r=_O!K5dbp9~H}(kOUp<THT11hPa{I(GL1d?k0NQE#f39cG;aG zmpRwGa$bWB73hoLWTm~}4ag?xu%Nq1!v7b`KE)xqTU<ewBZ*8sV9vOj9(jG{-l<Cv zX(o9FTr$Y@@|@Jkb@GcORJc<jCo{34dY>NIt;u04j&HJ}<ol+{Rd$kO{^}slLAD)X zJm5s-Vo{ss|I*%n{>gDAS)$-^5i+%aCaB3GS-Prwx~hA+Yg9iq``a(?xBF%PyV((M zrn~30F45EqAP5Z-S_7%I3hCn6xx(EeG9d{N8If+JBO*il^?R?G9Wy&t@U@rEl2bBI zQb8OjYX(Z*5-KLg0bes&-d-f;b)}3uJx0ZvB>vel1?WAN2I}dh7LG5pROqG=W)uH< zguelub6{B3+RIg4xj`hL>~$hFj<dT$i&+OEE2}E|-?RV@)3vc%OQXO0#mqKyP_em4 zG<_3AY@$%vf>&tUHR!8p?8pn;vRDYi>+lEH(=tHSFEKm5{WVU=OkkrWsr+dz(xVzG zIvo>bH~#+aEtYGP8}nNN!_wkyMuBQYYOVS#YP%aHK`ZPAYrKxBT7*+#0F;f_Ia(~B zY@V~ED!pc}cIRe<M!RGUR3-xs6+BftA4CN;H>vpVi^935NM-^xHq&+8aAw7nvepCL z@Fd%7D4Wb0XS~tQO#XyC6ed?u&8dp7J$$x<rGd$K{*kJyDl?9Xl2D<GvSy6)O_`X= z(}>bARhpyFTi0pZ9POHGbRcfYbvVA*#)-w2T$?~YQE<|6*yY*(b`GS;H5yGkI$#X| z9fnG@>@H*e>+Hsuxi+K#Zt9M&&9Glx{cRIepQS4c(JyEtU_EFcXl-Er_69ar+9s3N zr2!y^(}F)LFu}{KC}TxtYfZa~VkpF_^4dfz`+W3b4XduSbUEOGYN}qnUD%G+mW5^a zBQDazrn4HoM0$v;O!-iTVB7=s0O;V0w^YpR5J<R=kT`q9zb1;OoY2PV&DHC5#LDK= z#c6eeo3ZeySjRk9l|qgf-Up5a`OTG=(=u~c(12CNc&5k3&Rat7v;}G0GHlQ?15MPZ zVqpD}n=<glX5NcKuarOIz+=h?(8j>HLIQNA|D>u9?<A*C*Df?IWixB2AL@v+LBe$z z_gfP4KeyacjenHEtvDN;#0cB{5P*{cMUl?PrJ>FF#e`HMJ=FiUKZ9DHyX;!Vampxa zyD<_0<vz%2j8=qx&-~ZIMdt`cRVd5imcLsv0JqO=;_kPL_~z4P+`l9nLtAYr8UaxC zD>7`&Qh<i472J~1X$f*rPBOFlFdmQ%m0CB66Pz0=xw{E-a+9+jlw+RXO|Vz8Xw8mI z51EUVkntVUR7XJ@76EW}vHPF7F816QqM_mnTVl+};9n9C^YWT622LR1fPzw5`tmtD zmD%@{WGQr0NOt=PQ9)A~Gc<6d8pHAhahx{f4^lyEJ`1hn?VjE=IRneeSkNc|h2A|C zJ99_4>6bDz*fb7U{xw<Bxfeq$Q#6K|?`VUQZF&pt&KJ@%RSD<;(x%6qlWrz%Q8#@5 z*EiZKM@1$6MJlsVb$GN5ka|wp$n~V5_mb=-L;<WJs*P=3uDPq=|E^?csx2D2tn8W+ z{m1g|woTs1<jD1%#D<NEle8!XKtU{k+Ik(=zFx%_f4zV!Ux}ByX|A#7X#;>3!^#YB z>#Sgo6I&Q7Y$6V~#DW-xLkNL=g|$=CcjJYQm90E5_5@&Dl{B98jJN?h8CtS9-aV5) z3FDgV-J;lWjKRJ#7>gkgXyP3EqkHV~b!7ST=Lan12~>SG6XJMX-WX1i07_dYUiSoz z?8B}nCCXe^i|VPyLQwiedE5g#T+=s(pc&6H1^_p1=A~`6HP^*zi;06e7+UpNIU=$B zqNb514Yu{xX#mj3VrgR0d+;J6)E{>JPFtne5AK5vpA_5_m0<&?>l->Zg`_{M0LYf* z^uj5p38`^vfim1v(uj{L|MNRz|53a<*H?EpMxtDcDqkj2dwQ7AOWFoNeb;$YZ}M@Z znr}<29|{EsgEcJPTf_B}TZ!_glm}d$1Q@h{yQlOjUcK7DkN#){M_*pV(C8t}ZP^gb z7<sB#d3T}U&tSwlTSL-Hq=z&kmi&TPzWd5?szjY#M+cBFSlLW?nsg+WVN90RI~TAc zt2OQgww!I(CS#y^8o6MJCSg``9Sjz9!efU45XG8z#o6uLhfj8$kwFFAN8spG)C>=_ z!ZbXh+e6a`@D!;Kjf1vPRt2NvtDd8jKT#K}xH*nW@jDOyfo{U6=JZwDP&<c0!-0?u zb1?CeG5-%|n~M35Nw>(50!6!g_9giqNjb45H5w2@kh~j&|3`}Mj_=!TvQwfZ(V2yY zuIyS#5P-~k`i9;v83HSQ=5Mn5&WiqCMi{ob-{T8RAZ~&LiPvxIW9xc=;b;Yi56z%7 zauDst1me0Yh=8N=0UW1q)^|s2&YTfFCVEeECaXGW9r=Kfe$nD&CUcg&hz)003dn=d z?ovBWdyr?|yW3l=hR9^187P^djgoj>4AJ~xq=3na+c6&fLht=B0w>GH_rT}lt}-=f zLU7sF6`4}^+)olpcYx{Rha`Muq1Rqd?%VPF><~Gf9R6)lE;lzre6^@E|L?N>CdbK7 zUlsO%f=MnJnI`2ND+MP0`FMA<pp1aQuHt`pH#2W`g#qfOpU8}$hRXtfwIie<fIh5l zPtM%29QRREl>VIDofdC@6~hxz2LccVkq^HdDFeXD{FMNk3#(!=%)$4U5c&i1+10MN zao_X=h?CT3JvoSqt|`)pC^Z1Otj68B0JiTmqz7g~AkhGNeYA)zc^i<fh26|?V1Fx> z8NE@)v70U3B<LIQy3UTY6?Cnd%9w0*imkEV&15CtWlTCM_u{l&uw!EGp3~VlDj5Tl zB=yiQKx!b^vNxU0A19F{4ew_v2fDwfPsZB9-NmF`r4BP)6X^ef%s<xs-(%K44QyZM zLvWnh(e5v|wR0s*77NiJSM_NigX8N%zN+d_A!Rq6U%L_kh_{oqHA7t<%a+Ux1+)?b zz=i<&PC7Zc<G3#2{YAN*h3l`PSnces9!FvT#9f?sg=!04aapePjC|aJylS63TJ8Fh zzFFtV$s6}Yg#en7$~tGgb*+mKz>>D?Ix$2eSz&{qSBE^sDo5qdg-~n9NvpM9g2=5R zvf7WyY**I<d^*=u%7{Gkq?|2eIOYl4dOgxB;IS_=w9%SP5{zw&WGBN;hwo;nW)-?M zdfE6T?rH?o-IcPR#B%+68Lh{%GR`}C{a=gsPvsw5N=MGo*xB`pf7^9dKOE{DSn)vv z;0GhVLI6gJokR`0wTfdWu!Va!;eT>8Y}(2U8fZ>hI^37F?J51M7y!|Nc=|I4+Y$n3 zx4K{KE56mN4DAb061c#{yukiTGP^ZA(7BuRpYdeYI6a*elLW|2>SnY<2w)eQKsvXj zv&Mx<a$Ll7qmk-O&c%?_B{@2=(Qfd&T@s30%Y6@B8puu9(#f(k?a+V@2e?izv_N|5 zsk&|6cFO}f=QE6d-Ms)F^_~3)@juRJXV04nl=S?+m~Y|yN~YNl^qLBLN&BNK$=1<T zM7F&2P*o=YhEYNd&{M`Vt6=EN@lcSA>XND*r2u`W#Iy~h{xv-+J->-kc}d{^dHBT@ zUDuzz_)hF6X}eZjuMH<$LDZa;L*Rq3-evdoWe$Mtt-|Iy?PiP_U&BWAZ3w{b6erXC zhr&fWY?`vLCj6RsEoW36qs7!6<sJ7*9&FsnTBGhV3!C1UYsimY6SQNjR7jEnoiuHr zr>KIT$-Ksc4ZCjEUyCF-51Cti1^YeDTywHajapi=cJ4{&>B6dno<#XG4A7Lv2#?3E z(^*#BV{=8FDBJ!PEz6^qWdGYFLF+K=M$we+>94Dc!e3LQZldfh`=4!>-2<i2PbZE( zQC9Vl1gKD|V-SlNo}58-WJSUNI~V|l6F8Be)mCsp9L>mI3($Rp?K?W=Og~7L2Ec`5 zTkK)A=_nG3jbMA@`Q5q*vP53|ja3qPxW3AOC6y;j8dudxXYjlpxtiIZ$(U?tN*~&a zCOE`J*_2-&(yfqLBFNG<-$}U}_5uM|_xyaAw-!I(J-H-kxXL?m^)wTOqU-(X^?$qC zQhfi-hK7}6lXDUD2&A0tMUf=gl5w)+DfpiVz-U+Yf3!=3pLT1uIWN`;np0)mkwO8s zTd)1e0FYkbYzP1h0f;jnF3ThBu6Kw5VDVHtHym+&3u7xN9hyV2x+EcjCLr&P37V)z z?S1JCINMvQDcV(XNYjI6T`a}TK!UriB+&k*DC6xiCVoIHdNQ`LmV1U;F|_le_m)CR z#1bQP^~sXHncmomMNJi4bW4JKu>4WK$8|E1j~+YU=RIF?>6ENPU{QcLgo^dE<nN1x zrfT!M*0wICAx+xl&3-zry-of#&H~SqrGGS>$*@Ttk?!ihT^sk0J3BIlCW(8RAzU#4 z8aDCIB*ye%=f89`h~_)W^Ve5wW2u3q#xm|-p2zgnEi|{()J7662x$N$2!J9XgHsIP z?Qfy5e;PjK;TG!p!)X8%kx4!3zX9y(m`3Z79P2DQBOwZvi<jXtk9HxuSsDmRf7M7q zXZF4>3w*ZjVObW2<D~uF?J4(6LZIDf?ZTFmxVaIkE|<JM<3&#)9>ZR?A|T_x^jWrg zF3)D&WIJbau2>z&eSq2iAIvl*_TN<PewF6*w3Uz$>GXiua?dbnqp8~!6Y~GzNC7_@ zE#R;q0G`tuo&T~#Zal9oIj4D1{zL_71Z=kLCLJ3Cpzp|kv_vMspUi)S0n+~hvp2SI z^~54BAD_qVbHMr%U!j<idG!SupaBqP4FH|-u_;dfO0<HCyCN^$?8I1-dDLIy7aNKL zd#<it_;*G5UtbSYLLHT8#f(E7^^QkbG?~3@(MmMqiW8_3$G|!<Zl;0ME|-M#NX=Mn zka5bk<h(AgF^k#7(W<ZLkl&T?2g?E-Lky%$-@OzI$mNN}?aGK`)<4%j8&NUy|MrTZ z)h_DZ2VusD?iESU3IiAVjxHBwm(3rJ`U)}3>VL=CrP=>+%Kxu_s9dj5Xa3(1M3CGJ zo9(zGgSCHK|FZlfaugF>Wl-W#?KbA`Y~a*y*Kp=vS_yH8SJ1Cxo`5m{qOfCbptc6w zIw1k%39%U7-NfX;y6mc3C=LuLBA_tRhJy1Trt%&gzwFtVmSrp>A@p~B-P16-#K<as zx+oGOV3+j<uw3$1sQjo9*`J+oIdcLOZE0I)Fgpg>=#|A0C+7v#qui1kv7m(upD-=a z8eYG5WkX|YT00;?h@HTmT=uARCro-K?$0MyWR1}CXU6}rg{I=3NV?&eUI=mA*?GAa zq`UPm>5Z90%W`2h5o2?w*sK-L*}WAYx-_^`1%;+@*p>CRB5LA(m%tv5)33GvtUYzp zZb$_7ofXtKR<UrmmMDKU!F|IouJyi`m{Ar1XtQ&|Jz(jYD2SE)7#@5J69*5WGBT!M z23<<%rDj)u?4fCYkIo`$#{B6;?l*)w1BLW-Nv-NSyR*(bo59RmX2!G03yF=`N|rEY z+|t%D*~@4o^qwb!q=TNFiA~c1j0gue12(zYm+4d&m}VwPYll1>uxG`_ka_(z7#6Dz zeiT;!Tv!e8&r=QjP7Y@MH!Rh!i38G;HXvG0iE9+0t`-ycUz~$q?JMFp2TFKb!T^pj zf=Ha>?BWiNx^t#30k%JojDN=jsrhuSB}PDiMi857puSw_w(d)N^}KAwil9@K8XC3R zn7(!nH%^_!%Is`<@qKM5M4{R?Qv|>(u%3lAa5DR6fSYm@>n*(T))L&G&Y?6ohIV^I zHyThlx%~k^9}H~=!=Kp%2p_R4;J(dJF-o<<-YE%m%;E?&L76gK*i-(Eny=!0<bL1m z@v9bPl)tAs*opnh3Jx)FzB2R{%x0zm_m+4z4C54x!Itu$=dzc@dbb(@bCi$6&>zcY z>G^*oaevbNhE)Et<rT?{7wZm;?H-yy*(BlQce9z4qW;x=L)g-JTf5v{jPdUDvo__z zaIa?WR+Ig(9gA@4uA=?R{+DESwsppTJcB}M5d&kL<Ues3XG{P6<jpK*b==PJsjbuz zG#BKFS$WAp8B7TS#Knxu+h44J=4?EZEgH#WTC7L7D`5bZm2|TL?pCoEBr<Gx1!K^# z(;JiHRH=`IG!#1)vK~<HitD6FTfC6mu)kStE2U2|r_FW=Kami~XxT~5IgFFspzq9_ zmrL(R2bD6CTt0RE*BY@Z_4{nTiBD#ms^(uQe*>?2Hb<b>2!Ap}XV%-H@+VISbA!kj zI@HzEc{fx3+x41FR%E@uE&o%EnN*@Ck~X%zl<54FS6LeXVYs5$|DtG7^m=34;AQ5n zpFA4x5Xq{H*5Q{Hlr<6KWqIR%8TDe<$MuC|p$tx{z}Cn_>?s{#UUifTRsW<ke(YpI z2fbkl5fXnzEdIAgeAL27!R4W9=NcyofxTGcK|@DjS-c<x(>YM!z|UnPUzIo@(Hkak z{@5#^Tu3?eovyfGZUgkUWEH>qTP5-7Qocr8d;TBHH1ON$hUzszLKy{inviF+M`5Fm zxIY()Y-5b|Q~Cd5f{lL)DnytScb8hkSx1eRg_nf=8Sd92Rk6iAEouDY^gRbi_vr<4 z(kt@ltfB!9+O^J!;KZ5AKWhMhWdt$0J3p3(8}PklIKe#PV2wU;I-NRxKp*k~q_d5l zKU)OTx@3%LyyWTDyG~kEx$Dov2%-Pi#OkLv%--;gFu)3-GQ%F}nxJ^tW2?sQ%LKBD zDlyPel>v1z+|C$UWZT;G&0*c<H0g7m2?z8|Oe>cT=_ZnNGtCU>`>Zy!@~7wjsT^mP z+X%QW<b}net6tBTc&~<y^m%7uU$G94G4YRk!BGhh5-B7?U=xCOEA?-jUOLV35ke(4 z-`NaQ`QK{GK>c2N0#W~x|L7Bo4NB#D0V;(xM5FVl4lThiG#>T=e#Z>y)@5-}M<gMD zupw{)*#YC$4z$31DRH`Lly^z1@}^8M!sqn-377fCV2a}1*(K01?1tIjMn(9R7yuhB zO>lItCddYD#L$wO7<%9yzOuIN-%iy)&hzZDCc)x4|NBEF@p_6FDyF3XwmFFHAZW9n z^E83pmMrU?CCE~7|BSOk1D~)zJ^w`cx1wbJM8@Up<+<QEU77sy2V?#W0WkA_qHGY3 zKsTGR<T|^N`LFYi-ny2=F}o%EGY_2r9CsoB{ko9p(W{Ni1aUpTjS`vrDl@1IFTgL> zyB37JekTM#M?*WWcf>|O{vw>xEZoAXJRNlPUFuIxg*ek70D2K{QjvF_JlR8HIS&-v zj?9`}n-FM!qS*im^D*g%ZFTR}e4JYHaN7wIR-;~5dI}D-L_tgp^mSs_su((7$VSfu zFOC5Xxc4LsQZ6`2^vmtyyw8<??@QM6cQg4tyyk?D8*Sa)kDfna|3vw7?zp-#CQzVh zZzho0^&Fazm)hcG*C#V56aS7>T`>f_juDGYmCSBM!6Fm7Oa7MM%>DW1Mxe@o*~Bd} z9Z&5fi2F4Z5NDuI72XLXZiQ8BZOx*#wupAKiL5Wv<=tfs0H7NI^#;V6IJ|($!C4fs zhI%nlyqF3vwzR<gMXh4n&c+#%Y2J`lk`Up6il-p-*9SYVL1aq;chR|6xKnKark}gV zp5=19G~kON;H!<m7iAcPadQ5>ensuiCqh${0cdbjllX31Al+|Q$rLE?zijU7veCaP z*K%B9p=_OO*~FmRLD;Cs9_@nH`(mp^Tr(H4i<1c0LW6`cAx<u~@X>5j#rzfQuX3Ut zHAiSn_G&K)YxJm8rcf((4#sHF6R*F3H-|Ls@3u{Amj`vbuSFbd2knM20C-=Wf}6Hx z?lrE4#~TQPTe9&F%l~NA)<sDz-dn}=wRv3pd>tz@$y9)9{SfVx1Zc-Kx$1^4uq=;_ z(}G|fp}-1$Q)iGQ?M5DON%}+#ghUU3A%N?$Ssbd!_>M;jEQlT%f$o0U!vcRF5)Xh1 z@Krgl+t8g5`Cl*61Meg}kCr_j<NDQP<3G97GAxe){$yWK#Xw(|amaE!gr?NXH#Nk& zJ=Y_b?ejf*4gHMA$l7qmi#ZQIn`^1t>!LX7#`Cv5!B{rd%ZkIo{wnj|^oOp9@yn9f zKb|b$M>6j%^q;<`_nK&v@1OZuH0GuhS(9cr@;#l*9d~bj{WHrQl>lMc|5(yLd$We~ zAFbfr`-`}J0a%;2FV;FeiXMajB%@@lg&4IhU~U?i`q?@r+*L%a4S1f(h&6??PTY6? zQNoC4AVV&oc00n1L{rEw&4d%~6~)ZR?RL=@wX>xm338YPJTK@5jmdjkAzIem@f=ID z-?M8c$|U!Bh7y?UW=l2A6F^U)CY}+KyQnPK2t_3dIyzKRh&xwDF1;h1=}ZPKAVqNK z{E!)rnc}CHwAcUPOcVFTX;N--f#{f<)XMir)$e1BM4H?}q>C~CUrrS9&PYLp!lEc0 zqumVsCq%7XzmR!7g#GEHp=Chng5JBMIO%=XPh#2soP?K$2tX+FxVFB58>csL`VU)a zY?DL?a^ZvKwramj6#yqlm%Y1q6FB#G0xK*w@aDTKIJ|!rLj!NZ@dnUl+&I+MKtIv~ z!^R99-7-^lgC=_`3Pec7!H!ddMXzI-?dFqDD9+>b_MpIje>_o8C4hBN{EF<Tk&=Xv zW;amEaTlN1W1hR^2?$IGtj(N`xUB}F7O?AMgkMa=YEwK|b(0KZN;}lvr2UNkBo*sz zv7sy5n1^%Mbvx6Qsrav~v88WIV*M?}?|+{jV>?R90$e9$2kZy^pR9Ys-Nw>CA^<e} z**=>_Qaeg}8|~J)-JQ!}6Z=T~L$Ws3{?~#|czX{R?V19ZqH+M-HPOinXl$;Fq7Twn zS)QNm{1vGIkhKg{t)PtG%5~t>JwX9ZMri)WB@F++Z(-uyBZ30FhG4CVsOiD=)7SU= zz9_4N1QTpFF;$CH?6_ib1Uv(sMah-fWi!QQwP&(6MoJETI$lr<YPuHS;%XZkTVV&c zR6mH~HP6;>nL4M?ba`Xh5OX}%nI|9@u;dmnmVrhsqoRXdSn83>Hs#N2<;I4q)X21~ z*OQBFe7Vq6kU#Tz=IW;W)u28wrGEA^dsVWP4|HA>k|&=2ev|dj*gv^Iie8o!Yxm_a zbzfv1*ViE(USsaXY}UpkPV)Z;39FNNOTRY$$=XAXYI-iQsz^Nk_^x>S_fQ&G>wGoi zAW^(ia+km32p1&wAGAyhV1W(pp9PM-vWog|?!fVn!Yz!-6BPwP^m#=<$EqS(2*WHA z24G_lTGNNcTP$a4#;hH+>q-L6Eq@;2P1_xho4_053H)G$WFT#|kQz-r7n)|y^h2gc zg6g=MJDfZL4C^qKGb6i6+hi7V(`3Jd_eOoinn>P+lB|*vQqF*+0n9FJ2fdf1gS;#0 z2<N2jO=8XIPY;o0pr6mT6s<3l{Wcq666z`ywBqaKI)7xw!g|O|{8Q+iJg~3gs&0S3 z94{&(V7TD+)OjULrDm~l%VqeErP(y%d5zV%`l(8a;<#VCf0~jl2MPKfhN}qL_vD@! z0M&I2j5yd@OJ5#EJ5nL|5BTuzw24SC(`B^kcjWe{7zsz^F;W9(;s3rw0n&ccdZ(|4 z+)x75Xo6kl1`7pk0GP?yivz&TfSbZECyT0|_GNm-%%ly|aDa>6&Iia!Cr^N*b{8T5 zqz-0`n48Lb0+Ie)(2-xraiE&<B{K<Pah!&U@=Ag4cTL8I=347;CqwL`Z<)8lrdQv} zH9aQ^|AHKx*G&A}OsIX+gui~ee7dn$tV_eWh6U+ke#@WlFX1l^mJ|<&*Eyv-%IbFI zHIGdNTjok_sP3Qo8WRbiv8Uk<vrc#Q8GX0ukE{_uw=)bxKR0g6aYvl@Wtjj`=X-We zh4gp){5b5~>I=mXgA*$#58Q$82?Bs0!jdbc*QD=kE$!*WnRb%eD`v7B;c`N1tf}8$ zaXa3#+jo<0g+(BTWr2Sp1^}I6as*tEcv@g8NC`4IeG(K+lt0DIP&vv$NSHYuR1}xi z+VXcvJ^jb>x^WW{h|IELR(a&?UbeJ;78}<lC6{Svr?(+<SzC%0Hk24Y6a5-EAzuHj z%}^9Zq)PhK2l#1%Krc1*c^pZ0dSm2{iKFt)h_5PMejy0JaLGwZU2WXo!|peNy06lz zVgI|%5P*bun9Jm-Q25TT@3Tv6?x~p{!S`3h(z_$N`nFt9F#y_O=ZbOSof2F82Yh}f zJ$iX4#>Amz9C`IN4i3E}QGsP_IudkgXA=zi5^qV)$i(`|DbLNN;<Xi#2ED}2*Y9o% zAlutJj#A2B_5=T^Yz~CgxTt7ZuQLRcv;*xwUOdlu?=<qb8HS<G3s{v$zL5u1h{V;I z<Mg1I^T8?sB0n9p*|8;B$&7Oz8hEB_(8hBULZ2=Kn{#=orIR^l>YB5IvHmXw_P?~= zM$0t5QtMbQj%R4E!?^d8T!9Rj6&Zsj6W(CV|J@N?_pg*cOo?oy8-;m2Fjv)j%3LRw za<WGYbFmnbwcQ$(QD{(|9w#(?*kEW~%M!r0=-|>ogrU+h%B9=bJbD|$qsykTU%F{K z&W=OjKXA0u_2wfIO<yUC5imK8eYk@a%*ktNvRhVE4Wg6en)a1sDI|3ZaNTaU#tlXu zdwnCotQZ4zfubsf6b9M#i^<$32%)DvTIK?*wF<Z}+*YvKdfQbmvQ0tyZ87OMew@bh zDaJaYp{M$Zhh&Ni6>Lf`inY^KIVy!t4hY+7)FRO?oE#l^Mr+V^wX~=`H+i>fp|LcV z8U7d7ICmvPC%0sVBh_^)$iCP~nDJ=%^^4EaVQ_{T3Lh3jl_h^f_L$Q`12%a*Qd;EQ ze*M$D2HmTGC?ye{TXKEb_IINdB|OiHv%{?EK1KkX#M%p0%i}r*Fpn|n=6%x`7_=J? z^?RU(;sG%p{{f@kQFWo}3%8cV#J&fNk1V2r1u?moMfp!86oif?2k5VUD#^*%3|Y=B z*-&cYQB2F`!f*f+=Ux*-$T5T?iHE(*lf<^g)#T=|pc?PUrg2?j;LLa6Ikv;p{c<z? z4|@LEW@?1h2I@MdeW*U&jb@B*T5a6k3>CxJY`vfm5<bsz!I7eq#G85DeYb1g0CYf$ zzw~bw^7kedtuJI&QDoq2KEi}e%L2zlzthVt74xTpP_ce!RzJth#DwGi%MkDE_NOf+ z(w6^RP`zIZ^#9h7$yLfMcU8Hx%NhS7L*&GLhhYkO{zPDzuftH?qDtmWlQ?4ZCS~&z z42izfy77-D0irIhiB68Nh^6~LZPmh&sZNe}Hg&xnr;@D~)6o=7A;>Gx*c3c;U2x*Y zEAsFW6w0IU3l+7rSdZ8_oBGQ4aSg~3MJcI9nQ(Afcb2QjEUn5;rCJ1-xU%9*+|34n zIsA+(P;_kfY$iMc^Rl_t8`i>R)qtC1%lF&$P5I(=Y&lk%2Fin6lTDS3V{2{Q7>eXc zY%@&d&ud;aRKm#gmbamSFpf<EWol?;ZuYcfYlxI*j&!_iUB2t0b8G=c{BldeRA)um zGsb^>p@oy8{4a|4PtU*Bh!TzOD409b6TS}z-XfHt;Xig{KE5YLDjQ$@>jNcK^G|ZC zu!q7_Hqo<?*`MmN9xto}_+q{(*SoE{|1~Va<05JA-G@d%>R2mX%ZpxMvy)W>jjNcy z^EECWJBL$$*u=MA%Eo=42!XHPXW;)GHf`^L-xZq`sCIkV=J<hkz6BPhO7N=_*!S`n zMh^^#1u}qkv#jZ)+|D1`N0Pwi2}K~|keV!q$Dmvb#)d0?rnWXpV{^Opq^!EP3X8GP z5z%M^V$9S{zJscl=FUuZJX7(|4{_7()n#MNNwtGxviw|qzN8N(B64#>cOE182wzLj zij@?Fu72va|3XJXjhPI2jzH(&XU9M8nxx(F{$(-1So-yq;qd=N(fPJj+@Ho--A+!^ z$f1KLpwEWR$*yH%xbmD2S4sC<#J@dQR-G>kmI>30LodMpiorNWhXKGG4{|wtDA%2p z9V@D9qmvv?zc&5J>eVRJ7rQ*Tj#A|oHkZ%g!Y60(;eWY-WB*Xcy=yu=pi%iKo&68x z0my!p4SW~G{3?p;v!(xDlQ6)=uL8XJ>v@!iZeVQa5VqO}QCk~E*fz<4uFbRUE3s{2 zZ8t5R>PDdB#B8y9#6ag`rR)Tbx6xMaCdoDnV$LX)6_wdQQPYJ^3*>!iy?|MP+2%KO z-L$f{Ep4dNe^6>i?2CzFvW8;ADbF&ax@<rz682%)5e)!B&|88>Qz>x{3=0}W?f?P; z+_*}<v*VXMXi4_FQLxkbI&Oxsu4@!X-OL=DHVrUE->i)<=BTi9A7OunXj&~xd#Wd< z=jqngQG&kopV%T6&dn%@)qdm1c^?_{RQW0u|7+s;`x!S+H7)BA@`|0Dr{!j>)*exw z<$7p3;A%hB^8WX+0T3(dUxwtJf_NSSTNo(Z!Pd}qtSrnb-CSQ!-%+Z{!fC}yH$NcR z#ed`#Kv(u48F5S184QlyKozf`Rd_e)N34(-`}+PXt+5dp%Qev?6O}ByvP-y)jB-UB z9_V^cPn{r=jbX?b0e`l?sLBGrc3ZehBfuH}G6;-&2Yr-Cwd1g4lLX^bbBBg6fEy}F zNKT6)Iw}SLb0}UO@Kkx|OL7c*I}@&iwsOEG>B68fnZ3CmP=aiC$<z~%Gs#_!E<t+$ zFHIxV-2H_6Z^(GFwx6gJkr<9U@3-1fQu}SKs@U0%zVw@L$Y^A;dc|^f43u5`e5`=~ z?QmJG-IuDJAn&eb`^(H38;)~hC!r}`73F_tOV0uFb||aR)vL!fRRaBcy;CAGg#g5& zy8Xh2=-_)w7niEDN;h}DCw|n$ez*ZZr5<&)#299Gz<3^;D|fIyIE`j=Q>W(kQL*?V zC#JSG)y!<iibnUIOiXS{uZs1}cyJtd*4yv)>Hyb-1F}DqrGd;KrZ5&q;*FIcG#Gh* z`>Hlmykq@28M1UTCCbvcCZ5P`*^q|BAUas_@QPgjcSn51y4DB_s_p7v(dk%HG1A)W z7@Zrk)7h`7=OydeXKIqRk9CxyE>^Y_(MzD>{G{=vw@+hWSx^AYUvEnIJSQ#7G#}k> zIVwAet>Q@-@_bGB^Q(PD{F{SCRr<$qv2)Hv2UG6uU3+E^;%{ZU6()QxnRe{tU!mdG z2-C^cr!oJXMkVghwXNnB)=Sf(i|;C(Ox@hbAOH#$dU(+5;RXP+pu!-#mIV(D1^@hZ z6KDP~g_nOcgVFu#Vu{En6-@v&K$-=$2PBS@*f0qx4vEryZOB(W0*Yo+vNhtnc}TLo z0_^6=<i;Ne3c%k#ujr3MmH4K5=m5$Hiu!~q_@QHy86Rep>mKW|f~O-<QcclbO;`6M zXL1?|N*EGgeKHl+fwHH%uCeucRpteWS*nFcOolj3=<c>dcKUq}vKGGUl#3ts`yTOn z-6I2?EPXq@C(^8LY_Qb~HQOdhd)S<cZF;%spBE$G%37!?e1kaEX0EQja80b=dj0(h z1=}%I@o{#tH1LXN+Wh{hD1UbPdwtMPj3P^MTy%FoW2MdfS3lkSex5J;ubf?O;q+2l zRbGXbhSN!VK=if5W>z!n-y6^<!1B}vR_EtLA5STr9IKip-S$_}0|&YXz(d4){L3Q7 zf+O~Mqb9o?8wB01p|N!kLu2n?{P3%&4i(f&X3Rl3ldk1h>$_w?*GUtLELK$}XS}Bm zZuV53p6!|(rHMDY`Mk1;j+Wnvy#h+|!&&}DLL6?+Taig7vbk0+`Z@WgV-?s9s&iST z25(KZoYf>HcU1XcsCWbzw`S!4D+xHBBTV3Z#DoZAZDfUUCk?apqLakAN6o9J2qiqM zjL|03W%C#!1M7$8cSlL(sPjkzV2yEIF`${)M=$@_VoUM%lf;J^{ukE*wdrrR;}kxz ziD9;41KYz5{V1-<Em65(L7cSlduOzO|K)HAe<{%a&&G?IxiTq7HVw<%-4Flkd2c#z zS_eud(>a+JAI>yzT;>CF02I%i>m)>F=<nn|Cu!zW6gQ$WNJqPgdza7S>wowJ$Nu&_ zuAYz$dWo<1&5jV6i~rCM_aFWBmix4*GY{Jm0oYjL5y{^xc=gBgc>U)KC=I-#p40t_ z-N&{qdhlvkQW8@$rY0&kcX}yQ{)a0%4qV7^BuBfw+g9fMy1gfh1S}Y;;3#gXB%ILX z1H^lP3qMi5-DOmnst;=%u#dv3%!ixuAPIxUWc-K%5S}HO5Ea>`3?xGagEC)SCoMm; zP_3C-x<vDFeqa3P-~J@>sOpvN&p8kLU5dyj>O{fVosq^QW4WrbVpDf@BjitGiQF2@ z_^t<Ww)$CBK4s@AGUL7%L~|gR(1)pi9}#8$6A3x}#eow3m8{VNGOt3@n9Ot162V?w zqFbh+6Xyr_9pz)PUAd>r9<zjPeJj+fw)VeN6<DXXh?VIDT>N4cSHDVe{z6H|pH(xz zN7uagkNpE2cRQWn=E??|Thn5VFa{xJ3D_kttNHt~Brs8suHK+&5HLn{DGt<T|FiLe z;v+Ac(d{)>s_xCbAXoHt32Q{g>tAW=mdG0|eO9j7VER4js$-0hRtehDz9{WUn_&0# zz(HNci7kf-aW6DOl`nFx>S401X@zMtj>^1YXkbtbiXoqm>1vE8x@J2Jew6XX9~UOI z%EB5ZJD&U#{H|I{=Z|biFqfM-LnJGiFv)y9RP?=Mbz{jXA5$bg7G|=zx923eDp}NF zFAy$Sz#}vyNG8b$gED7+JX*xh1@>p%Ka)^lDS-_{*$X9q9qS4io)Nj7sq2JK&XIQ0 zBz$_B!Z_-~N~DZry6q^8mAaJ~fa?guJ80IXuq8UUV*uS4Pmq@V_y$0{L(i=0&?fxC z9eM7m#3V-KMP+$(AoIGu3jx@ZvWrrc;c!CAhP5iI^R~%UX1UUE$?uxjy|Do8rXLxv zjX5U+qL7%_M#@`4aI6Tp9JG_<tvK%Ng0LsT0dc133c5N+`kjMN56D{{tJ1+s64Pd> zAQeB2fCF-{V<g9|r{~V3R2xhh#IiO^BZ4H)SQO{I@;7!^Lu(6s_9HtA5hTgk?G3 z8QHvvknvzi={=Ll%?+J#ei{cv14zG2o!?BlP?{f^saI`BHu$l(SQf3J8Cv5~9vG9k zLeKwC_m}XqG41(hOLSfIj@NGuIfhM{JH>fWlX<~8!_W{DZP(kKn!ew|{@J0){Mis) zdtY?!6@kNUqcYTK0O(M`^D+RsHlv}*njCjAFnS$D|0wF-EBdM=(1R_`=}UmP112?T z<4dYkMaO;#os)mN=pq?{V7HS4A-!0kX?t5X@i-o;ZLlC5^wfxakaD#dq)85n8G7$5 z&TUC=wx-=NjEb=-lZ;H&022l`qLhur7sQU?0hVjs8wgccV81Z}4pdy_(QzJ?y|ihI zBA>FE^@bbYcRQ23l13huMek{rU`H(9%!x=Rm8s@QnG(>zK-0E*g8T?;Ee-F_iK3_B zGuP0x+4oE-AC<p?bE8amM$gG4I-4;x#!EKuV6R9LS^_dGRk2F3VyWpL3FObjKZce_ z-eoUV5^m{{oj23JNd0cMSX-01LD-)qwhRr`Z9Slw08xL_{vvbfJ)KC#i|Pd^7N$`h zyDYl*mK<B1?}#6n_?MN(Hvr&l=kV|f>!=Qk0Z`qC65he4*VJ(bGi?b+^sy%BP;|yN z+6;8L$|;$&Obq<tXhERe&c-onqVMAK%A(2L5HMkCGK^^yj>&-y++B;3rs@URn4(z2 zk9%pO&R$=8$BsZ0r%AjWlYoj;LUl87h?;271%Wq*3xNs&kXe!y14E+xhvojLF(yY$ zf@#GV1UzUQjGO1nUK);I(icC&d&<d1WzXbKdY!f*6csz6`{kA<L9%=Xb))bZ=HT;$ z`RTE-Q42p~(}V!lWm8`<uVV#8QfrwQ(y=OyRBe9EV5RMC`)|HHY8|>xSJJ7m>S!pk z9|bf18FD0oWTAg_4e4$_M~hHJ)&elX`9s2|uNPaY(UVF7wd`ZggF4*z+azG;zX*u| z;Q1|-F$Je`8I_TnqJ!7axn;*Y=;{ZG|75?WE2iJ9HL<xmgN^!KM3n`JOEgWc0L&HY z>&v5?$z)=bj*0{*f*58mGoHJz#MrLi@t)mYA=we)u<>o<<P)NMRZswCA~PH}BVHWa zux{10;ioge_ptJRkcXPBCG0B3R*8d3VMaRp*}N<;<rqYE_X#RMrolrMjSdWo5}?CJ zB!I>OALsMR3xrn8e2&b7qw+j&cVs2pL5NhWGo;nlw?S-wvZGiJbv#yQ<p(AvO~aRP zt&P_%$h;s?8z;P<l<1+8na^4<-Q$EEco_Du#CDQ6I`M74T<af+V?nmR_r&wJ%AXR% zUFDa(aBlX}cl}->L{$9j?l`-p+jcPrE{fBZ#(h6UVq@(j4Q7HG>X^k=<2JTdr$q-R zwP<*Xbh9VT0kD@y*BY+O#JKo*Lw?*m4!^Z5Xh0psvi`BOSTtub`jy}`n|<sUkBpl( zTafy0TM_B}c+AI}k)QCH$32u5ku*<%4h3*St{NqFWI)r6&elunInuH&)*^v)qhtpv zm;}kalA-;eF;urUl<lT%f@7l)ZLV9WJZkfYWqDzZJZYyDj2>cI3;}xjRZklLoOAT@ z_o=)APvsT>x>AKqjWiCJP)LKJ;_J|XV-q&x^tY+f)(qt_75YXyHcCELXb*)*1vh3w z`Za?91PUq8p1+Fe*CTBS8#g}il5EM2KD4TSKeOxG_Pl$cobPewOmhAf2o^wfyd-gd zQT~5^pri<YUS++1<_%e@-(H|)OG8ziIVX$tD5(fx%XKx$nE5Zdh4UoX6QQ73*KpG6 zDOR*jt!=DhacU9M*B3<h3Y<1$r;OIgwp{Qr<w*<x)_ZkY8#CAB2dx8Bmsjx9|FD3c z{JTXQc<pV4Ig*n&3|&Ra-N&RrS#Mc&qLPiUEt}?T1h~HLDe{~*heDm5YnHd$HTiqv z{JIi~99<c}+G8pi(jl`k%jTAD&f)sHOI{r9of55wjUSR&x~3L(G6e%2RAx3_-`!jr znk=U+Ml~DW6wG|%%cw{h60i#1ey^p9<#i~Srd4kD@5+8HOt<SORz_Vr(uQBQxku6y zA=G&QIxerd`kB1fND}xA)nOL-=t?>a)Nkx!8sEc;Ke-l8=UC_k2n+~{!yFt^{Ql*k z5`H*V=p>Xf?4!Msh-(c!+wsv=c`{Ij?l<D~v-Y34B0+`?YY(Ls>8^iDhstJJ8KOSj zz}&4Vod0kh=RR1+?eoCeTy_bYcD2vN05H3h%5W}0H5drwVE^IesRjne7V*X}?x9ec zk{^5+^$n626jVpyl(XdVQ<{5i(Pl55Tmv>IxnI*PW``@f)_bzVmYhh)fx@^qx^hue z?v0bybn`b?O=SSdkC?Gbuke%@>utt&<uwhY-hY3SL_gk&PL@&k+)0$9(?tc`l{;dR z>l#7)fG>z2{KemSVs}00JosU@qIC++jz1xL{(Gr@|4Ah>UVm(o;)V^=AE~*2EuKHK z|4U|!Ns43J=Jo>BZ+0&5JbgD^2Q{%O3HyIJ-_)ognI8?!G4?=zhmIvf?>~+-#8W8O z;0E^u_P>i8r<QQ~w?WFp=IO?LLG!U{|FiO>IRKU-E>;DY>6HwywK9j+)@4NPeS&v0 ziF3bsL+45L^A)o-%O?273}_~>kOGz&+QXBsis9K|WO9{*-T_Fg61PlU6egOH;O0-o zD`AZ{J<-$4Ev(f|k{3e(B)fr549qwD?PCh3quqVdra1`}K+l!HPPC{?ivnptG~RJy z;)w{;ovt6Y?YTG&FlV1<tlv2PmUYfXGh*`_VkcAFyvH*7A2|=YhCep(kg9}y-WAyY zHv;>U?B^%rsq)vCK2G{nWvf7TyQHLQ=^nVHI;^%;4%PXUmO{I-d+HvjFv`~cXC8}| zWkbCoI`)R>+C>?JFr6?)C)>E<6UdVr0J`&E)Ro{Dp*%1xKjJ*1U>K1<CXbEF5Ari) zc$pLH->a6?fI~CFQ5jMu#R_;sEcj}{>ln&j>#3uS@lK<Kndhu_ppnCPGZP~}pKBp% z>J7{?+vU6c&hsXlIOt>_+~IXf+{{9EvX4FJOP+F)IZyDolWHCsD&Ye%`0^?6km1f= zR)e_FVR&W0Q(pi7cBG6ynkc5trOazpl4aa`blh1AUpwzfFvik9X8+G`1{!px1L3AU zRrUx1ko67&MB$w1)+;g)S47v&BU5XyTb4#oRdM$e1^~9#84ifPA33;y(Zd%pG&U}; z_yM-o-jyHiYgS;_o>bpTlv%ih;#4e^3~+)1T=v?ywpLJtC`_KS;`UItz>bA$Gmb;O zC>diOAtRZ<lJrK{6o)muT*LvJ<pfdkCd==gBLNRuUJn>^HF()jy0h(?>_q$0?OATm zFx&oE{D|KZKcEG4wp=g2yidBQjB>LyzbxSt*q=>({zR1jzb4twc-mQ#VK|0^3WgKH z?IGoF)5%p8i{(d=y@Ui&44JY4)Vyu_WY{0Qy~Q+Y>W7m=`Us`UJj#`8qGPX#u3Z$J z8w(PUc}EmK4K2b`gaBYEfvwJ>Mhj3LsbTc!O^gck-(a1hvw^T();oS7PVm6Ju$CR9 z#ou!MmP8remdSltVq23XP442EE@qx%%AI=10?0b^S>`~NnY}q&z`s4HFE^6|PYRUR zY?$g4u@p)s+qbnxO9h`+EM&e@)01>*Z6DFtNezYv*3!p2f8(Rl3Lfyb{JK8DI<m&J z<q8XIh{w~RwSRZ0gnxgqqzHdTOPwiH3CB~9&ExKFe|+$+?2pG6TKHnVrMjxNk_4#~ zLf$(Q!?A=uy1TC9ZlZ!|lyOyb><!ViP4i0X?*O(<@Kd0yPi_FD*U`>lS0w~C8$hkr zLVbK%e$st;#hfVreTJl*!9kl7+?V|UvZ6}g?1l6+kqW6#nbb1i>y7xO0Ut>;AhvW* zJv2wnKdL%4LlRA*nxBss6XrVBwqIbfXj>aZ5uBdujj&tfsp6mUwmZ4(GKn%x4lNrZ zS^j=GQBc|bEcqKT%0Fb}*X;G|)Y*&F+ufzmtRA7#r}C!}z|4OQrDp5>_XO)7pe=Q6 z+a(m(@f_N?Cy!5wj%_Mk8>*h{E}pXf-^!EgoP^{@eWx}694AC&gqeu4(fb}+!C|pn z4#4+^<gu#yo;1@V)7z_$ucl52NT^NQhR2*<|Ne?5@9>g#muX^MPY#MfF;qCf)71fF zvtyYWVaiRi$H~F86~=}m6R`9XZiHNN**ns)`DNNja*He%G>S%gUwZ%K`QL9#h)oHm z0thlCoxLVH1mGn5-%=ySSEBeooNcO(s`XZ+cvYBF6gf|pzuMzsD}{9%2iFbcm_ZnP zgSCwlxP9k5E`C<S<<Eh+YYY$Q+JA)&I!{~yK=HoYZ#8o{mSDx&JTQA5SiaAle-I=4 z1~52Qh3gMXAh@c2oMJOdk{9~h05E6B2na(tHPQYnaxh_s*8OWko}vn-1SWr@SNe4$ zdjT`Ks>&KPi<-OuL;;9+a3RympJ_(g65`yJ$5}oY!^!gja@jMIbdhw@Zjw>L_%5*j zP(dmF|M*fFe<sTRXols_euC%rX8Y~b?@!xavwWCIfAsv1OSo`>jDL}a|2@~)Ysy~_ zOKf1CQh5P>@f&QeoWPaiXYl1;-NDy?-^ShZ5<^uj05m<IgR~6f3B`N*-wIuSSSS;Y zh|v~UVs%E2Sr><11782Ri^;=-aw3P&*qjh6M!%j34d&fFd6}L-xJa2XuVVa6h6^=g zARE8%*kAGtjP5A!Khx);r`mUBW<*CQifnb{ttSf|W1HmmUI=VC7^?-gQ^Dtw%U%%M z*eEhuu_U3h*M?Z<UsBorzmd5AVWa%pp>`4+vq$uz^0#3Q-{gezJjgQ1gul~EhVNet zfm%Cl4CU@E1He?v#yX_VjdXB)3Iij@QQta-Z$G_)&;Q#RX0C=x*HVfVC&?9f%29gS z8~}5XTmdV*Ebic;w$hZx?_p@Ph#^QQp!^G+3>WASf$mq_Q&;9`Wn0(3$h3o9Yvata zuRP;d2R#&h1Lwu2nFr8QgdX->vnA?0pQ6mJLk7OoeLUFI#!)ceW+Oz@)+g%uj>_^4 za-M)(`cy38SHja~n;po50}|i=!HADv?<?V7?=LE{pM90oKT7&1#CY0VuNNj+?htNm z1t;Z?U_&VG1z*fJRmIR+JMLhP?DJMK-6N%YU@_}IZ0QM8F0Wt=SJ8a+0*ZroQD5f} zQfI3!8?tfo^|5--Q_6QU02J(yd^vY|7XxD<3dIKE;1&YhQuT}C{EFf)nK#*a(f48} zz8)PtsTso~)74m^smgcCUI{M`dC8*SVt0CwIyu`XzJtNk(T!~W)udMb6J^bccx*mK z*wh_{k_I?&&KQ_Wf6BJj;c9U}8UL@#`X|ZH{~@0LFD8l@FLx%#*gF4SBKbkrsqU1( z%ChJ)%Po8*-v70YK<lxNcE5Y4tvEVTL)1yP<%aeCcVtZNpga;`a8eY=W?Fei<^L3M z|EzpB1Ay*o7{nbXK$_sCDd5`48frh7mk_~}%-mVHrB`%-IQDEZ0Q#61NDWU%3s0@& z=;hwt48;4_t#!$#|MFlO=W}{B5ildB`Vo%lU|E#YJ5Y5|^@~c`Z?<(S*^8@z%8h8t z6l!Ps+vi3=F8v@0(T(kT%)Qza!LvmQTRbxt=wFG_|2JX){44SNhi$fhSDk+^wo|c4 z2Y-99D{iq=kCf79Y4oj4K?CUwsC*$eX^^!?&_G+<>#1lyb!0&`)SJfI+7#9b3z)tU zD$0GoluRo<NrDtIeoFD4$?w-@nx46lOx?|8V0jwYTC1W^+K0iB5tIh1G84)OLqC}n zd!QuHo}g#QEJ%3K6sT)UX7`}P{g~u)pyFYmV7s`Xg95f!2PR1nbkfAYl1U02lJg$& z9cAn+%UCe$*PeJm0))2nTp#z4%4H9T=V-{=LjMVkohU=D`Jas!@xL4@<1fkZH%ZSw zvmGZd?ahQgAkA^G&3+tX+0TjcXG!!I3oU%T)W%#b&>n+l691e%rTk6if26tp{bEZD z0G;_id-H3Yeg8a8{QWX6eF`kz6<nZU`U2Zz`tLSS-`xO68xrUia4osIYYV{Li#)F) z4!u#v;kQc|93PaE8b_<4LjhVV@Ur(JpT!f4?G_lBdO3-Ss4RK5_auET6Xs|o(+=>m zY<WG>EGR3E(-{)5a1YN%wXT)Tk6{6NH>;xj=jCXJ`i-h;B9k1IOD?@Cj=}vytNghp ze69R{G+MyFIatE~{!#_Mnk-?cs8<Oc1RLx3dRX~Ww3doh2*VoltF0L4B<}y&TvI9k zTY`qx0y|(xh_3b!0;rp2GycJFda1gJfzgWyg5$V#_B6iuzi#9BUvFXgK2-9bS8!6I zpzl6PKAx5Mg-B^QO;Dh%nbpO0c;zb?Jvf8`96_u21I=v2+0Cz3An~3s0Q7>$Gz%g* zki@{gT5O`^>WAnN3}tw}nLpt5P_v-z=c_lfAWmyP84ehblYM8zS1se&{DX$ih1E7@ z>Y<_zPM{C7ak!cGsCj50m)$I`lQOd?CfCUHOlH21EOb`?yeG<^iGKfDV1F6{eufZ? zus=V8Xqk2OdQB3d7gOPsZE3?b&cr{){h9c;(lR}4d?z79+e3>yHabvK{t^Z7i%kss zx8O~lk%@3w6#u$BXQvePY^;=jtMN<*>e(3paY9zA)`9xBG`NM*$PE-w6;1Y@#5FeL zBqx(7FDZrhQjw>n`||YzOAQ(Tx;(Hd3*fML217-CNkXGId)WiXa?iVQC!}AH4ep&` zRzj3<K+u56*#<tDYvJBTpaY;LY0~n5tAt9#dnqX>mmZw&ium000%?X(Qs>HsHm?r) z3hHO3KjZyx4f!Z_?ZCat?w6I=SOAvZI5O2ubE5n&i_$+Q@IRIR?3QWvV^~8&bJBZ@ z_SaAx+B$v*8=@=k$RxUiQuz+b12EHyW@2c{{+`(=Jv#${*mk1-&5xy*zq$}$W_b!D zV^acQ%)|Fz(>Z_&#>jgAdm<rFH^I=2EeMvZZG||8mg*0{I$*}f_g7q1FKgp}VOOiq z-kRT?cfvH>j{!kD*g%N%!KxRy*(|wH1P0+!uScAR19I8*!r4osoots$sh_W#`cV1* za-xVo6XpNs`%8Ft#7|P8TcNK0u?c_uFb)a<a80^;s6GD+;`yIgYN>`l?D}Ut9F6kr zxn@6xL@(B}!1px*(5^3H$(hF5{EQ;k^NK*)b0-o6{h4|}-ZMY1IMzQ_aRm4ps@Pl( z(b_y9!R^Ch)r`U~4XBffBG=Ts^?fp+6>9*f_*keeDH^7QsuOE^Op@m?CTLlgRo6Yk z59#(`PC&;DiBsBR*O-4i--@^Z6|s7l4^cJ@fwdr398=l?(t}s<oFqvw2Lp0>kz%8H zZYFOhw$L4KMVr4WDAylPXt@7RMfv|i!hCNH7m(=+t{UHPF58%YPp@z2N+-=&s2?K> zC_{W7%rx<-#Qw>H(rBfm29E1IO)LA}7wSqLD)Ya{HYwBCT0Vzc=Z@q2#}{$&^9WN{ z#WUJ)#W*lw06S36X0V>U0ic=~xcbL#3cfvc30S<t9e)t}UK+&skur*vDuR|AZBLnr zdPCRA5PdG4ggH)f1=eNLSdpMOJLj@v;LE0CAcZVox<Od)<^$LwS8MGj8=ZM#tf;#r z9%4m=VGblBuxjgpOfo>xFeK#-g>u;qbK1^h)yIQgY?OBPIyzLqUx?!W%flu7=0I7s z^JNY|rI1;~h6kgU*LL@q*uBj+NeuS{<@{8_d%vA(D8|1!yMvmhM;6xHgNc8R>ZKEf zGEjbi%HWI`0v9lU_asjJ{ye_;n`wOed5n!EJ($W-Hbwu>aG;)D2*3t!$n;k%izaKu z8ozA;cQ1%3{KHvz<#QOB7?xM<M`P<qCLz$4HS~Q#pd|pKC?;jGmFNMqWVkM`2dY27 zD}x@6R9*aVw4fG<;><Vi3F93Y2764b5yT`w8aE|RdkY8UoX3hq)iPKSVaa1G7i6;J za#P0+8tqIh#o4*NeJ;5?&$(;8RkfBAwi*Lx%UrIC0e`fryZNd5{(VKfDdD|D@tekA z^pyP!y>BniUmKN{Xr5{dP9bv1E~sBG3iL0EpPqlvFg*7%7DWBpk*@jQTZw<h0Ei<; z>p<~(DnoPf*m*djBNwJ;ara`H_(wFIN%pPgcP9SnmS<=HWL5~AsOymceq{;+lQ9M` ziZ*_v3<YA~o^pYsBpY%MiDg1a;)Svj?rw%ELv~o=<3!2c9VsZIzy?a#T9|1<ejgC# zs8~^#5@%8rD+IWa9Fa}*ZGlj~5%}<o#13zYfuwd$6-UwG06la%EVjp(!*Y2+^VK4A z3cA<Xse0mxQX_x=&&CQW$&ViY4`lrw?)LhP^n<r!_aGWGx*KSEM)RWVKbvpjUuGJr z(a%aV>ZlKXcByPVH)@gc{t4@|^pCo*0CAAT04PtMhgX?KnkQi0#pro#_|M(|P&;v8 ziJTP&9tx#4yi$Z(?LO9VL&ZAccvCE!5t9ki_w9jql1Rn=Emg1{hK)e;W7~B^IQ;Dq zKV5B^+kQ~~HlA+@tz4A@p_2n&md*4HK|{EK(jaKDbaK-SoUIqmCJyDwKbPky3HwSE zr;xQ_`6NQi@YT;n>9d&+J%6%%R^+)L((~KRAP3pGZ$G<N$AscKo!Ti7Yv8hY{2xoq z|D)NatXq@uFQGpBs@9&Z>y5R(qwdqhCmX1VPK-o1Zi$X`i<%9v-6%k*2sTm(oaf=) zJmVYyD@mdPwY!hfK#0l+Suo_Pw~J^uUxgDM6<A}x<^y00#CY!|1lp;9v_H1(npc+v zL@0c};Na{USTV4gO$4O$DpAn3<v>VO{%J=@k^?yw)q<u=B~(~4hc8C}jgACNh&6QB zdNX#Cq^!JZAeZkdNsQk~nK?P%lz(HoT2^F!z9fb!k-9$?um8_Q@$>lcctLx^W_@yQ zTY{??==o$nN@Q{!Ro7EbCpS|Xflm7SWVR*Bzkw@qUv&eMMP2cA=hJZSDgIQiX<g^4 zO^%yg(7KN0#V>L5;&EI#wu)P)fK>qjf+h`sNR`*C$rnBIALTu_b2a6!&@4wGR%d~^ z8^GGMCo^RXBa=fI94m<dFd#d5LB&HHw{xKOfFx{r7SgA8Aq!|T)(eWQbjcAwB!JoR zc0*D`Bk28n06PfTmdG7^0j@sxgJo{CzDkg!v9u{}mFgZAq*jn)k_6pe=TXjOSBNzx zIiD<>ovPdkjKwJi>YIYj{Yql||Nc-J|KV_1LH}=v=kI5r@RSrM$z|>7scC;Zhk}N? z@1{-(<Nl|Y+jxJbsl5M7YXR!5G;haobqCuBdrmS2K%{3tu~HW&_$D@%Pvh$G6Zq<X zUc{MyuH*hU;wW#?Gt#Ah$$NVS0kA8GS#Bk9*_htm6xVhh*jVsz<Sh?x{;`8e!O9$O z9F5Hp)!2ZqcO2VZu<t7ZI)=*W%%F|nB#VR_5G`kV!(|ivcaidJ_d^`f$s|HW8E=W6 z0?&P{%)}~RHBjQ~ZTo;0H)Wz|NP8)S@m`KE=JKp0I~Q&8ZEPlLp)6b2u#Z34r@j8a zIH>vjNpr1uJ|bQI78{5!>2li#>(z=r7e|HX>`C3-3h|LB{y$7N73J?rGfv}uW+3)x z%Wtj7>HU)chJ!aSK8t~oQ>fRD;nHX4aqO>V#Yt`{U8%aLm1!+S+Vg)tgZAum0J1`O z!}U880vlU3l!mWj{8ic2F@&Y^>tY}rRVU4aK)0yrf%jN8SDal{Zk*6&o?6m#flYJ{ z%BDjjpnC`DH^?NiCzW9nqp)_GHPm##hziity1o(M&St1M#g}VgT4JGttZ7I9NP4R0 zhCwdfl4(PqkkY6Oe``&WkV`b(L|H@r%<3nT<qyXSiqwaH7roAyzJ8ld+U=LdR<??X zr$fc>Wi-f4EmG}$Pc5}^ajlK{nr>|18Fs?}dsg{t)>|h3u_~@r*PZ<e<$2M8=g@rh zE2R^u8?%Xj)SYf<V5jFJ&({FZw1xIBR~-Z60ZJolvN?Y%e;<-l{e`^dO*uw7wcs8z z0OB;M$W=^%P;s-FAiznvyH7SAmIpFHZlCEIW<%XsmcgE1Cos-}lgSLt!1?SY@a||q zHB|YDY`#o1VrQ|+0&q?SVxt}<17dmEExD>?-OMGI2hP95V02OjN=Nf`a1F9F_fPj3 zD&Jv-q&yX(D|?-bkMpi*!Up{oiK21jW|NOht^Y|;{GZLY@Qrx>i;XC;6rvudG=Fw8 z%Z?X)+-P0K?Y11>C|y_@*%IBz4!YFII>M{s!Ozzde!d}qWX6Q{yIc(K4>9qw;JOon zgN&8sNiqbEp;%%?KvA$W&m>6zX%Cq_Gkt9DY!z?h*-MOj%P2r51@hpAQxy-`_tI%) z+YI!@7@(6MI#hMjvFaGeoB-y|3>I|OHE%g4zM@feR8z{>)v?CV(6W-HI*JS&>vVoc zo+hw2WvA<}3YcV`s5xU=@|EfJS6sY0R8W;EzuH&AZw{8!?aSizvyC@Be^t>F>3JGO zPG7|Ovyw#_iI8Mre{yu36(jr;f&RZ*Xem@~BjM}N4$U52XW4eYu8QdsGAR$#P#(Gh zr*Ir=;g`5|@gA-o2ku`4HkYhZ9;Hbq&(8*Uz6OAkSy?uwA2NGu9$321M28q7;{{9} zDxfknh#(k8v*sxaN#_Fu*kk*&b~v02RIR}fGUBbbBNh7|l+{OX#8w7`w&9qwedzmX zCAqc+J5vtH_QD*G1F}gU9q?7jpl+?|s7`~emPr&;AD}lQ8VjCbUvnL&ySg%$K3-dC zVjq%ukkHV^85-YMckd&-|0kmC|H5SVGt>XQ5!tdT?zYcPI-@)N<N4cj&^bA=UNafx zzb49`DBKsK_{sLi?EjTUl=d`sQj2>JqHi1oYH&~GxUuHHGStG@{>vy;k704@7*7B8 zTYT|9w(!kIq7&~i^FQgHo_xe}l;@8C#2MN<GXAw{G1g{*+vlKYp~eq2F!54^LU9zW z#!G0{2XuX;`e_`zJ<~2YJ7ntWQ%Q-EXW|iw6=!6zZOP_Dg*PFa6PxIiOkV*DcgKBF z8fYa!V2!fQK5p-E99SXns$x*|ROJN6kGuivGG1*9j~D~Mt}dHe6F;{c+gx_#`Z5#9 zx@QS`mL>t9EMc}Ei1H`g|L+c#@f%V8e>73VYlFUS*=<q-l1US1=V^Z$;BXARuZdEV z*yqx^ZteSpK>tJmR346^Le{U%j`1FyYMK~2GDcCUx{OlgIO>}p;qn)!@$r9Jz?Xj& zn6f{%`-Lw1i@%rFr{7NqfZ`WprPx_St8xzn=3f`H(JyW&lQN7C$O*qDihrLO1P)lJ z>LvH6bH)Y4+IIy48P8<JXe}zkqN~vWCJ4Hwr9zmgGww&xP-~nxYN|xb)91?yiG322 zwVVM&2iRSaENl!7u=u8}c&cP=wGD?rns<`Iww;bkE<GsSHT+3dk+JybjH&A%7#<0E z!LTf-ePTeqF0uWePZaR$eQe-U!p}tUzb#%ryH~o#KjYkEmVacvt)D`0R;+RCWEvjX zb0oxnbv?kBqWH=7N98|Vi_+R;&q;Uz_OM~i$t6&}c(bmF*S4B>u{8ZDuATT4r+#}4 zXMWd0t4`QoQ~$F2pKDlhzX$pL3;><323-TGzL%W>V=Uf_urk{gh-4Cj<1b-&astJ2 zMRw^(!6uI5nOV0dE4!IPoRDUiW+Mv{2UwACKqN73A_4nLuC6;avGQ!zao-J?DLqo0 z0q%C*0Nx)ILttFSgpF4i7C0c@9AmZIo9Li4vmFL0CTAcU8gOz8pqHmeM-6{A)RR=0 zs0@E3)-w6~-w?%5FaO^iD&sE?mzDB=chtxJ@^&g;mD8Pkc7K)kS&7pE2(A3h<D0U6 zZc3d0xcF}$%r+GQFtrt?c&*z>_qzwh#QkHvVH3tJRXHNdSiJuY&VTS3zWke$IRD`m zHkOkq3%%Xz&TsMe!<6v-82~!-QM0v_DopZ=RCZRg2F%_JFuHFLZ~S~1N8YNSR34DW z2UI*nbqjQ}&4TvSEV2uT3f>n;fUR`f5)PPcYVK`%xT<}y+!l-i^W98!K%Z?)-SyPg zO9@TVvC6(CZ-8v*hbx{courY(#7WN(mXJ3fAR=H&1#Mn|{fvZ1ATJs0?X{Ds;kVZm zCXa+`$&)ox6~t)Y0DDdp6pb&ve!~5KBC-BghCGD|Fu62{QiW(gC#(4T(oQtzmcagw z_WY^*+12keiTN|>Z+bJ-xf8OMioV{m_c#wnw%LzNAc2mC$Cps7T*BhruW|C9zQ*yt zy@|$_*7AJ5P$FSoq&)xl`=d#EzGZ+r2{AMk4q&7EmRYS)TaFtT8vPPug#y|b#+o~U zkc|?E?|P9U2#Vu98xF87bYZ$ehJpgHNe;W^u@T2_!V-QuRzTT!DmtG@j88c5`h3Ln zCa<@fh+dg_oU{@L23!dT6jZ__4FNV6Vu!N1dWc1dVa_!|RkFm!B~cKibtl%7aXUi; zmgLeJ9=U<=VkAl2%+&7dd9MxQ*tX@(Y9boZqR<bNT^tnSkcqVP?)S;OI3#G%D`E(c zzn^o2aDTe?tPx?-ax-(RU)Pg8Zzp5jv}F+PZw0Ee--k0zb<6U<Bm>!?EKbk2Df><m zE9X|1lz3W)k=NY2hl2N&(s6NgQ|UY_40(HnSn0#?`{hXd{tW;^B5m1u!*)7DIC&}q z(=y{&dRvkS^}3AX59FCrGN^leuMM)=rl7NH)=al8HV~qW$)@!-TL>dX5BgpCr*N<B zm4MD*k=$oz#kV|NAy5-fWkrmq*?NS#n}KS<%r>Q$*MQp`#&*=Pp&<h$r@b5WwTSoh zKDSFQJ~~VK7|SQyL#VD@oLX&U?-S+EBvE#oWIaELd`KomBY<;+JttVwSM|3q8ZR@) zGGE<ylGd$dLTe`9VM^j>WcT}YuBrB&DM12k!k@)v+i}jdk){<V*3*`Z({&k`V={@p z7F{=+mY#6Xnyej-ly3Z<<@+}P6kZ!dru`eI4NCx<*ji;}z?{TOuA(w>6G3}U%=MQI z)s$yAHTP7rpsXZTxvO~s_%}=3wq#MBk;fVHJ}8kD#<5?KxHrAus+*PxCRI6oI5ydH zQcho#b_%4oMo@%}g{lS}c}1qvhKwD%4Ni&|$gv|jaHJY2RA616Ysvs~)2oHLE<DU; z<Qk$FWC)9r>D`CpyW6gD;tfRB(2X-}SkTIz%DkWnddemll%=9C%i8#XDE{{(w*SsZ z0k04Gss(jcxL#U8Y+{c68{_YmMDYV1xixI=LyF(iOD(1R3I9*AyI%tP>oH>0&7NiY z>umPpE4Sa$BnGW%%+Fp&ef6s7xLKv^DnmeRoepkWDSr;;3t+!}F-TUD(`VQLnLbkA z0G4OOt(|A=WKsrbLXKex)>UN(b~EHa*?GF>#PV-*)3aqr#8QaFvF<%o9<SyJutMlA zh%;e?Ju_C0nq1xvfuoY~^sHiFc^9Ey#)6LwkaAh)1_;QaHo$CscrpWBoo}JZiFD#% zclLQMPjTJQnZ>UV7#G{P8+2B`xh_G5??DtlJ$-WZGc3m1{Xg4Z!k@8@f1-$=NUZ<O zp@Kq$x|93t_s0gvwsWZ8uVr`4J{$5P#qSA;_5W_Vflnmv&+LCS)`lU`c69%K^452? zq{)AjLa{BL*c583XGQUUiBrEji_?GD!mabb<|;{keAvW4#CQ<~!1s>;sM%)X98B)> z{7@heVD`2?=I+!`9Jq$V??}94+!yQVr)V|ztMWmoU^tbNb-L$-3$+bnEV??0jdO=t zxF1JNrLf2nI3`BG!K!N(vtG&W9%z!cQ+LET-hR$}jF2xY1$a={f|<3=H^sYQeg#QQ zs(u@{Hytd<zy?7U1u$%lF%q`U#50XMcZ6J?OyaIP>70!_UgPM=ooPJEEyBU8gQ<s4 znE$mwPkH|PDr_z7>iTs1*-__wvDeS*i#D52E|!K{<q*kUvMBSOYvJ?xmSXz5y&C9A z&m>9@2?JtIvu&2YM!3o2&zk>5L9x$^vOj^lm#*Q<zpdl$#q=G1F_hPuI@A|4dN0NR zNM@TC%OFHaG9YDPs)5+Mim{_5!DR=qT0D%^`TgoOtfkb=g&dO*xHo5-?RR6m&!(wo zUJ@hVjN4M)Ke++OS5BC_p!A#G%mS0M(~o2&4_cK;ANEXq(pF0pGb?~l=19p?L@xuT zl#rezlLlw&p`tux3DkO9voi7sZAl@JZ9bqSlSA;J-`2fr_VXs{?C?N03u899GT9St zOOa&245^dpkU3=9WiyV?P|ho20K6f`>qDMGc4**DRJLyyQDjp-VoMa6pbL8i^3M|X zahq`5WXLhg@Zz%0_CK~D%74RT`x~A%qG*buJIW1RmH5Z06osC0Xnm6Y3@%~Bxq#-; zuSKU_SGp}Leo<@w;KemZez68Xj4be^ZO`&x3xoTnFgO^Xgh?6LAImQLCc;(;aT%(k zlA5czZ^aP^tWq<()m%N21xqAAE2_UdM9%Uw(!(U3BvW?}Y;rbS@5QE-tC5EpKvXJh z^m5QN99nBdDmQ>cCo{4s-q{KSB?xg{pwRhtkcI|)q}twS5Z_6uVbwLu%y?yxWO_N+ zJN-7Zv-VKO-#`*J$vWG%sw1h{&sqh_dW}^~fCd`7@bO^wKAUCjH)Wq>ha4(smdL@v z&R5!!+qiKixo;29KV-{iqc}Fa8lA5p5=I1!ZGAtM{p8A8ThDXTj$9#;QEL0<V#3q3 zRFy;Pu;=d-%J^1v*#*&Q3!>WuW?b`-kdUg)`-P6+3pM~agA!a-Hw&tW0Z`izO}01( zck+f<N7rQF-auG*L&62Fyr-1;1j{?MXTt$WzNu+_8_I(>HUeb;a8O3rEXOOUI5%vg zAz)7x>SS~FvJ%GV2)$*)BMhO8m+iEab<56-tQ-*Ke|?>bCQzQ|C3$+T5h)Z#@ynB} z3A&Z6GSCt&_OKt<-;#0Uw?Fuxu`%P~nsQ7BmZS-a)QMgAh;A{X|3{+*{AjG83;`;C z%hqR&smQ?D9Uq^qAlPHOM~45(kQwQLh)wb%k*<qtfui?iw*R*)ZLRHnUFXmFZ5to$ zak1tp^%8Zdub}_RU<9vpTj{PP_onEw1*Ov}VgRgYpatxXY~lYGD7(M_=vtYzHQ>Sr zI*#(rukPcOcg|t#;6B6xt<=_EL4DKHE**b5(SW_n4Pa+rHfvX9tILqGWQW<hgy}Y9 zo-z4}8)UhVzEQ{SwCuHwup4TQYzuA}BBd_Gn8{+Vdb;}{5dxwEOfviVRzZaa7Q_fx zN<svYB1|Cy!-AI%)<FlI&F8!R?k;Q8zcqenUP1g6=iV`S@MH_fdDvr4+J4zqVsvmO zbPPPQ7a+qs3l(E7s3c8C^>!FF@IDEi=;hO(CBvg;d(<`jV`X>Sk5c2Q@@7o604(jA z^FYI}A0=t(gVbv;nB+<;4N>TK1=%94?{R_rzg%eHvKRtN`9sf9&(y-^F@HP7+3ZJj z5cL)Rr1G!qzbP@26Ifq4g-e(3<MMIf;-^}-WhMN6Nq=^d7i<8iX0LW~u~$Hd)mh;5 zKLB^m0rS^Z@NfTrXYt;jRZ#W^&@7Bg;BGXdsrDQ@-~(o1;?3#}RBy1iWHE1r4OR2L zDloRhS5$X1*UJolhEZ=XSy5SoCsy%KCw&|{4+s_WxG4XsNgn*AY?zzOy%5EJdo#dQ z*(~pg;YFl?NrSTuh74r?Y-O-glQF%MA&^!6_GMc4JBXd`D~`m&bsjM{b~^XYI}aYC zM?RM*P-okFvUT~^6OWzDiP^gr$1|~g@?4CTbRsL2{Xx~~QOEOn%R}e6kmQMqO!t0x z&;W3VeRPI^_Oi!dlUAJ!?%$I6Nm8GaOD+6<x`EFn?tjac`uS-cWHU+=UUNx;Qb-c{ zyuuo)rSmdSpJ3|ZDSY~07IEsgz|vi_{=HDKR4F4kd|}CdR$i<Dpa#xz-4?Y!s+%CV zGGGqQ{eBCRhpwSisbJsBuZr^ju?*m7s=*>BueItFdaeqFHgpR!8xiWVh`EL<CTZt2 zK>`L<A9Eyoan#ijZ?72x$#g_YBdZ<NID@iibYPGzh%@hcOAf-(^hj@SQt@j<V7|e; zflv_-ZHX7f%`-Ip8iGjYZ?w#<<!aD$#5-hFIgj|e`^jf{0Urg|Kdkhj3u014pr-GF zZyH*;ri&i$v!N3e|Ac7vaZ}Dpw1wl#ZjV&{EZ^%sKUKRQc6s?u8t&RFp8kWxmif_6 zDrFO3*lN5LsXBj>{CqC)em3~Iwc1XUKVg5*DE}Pw?_Ow;j;(qHt-G3yWh~5J!NT1$ zxbWdM(P0hIWi|;bl-KFS%|yZY#Si9-Hvp`}QMOo1Hw&7(9pl*lT*vDCP5j{3H}Ue1 zrZBSqB@_xiLYbgZn_XPo2m5S$N0O6|J9`MI1uh;cX*)^OK?+><Hvj2(L1Nr)$NMc3 zYwMo(BGFw38j`@BX+8Rbgi4AE=YZTY1VBy(9vdbcz(hhC0_$?DnZH-tI&8pDfqi`t zbk(#wnG0fn(}UtRPUdPp(2{$ACVZTdgq>pe*#wH6_>mP6gDzJkIS;EV*t>$sdCX54 zE2Xzo{KEyE%}>~$JPm_}tAQ++O!{N^WvAcoSz<NQ_OBz0e~&8vEbQMlydfk-%1#;5 zV3P^+<Wd`73G9DH;Qt#Nrqs^_SEGdXGMCQTFVMeg_EXSwzU_7$%d>ZJ_nVuza_kN+ zecliqhRiCCw4U2NyXx*S0D>T$x76v8AqyaB!s67jxU)C0@8~x;{Kkk3_G{Q&sVX7` zUBi;4XW8qsG7UMK#ZHHEek;JoEv<0)JlTXvhpIMIGdp9a(<t4m#(sxh-GNhJhlkbQ zlO>&*9+_6&HjYoji(b}z-S!=jqZz7-jcM~3yF0G6v|+H+6r`pdb*8vJt|EWX2|d<p zx(ebS=Y8FL$Z@AZLZ#0>41=a=73bSN6UQeD<H52fVxm`1BZ{vfQsq0H5fV#cm2!x6 z{#3*En}$wu>97Gc8WMLHu`4p~E{dmrY(X>p5&oaAnL1%Hz}&pf|6xPxXpbrMRBxN= z&^m(lb<AEnkBgt(#+QGyj*TVz`bcz|qhQ6Ly{k@S_ZR?ndNH}LJQ%B_ipHjXY-6c` z`sy_d4t|EoA!hVA*o@v07)4`&z8jea412aBVEgRUB~FA{8-^;iCD8PR6@~&dv`uC6 zo)`h#c$ws86Q+``XTY9dL3@&MjpDR?$~wF%`=5|@Qf=8eU?ur`sOTwWw=84MEbC>N zx-2cEF`$qEK>?Voxv2~RjUcoPgJWdE25pmh-8QAe_BQEWh&WT;mE}N))6hodxh&^< z+Ql_hwD$3YjW2mjCxa;-3Q{c_K8k{?6}P^xD^BReS2C=NL&n>mD7psfca<T)20g<i z_mLMsk^Y5oSI?%sQ@j5p5}IqzxmnC`flv?K7e#+*m0kUGJ70SK^IK_GKhEW%3K{A- zmn;9wEYywZ*yzVWOQ8HhDZ)VcHVWl0F*o>y=&I|Yvzo~}SpMhvvC?N@u&YjH7a0I{ zcq5%UooyCG85q2Qp@BN8XkZIN^89|WruHfL#ZmbKT~X}4K1+?_u#l{w0c^Dy4rnVS z#Jcu%S@8dAqNvDI{7g=O?S971BlGZ{md+LcCeuBmJRc>@YM*dC1#j;!$EsA5y#`o9 z$Xoy-1%XlaRQ_^_RP&;m3IHrY)4mVr3WF_ke=CfW=bFY)u!ca87zVMa)sB<v8QA*m zNE-|`{_Y!N(X*7h&~0GV^*4M5_CB-6sZglcc`gIKxh-fy9>Vrk@iRFuH4yY|+132~ zOyILz{W~?_+35o40s$w9G-T15T={pde|!C1r<3!Yc`C=n>!;!;zyEcC{AaD_ZyNh> zzU*;s{|8S(jW~zm{kzJe58Ev6`vw(!Bs%I#aa89z-lBDxf&X`x>_P*8JD6;Tk+PIb zv!KBy*gbLS?lk5PoP=9>8O6#=GT<e6-mtu<kVz%p)7$`AN&2I3^OoJ0gV_|#&=T1B zq6{(De8D7RG4+zHcihaGNLW-Qg-!=UTQ1v4Z92x<@(N_9bLM^4lcus8C_IMNied5y z<gh3~TN`ae3O3cPHYD0n1}#vqZHgFJ#cvG*m3SDX>~~htTMynh27#CH=GF7Y5a8b> z6VD$e17AUV_v}G2WT1W;0VVGt=NES_dELS{eQH~Xr7P7TN2MM;PmA_?X0-qPO<f*L zT3_Y`U0ZKst7Vc-eVwNf8G|u+u@!2&P3-Ds+`p)i=Moq5hUlV8sMk-U);J?NYEI>+ zvF5+NDX(L_e>>9ku)A*;-JJ$Nl$1wkMb4e!=6T@LzXld(@8gYMoxsGaBN*5xF3{>P zu(dLzN-B6kJfD_>t2;8~0yBzkN4b_xGP^C7KZ!otCPw|siGpg6I#M!;t>&fH6Y%#~ zGodG&w@6^=?)rCRU~~6Lngkir8%=!Us%j4QE65&7`G=;GAWlm{gDCa-EfgGD2;HCp z*>)1P(T@F%$zyJM-#5=?jex2;TovcHUcci$-nnJ(I%fQ$3|(`YhT(Lz{LQWV9j0GO zmPq7|*Un38q?<B#F0Zw5YN@U2`+0k9J-}8oN-VB4(behfewhmt?9Y)30~hU<CQuj{ zU&p}k8PPo-WB%3&T>okc7r)TDN?Wr=e|6}zT_w9yNv6#aBDj7VjT&(6oS3gy<+u~# z-xe<5j}DWw)kC{PlA!lgY{f4nYhhQO*NYm?IK$edT?5Ovii<04m6=Whpk>Na-yJO^ zt#d8yXOt%bKU6H2dYpYA`#ich2JC~6DfGx`2vE_cN<Gch=x#{VNjcojyOX{)Et7M$ zQ4;_U<SR-$EgECNHO9jed**TH__+`GfPCsb{#p;yMtzA~QnbDe)zs&r7y{%5*=lFF zDIDEYsU7V~M|D>WEv${N;`lzh{oN6Z_Y<tu{(vi|zQKq8rHyYt0~&QRuHuYFL8J$C zcfu*V)Bs2l0$E}aq7~@hTCaOJ|5+2GFRf#6@&aD}*?v?i?_qHKs0{Rw%5DjRqI$1( zL-t}>`;HQ28VC^@BrQ-=2cB_1iq(d}xGpyj#-)h_>?`X=LS;WCtdHV+P#-1_8xy6d zGcdQE>Ty?>JDb&>&49NgK`OCx#|nTKcs1e-nO~F|BoCr8=<Y+2$MK(f*b`AY+?4GV zGYuw~BSKG~S^k9mPcO9<b7evr=IL+`g?S-)%zwurmJKu19IBqEm%%c16I1*zVqxJF zZk@S+Gaqb-ZW0TsPA`;bL4bnjE~+jX47=2-@^<B~vSN2YO%9|Zict_^We(U}YRYa? zz}SIdOdhUE%w-rsP!Y7iQ3OG(VbQQno)6G9q=cg_+^R(W*iZ>)x(Uc~ODC6cW0(-D zAfXGD_Y!Un<4z9Qd~ly^{LQeXQ{1#;Q@3!sGV>k74wwn!?6v{Vuo$N2>2xS~*8usB zX^hle-IyByPc+<0Y{I8zP&VPY%%GClk6rxe`F}jy#Cbvc$WCd=SF`lflw9|3lh}0m zb5&fQ)@@}77@M3!sd@&>(_i4sAHKrpe?5hBA3#FUe2;aiBU8@4Yn4A`cN+k4CNqfU zt;)WX2OAp_3b;ti%E9>I7!yYc$5ha2jH4wMm}B}?>Z!h`dj)Kt(Fyvmm5vSi%CN2o zBsgbS><ABXQ(^r!8QI*#OVE#d$T#gLl@1s^qtvrUHXfg?ec#3e`~W_J?|Uxo6mUz= z&B>h0_H%Wz2l9FJRP!k_PpngK%lw$+_s{nmcz>pW3#)-L>|>yF(2>VXA2G#s_gSmR zOVu@$%4bmD`V^PGJb{n@%T0Xsw>8u^%tdicYhcsEI^Nxxl)KviNM<^5t%@9FQYfZ# zbz`X|asQfVr?y<6VHxa0@Vs%w%B0#`vDc-O8vqXw-_f<cl*qJYXo=!qHOXZ}3Y)4N zO(zwxe5>T^#4s8J78tN`=)4a5*-JK5V0wsZ^aiOR7e+`D{6a$_m`woeK7t*N@S%s3 zewXewr4tV0^tU8RBsU75t3;V(Q)c(uwaB$sleNp({-w1*mG}|%|6;z0%Mt=;Hubw` z@Ov2}EWc2XT7c9cGQysrpKdqqV`=IOTs!d*PW}D@&i-K;&06~U>JW+SVpYY~1IZM< zVE|}xR4Bmq3gCXzlG(m^ZyhUQ;)d-Z42>Va@Z^{n3su!>k+ByV0FIM~t#=;LB#|sT zG~6m`@*t6b`vN1f-7S^Lupw{B=4pi%hJ=B6^AUd5mnh{Q*x^VBe4L$-1?L$ZJA5a0 z{yn))d46JzKU>1-XJRgNP}%(J)M6VS%rx=-bQ52Re{@IIZxF`W?9Jq}a<BiPLk&eN z7s=pxtZA(<g0+Ih``-xM|1rM&n`1ct;Vjk{v+eBTB;!8{d*VcUr&P`o1F?lwv7}j; zf>wyNdEoT#r!h2f5pVzc6%0&P#R7X*!U2<Fg?W17D?3L+Ik_Z~P57~W*KJ2uMKaS2 zFtrsZx>}Z;5z3{qKT`D-d5b28(Mf4>PQ&zE#d*XNxzgPmb3k!1cuvRl-V|v6uB=nG z@ns{Q&&BKiR!{)asi+cEUx#5rlP{33(MO7o`>Tvr>X4Ge{zn%@sb5C>`f1!ce_3?S zTmtX=MNbd{7cGHVf>uurZ|~L0t9Exxv}CucmVPW2b1QT%qq47pL7(}T6}eaw0@rAl z)b&G66&&T^fCmjL(wM%Q)=5D*aCbAnaaVi#_r(}^Z^T!vS=pg&#L%}omNUS#y>&C3 z0r`OElFO4zw&KQi@^dr2kl0TCrmW4&qU>4b_pKb?$Z<s=|DX{jZ|dMsK+fv<2+?in z3H?WbFFHi5u5yH;dt1DnPesRkA~CSbqDxXvU)2oAXEUH(AM@{)-ZKD5r`T?Wom9aL zW)CeP@{gm%j7=Pp*S#Vy-oJC3vs}6*+JVImnex9I8zGikO<a}D<!56B{K>u|+EEcd z@`@;CW>FZY8Q~U9$R(Fto=)uUWm0rf2s0++AK)_;=Wi*+&%{4g@if|+&)-`0mIx~O zyj&i0=<TK$Es7&_K|G^R5EYK0IK0teMg>hx^ScYFejg>h3W>)m=!KZSzl_RofYBpB zbwbqtP(xxi!=jbOB~&mf_baMn6AxW$WpkEt)${;S3Y<WTpju24RMD(JHWr!ZvxY)A zOG3kjFl2z^dkUuQtLLU=VLP>l&n1^!wo5iyNwF}R!#AEk<Nxb|GGAS9D?Wdg_kFcM za-RTevM_^4cc)^Qpy0cSn#vXbBSq_lm{h-_E7<I(K<IyP8HMUuG@=hNJ@*-|pIXGN zlfd#_D*iIk)C{AOdP{mZCa$Kmh4e#gt^g}jKx4Im;h_loUJ5ZZT0{^`ptfF7O&i#0 z(DhozEzR=*9w1r9w;0-k$flrgMw)}3NrEgJWcNB&36L|u%h15aahfC;#fH)~uN257 zmu-^m;uyr5cGK$$Sh587Zc^Ld#7Cn1&#tsFC5pe<jxxN{w!YuVmH*?4;{=K~hArls zbtr22fss{=>^m+4`abS{`vt!G+Z#CfcM<NK2I_0N6)+U1nxRkZy^-!szWkIMAQGkC z7E4T&|6P5o-)m#Ad<hc=V(fppAn}=faQ$DZV7B9Ejh5@6hYv5(60an?&o{#slUJM} zfj~iy^h9n86v-q(G7SG<q@XHhY)3)m$(T5Rn=AiZa@kRArH9F=*|tuYTSH=>Q%fyP z={wg_A%IqB!fakg!;hp5bS{r6Rxdav(ZZ#(Shy*h;AdEw`v{jmyMkl?Ex_Fi>3jTQ zTUDFI);sDw>1{8Vnuc`2p`i+9=fJi35Ki0@#lImJsD$$1K2%30Q5qOl?+IF-N(R(a z!8udlV~FFV{od7Dp@SmxzAawIs%lTG8wN4yxR&Wm$54Rf4X`1BxT_z1&Lo)2UX%_a z+pIBL({I-cWl>Nzw(tFRHNeTmmTKg~<Fds3!=@o)@budBTqifOpG@pF<fzuZapWn! znZZ#q{!JllAIH?S4{+h5(>VDLo49g}?<v9X(~5qHO^(3sKFfzlZyNwffGg>|1a)EN z??{Yhx`j|K>iCfo_8%>xS{gt*7(sJO*Q~i7{ZrjJFkdr|H_VnnF#C+7mHtvQ5=0=< ziAZ7z@MQzCi`gmxD?}=TxRaJ44-4e7*Cft#Xf*ZBy8C8kAuP+9x*&?4Nq&U;KNYY4 z^l}S##2^Smq@)jy)79)Lhy5S-GRWX*wpg;tGKOCrjxjQFSCsqLqWr(WvHy7rpa1t6 zrTn#?(Hu1Tz1hZfJt@6y0A#6x3nfP`8WKomd0Mb)(MY2Q0*oAp;FhXr*C)_!Ry9?y zYxP=g06gAGNfVT~?|7O<*b|q9?Pb|he5xK|x}p2jTUt`)2C(^1F;fmuQ2pjjqTpU0 z)LizgsJ6-mRpTw!L0}wuvT)9bA<fMGV++~<I3`~IdHH*#9x3KW*d#x*fU*WaE>9$? zSTYTD7MA3nQ&^h$1Q$L&Da!v2uAgiqdZt)$l=Db}pdMHLK))oyDg3OUll-zo3>!-g zF$gxq5NM0yACMRBgI}6Nq3CJ1mZ1PAn<$$b0*@MMbT+DS44a_llhtUzmOQ}T^@~kS zO-dM(Wyv%I27M>#T4vep!UPq_8w};rf0Bj!?V+mly4Jyxtdkp?ZPl?)LH(lmzm}Lk z>-_IXoGord3Fo%!Ife-^PxN~VNg^-0aU8u7pBE{>=IT}4{pK^A|L_x>`Q1faKDOGy z>PG`WaRl@R)8C_{e=_0YDBE^Xr=js8O<!$dX=)3kbDB6Zf{DWeC{+g#v<rqR*fbgH zY>%GHLxvh%O@$~4C#`re1YlY^cFANxW+~IFA$uU33snnF$A__WDT+J$(&t7%F8#D% zQfS`LW@m`9D65Sam)6?K(`WOZ4+Qf6T4Me;H$qkR7uem&@I15Quk8nsEB`0G8XZ)> zTKSg;8)A{&lJM~<ocir2_~Nfl;nEjb<)7-5D2RLA^S9EQRRB9lWccf78kYxLrQDk} zef92syNuU=auI`r<2bnA6HnDabL$O31&V?O5Ita(ZKP^%a(V1kWJM(|IlAVUo;*GJ zHSzq{WU<W1W;JW5gh@rZ-j4Cwpoj62i(wh|K`{o3zO(IvyEnG{!sOD6Yr}GCc=iud zNkhZAC0o>nDyIz<qaWM#GRyy@9Jj@AM%!4$0`)5%fP!n*hBlb<B>$%pgSW8WpJUu2 z(_b5d!?)#`6PO+R0!z~umCmqIs(NB1cxY@z3i|IO=^q22dkw~2%VTKdIu0KVaTqPE zpp4n}h!_Zmb)dQ!D-<B=;KIvw&XWu{dBz<lEr-p(1mp`iyWA4xuRE2!Hss^YArJ42 z6x1<V$~KbMwp?Jk*=eW8Nt@5??P1PkH?IL?x;B~yS&F~kb&^=Uo#S;;?kwZGuo5WG z|E4Lcy<gL}Iw8P(fJzqR8i@1x|J^Q+9#D4ci)EJy0~f8j!1~oi6mbp%cpqa&kD)w# zv-6#?WkTsY=|2O2bc})6)+GKhW#}kX0#qt;0oyl72OyVnLXZME3O*dURgE8Lq^mg+ zA=ficBvChKfYsJs!X|_{K?D|>EnHj;a6|x_AC4BV*o@SBX#|XyoFu6>{Rk(ypN9l; z+3jK-d{6QCJRmkN4{Qje&(PS3Ma|@QMvP-7&@xOGoA%7g<<ESuZOxI(cam6n{$%;1 zedf9m3Wa5O-bK+1$5F$VXti#jP|@w@TXpKkP<2&`<EWR*{T?L!%Z8_2QOyldu7(&K z(G9fQ<#j~m2>zgh(qK^xfl-9bK}2oiV!CXhWvc^nc|x&aN@n=m4Cm17Ua@#RWGq{h zTiNeaSYS(byEXZnP-xRI2US^J;HCA@Zl+qGn?oRTlS?k&n`AlqlLR6sZP=5o=jZ&~ zlKDMdi*S8C#5sZbPb}%oei{MS)&teqoanMHG&5Abo^HpS&+lg-q<~k*f8;9IpUHof zfkli=oIz#iV{A1(#f|IV;=)HUt{n%K?l}mWC4FgCco@A%_4_F4V>;Y8y%PozmZpIF zSApe)7{#$gOun&-p)$48KGaqZDuN(I73>Fwh$}Y$zT@a8NlMwMib=DS{Z3T}uwOZu z1XZ3upj!?P6&#fP?b}{LD~z;uI{UG?<nn#Z?If$;%*V(~L~n;QV$x>Q<7aIDvpMbc ze`y-{u+_E>E1Q~r19v46G~{*t&){-d$BwYSC!t>&0BsD9pU33zZv_<iJ+2(TfRFxD zfY1L2aQm!y|24aDWoZ8T?<(}E0brqM0pkj#NQDDhEg#EsK4$NRD3691J3NQ#1eex` zxTYiWS~=L$Q8gG!98Pna>zAjz3f42SyaAd!z)`G$TM`0Tka*{9@r+nC(2Ba6p&0Kc zjP!=+ySjGT9?5>0OD^A|WKpi{d`#N(Mw%J3F5$*GMVB4m^s>(IXI(!_`)<l(8w`Q* zv&7i-eK!f6IZj^J|BS>Ap{t;OM4sk=@tOkhUqyBBGr5Yt!}OJt`0DRMeEgr~g54}4 zY&i<@FP0;n%+b44zmJmsZiwT0`bepQT{OkrtZhK`4{)7L42=aCo{UhcRK-x3M03ki zP!G`n$7va+?Oe}%2T{-{Z0VEUCbQfD^nli7$eVJXEP^uv58RWDljVcUO$iOii`kX1 zQb-X5o6D;V1pP7SSf+V+AeUz#JJs-06tth2i*`QJ+h-CVYxf!3|4JZ!cI*3ksjWPI zCjPC~O_HBk9Im19b@EC3j737ZjvFY&-<JJ8l<mA!sbggS1q_aVh{omzxO(CYzWVzH zPW%Hfb%Spznm31vTSk%n^kx2^l76iM(88L{6n_qq$M2p2)@Ol@*;N$$FYxZ4)?{M1 zsBesmvGBT5{+cg12j8B7#704*yC=EtB!94f0Le~fWOF1D%4pHSk*bGxM+*4ySOGtk z<88;sXcx6`l!0O`kAVFWC*MeOc^2~*X$?O`vGB$Q?$5|-)AIJW6@~8=F#>K0^v`5h zmE*$vWYexU*?CQljIA!qcbjJ@rge$>kM;g6`*Xe97$|)#+Tfosb?q!Z`R{8u@plsQ zpRw<1!Cr=-)z`|O(*G@SW1|U5)mW5#ES4arMM<nb7n{owDnm^<R#2=K;1x&Un?sRA zv^8p=iGpl(K(1E4qa?M_WHS?2$~8MFJDW9Rv)mLTU{Q`4@%~v6)g(F)>BK=M4Yot* za6xPm4ZReKRf$(7oT@JW4&R+iE)SAzHT*Eie3?1sn+$(;=wn9zQl?=K6a3h;=ad++ zX9f1Zx!%UcmTuP@Y6c+PxX06Me$E5tX)fRC66(D=X03ndD~P37X`?)NL-fEgxfp-I zy{pG?>bL9o;%|V3yY%{f^}gzGq^W*`zE}Q~{x<-WI64%d7&zK?UB}p3jj%os)Yh9Q zR2rB#(!j`MEJ3*uG}gydvWSWq`E9ukO@2VGL!QwkNqA9Ahro_jfzT*vU5+*O8K^}9 zpK4~oX$cXKP>4ci!BV#?=A`crO~V!a`3}1C5p&twl5L*D?Vj_6y)A5$9!Ej++vo14 zDE_;m*y-t?5M}@Qd{c4uGtuvxRZZPX&tH-GWSeL>P6slT$N8VbC3W1kx(!<%S`8h} z9o~NxgTwEm(fU0uA3KRJ{>P$*{V$s<YC8N;PcQ@=_6ODPqolt>0GT<VVn7xWa=jqI z-0ocx4YR=Oe+MJ`+Nk`ZCFc2{DE)C&BB&TVSUU<kQF3_}S0o7wWFDm3Ug#tR+7!>} zx*XR;@l(-{7hSwQ<g2j2&&LZY+3M9n4-+L%Z`2tkK}#ZJK1$!_Vb)yGF~!n+k=Q8w z%;exa^0Hk*;<QCC34G3q$A3|b02-#`x~Pfu5X5QEjJV)#`@+1Q|2bb$*7?)gcT7#D z=PyV+|7(H$e~;;#$ME$(E#b5ODq-LS`<_6-G1Lhp2C_AtdqDOG0+10}cnk;7Dh%5^ z|Dx&|Sl^`QzYgDTp*&E=z{mh917l(URK$27ZKP-1fxv_W^2ESrD7J=Lbx32SfUN+a z14Zg>@}ajhU%;9?NYWJEXVM@&ttAN;FafKftO_Ry4Rmk`xM`)8?PbuBZJiqjeJgf5 zj~`LHpRM2b%nIKS1C(r*Y{SdsK0^D1_?g+y`((GgE6+7q($|g?>(k40`%_7Nc>wV_ zio<<56xiNV`#S6W%LBl`=#1?5#|7nmA2-i`j?=%L!%6Y{7jE-Pl+`q#J}8z=FPZ*_ z{j;+741ff44m25rmPlEH3wH%`-jFcBL<0w3YhZA|6FhJdTWeLBRJ!9JOGs=B$$U9K zbIE31haEkLk+@aN(y0X`Rta%^Bg9qHEp1s0gqmqZ%sB0U*G0i<FLs=U2eLKX*(s7= z*#4VS`ZiX`Q;3vHBGJn`Ty%z?u5W0i&klX8<Nu6M|Dsm>tX5f-c^8Kn7EIF=%d!F5 zIhOq$xjf@btg`(bBD)3c#m7|s^B5WV2toK;TsiS2KK-xvaQy#{Fny)-y)fPVqW&%S zdywow10Xil0jAVXS$-y<ytN9fOb0S?HZXQ*1C=qZ;4xX<2So7~6nYRxhASXxBb@7s zXM1%z;-V^SY7?e>%_G1)mMnrBq!-=_6q(ShAOIUdtR81MAz1~PIG8f2ISI`wKeNzP z!|i3zfn54aGEMZ7>z#P!rVxemf|V$-=?B)32MFm?$rI)$W8d)w-K>ZF{ZlOG6XdCB z@P04DbK!VS5^L&ijgiYU7qbV8=O4#9;g1=c#d1?T`>&Pqzkm5-ocQ~j_~O3@SiF}8 z3hDW)ys$v)ggtnL_MicfJ$upRegUdPgc+mU{~MbU4%lc3?7yWTrJ->bBl`+6S;pkC zGMZbC+9f=XR%go)*5`WTIf#v;a*}$6L%=a@P-E-HYgZmytP+qXm>jqu8#5CHX&5k3 z>#lfd^8(Lq29YuX%ATfL#SV4cIupon3&dI>B;K3(U3s`*cgRk#ezsme=}`gWlq;g0 z?MGWKHbY4C=C28&bZ(gnUn_kc^!{1HPb6SYqJ<GlP{Pbaa2!*4lFre5UVIP2{aGda zvChBcNQ}@?9R9=m)=?cfDX{-XxO(C<ocM>!IQ82Av#Q6BuIy4Iab;b98SRaPznx@{ zBmq7^wB@&b0^B+Wtj=v<eesG|k{;guvlhx_!I!;1MHm*%@}}u;D+6+Q4w8jT!)^`% z$JA0MirkS+JW}ymc2=X3uL@$ow!`}?E?$vn&f7yi-WvAt_HaRQ3{(o+x9P|hBA9M& z{MRwT;w<D7=R5<uXOf`PIEyoLh1V`J7s}rOuVYs}a!)X+j|!e4B_{Mu)dH-rBvlMd zmiyJsp~UM97f}=tkZC}gd;8zp)z_vNoj7LhyPoXTrBiZ2evhfEU*Pk<zKO5@UM}XG zeUIMkx$ldQx7T|r?`;Dhj#4YWRCW|6XMICIw=xTydw&rVhrdx)<)JqR#9|!A(Bw}f zB;X?oTnQaiO#`7MrwF<6|LiYQ*WYT8Rc*GL40aT2l9fO<^qM75mnU!dt|AY*CkDX0 zpaOFZeH^X&m@EspQ*^~x5L7^1L{=FTRT858mWThKtmlaxeq%1r=lW;I*zIbw+jS=q zhIg4C(zZ0cDv310Y&}wplXo_?@@KUPoAWHHmb|t#rIXO~s!);14pa;?aUR=$0n<V6 zwXE@1u)i$W$}nSvf$Y&2u)g*=W^R0eb02&w$EqlQYrD(qhK%yBV=sIDR&wuEiAe+2 z@t|}aGbdnuzK+^P1BFTp6GtPAj(czmlVT_olm+P~JOP2`o6f@l-^0~PVOEuB6{jVI z+3qQ3XKq9^3StQlM5^f!y*=`?UzN@No`eW!5b!zf_lyfy3(g~dfNjqjWOxQNa^P%> z`Q{;m$CFI^u5FOMrie(#IyQr9jlo9^Y)uTqshU>sXAQ*9q&_y~(Q*B@niKbBJ}jyF z{V2`cOD3GN?f2%&|9h86!TwxkLEBS`oCd(~<Q9fTzDA?*5iWoEDZc#cZ*cOTmN0$Q zzE5xP4Ew5tzg+oK_BH~L2s40M>7Gp!KMJ+^fA^Av0~Qt$JLfTaAVl>SO_@Yu1o(fX zng>~)fOL}O^8Bw>QYp{@;pq-Szz)PfWDu-xg{qWGF1GUa>HQxSWZ<<yA8!nKcx#Ba zazs832rS@vU0-VN#+ec_I30xw*`I>#NO3L?k)+f<6GOM*mh6CbBl)r6=-erjpQ!Mv z#O&{F1-P<q4pQ{WJRtPH%tSsz(c7WK3+|3T&>DWZyfD#?eVDVQ8~e}!YssE`RxaZE zn7#hF#QQJev;Vd%A>7QnJgxMb^}g-w_cW3l0Er|W1O*GO5?*54NNpyrFNQe(;WUOO zWVfh0IP!K0Lu0_e@Ox-ChSAvald1yO3k{LPWB4VxJS(wIno9P{^ia3?1B8I1D7M*s zsLA6siTIF5fF9p`-BV?SY}Rsh%~yE?!=eNRe9cRsath3C#oYRjgP&!>1=f?zJe>UY z2c6U7&Y<smqQy_}!uT;hBa7;I&f}jHmz|2w+X|2<y-%))HL>fLn_&{?r{cf487MTM zMo&M8Q;WhFkD3d>5CUa-P2}GG3zJwThjz%gF9$(UDgROx7#d%a3-%2*mOjPQwa*po zfBu8H4&`5}YQFJi%}EI0a#4~S0NbWo%zgpUHbRJd-vS@i=dnC>0ss2{6XJ(|v5ukY z8rJbEY_5zb>r&ATqpgt1IO!^t%lC2F%s-*im5dd4bqI7j{qzQ*VL=91@6D=#K~ea_ z5&{@0=-h#Qf&?&EU{c+8F;UdFlO?hbx}7M&10>3X2%=2f_`&RiPNMvsE`Xz3vR?C} z#Cejje2f=7O0nB(l1<;-`8i{}#VK>6`<OqLHTd(5P?15AtcPu-7x;HW8+MCLeQik^ z#e+$G{JU-yznd8ytME+{Xa{9)?l->Z<;^;Omhn{3YU<GI(D*V&hCf5C{t<4U{TiSD z^>r}-mN9p$^W9_+W1d#L$20zRklX;+Hq|0MVJIFOb<2)#k$}0I5x%a?VtAs7(fu{N z^iBxJE2BK{3xvUt;Rz@q1tfExfba9tnSXXn$}=veV-oyqRuH!YdWx+3UaUvSPVa~Y z8kS3csOsUMpaF*}ax02|f7#rZgJA+12!jPC4<hN~uDM{GZC<VK>hFG<b9$`TJtKM4 zFMO=(hi#>Bk9Xeoe3h{jW#jB|!rVyR&4fNe`!hA|-7}ewxATq2{H^aViZKv|aaSzg z+!Q)<cC+)x&W&7l#j+O2KPp1gxNFbf^S9*w8BzWp;{N521fjiwum7>GlDDmtWbp<v zNwRrexpYWw06a{n1yqbFlM}Eq8{^bJFU!5l_{qO@@!C&gj2>8(N%jkDt{z2wLt}^q zRtqvQ5U$}E$PIxPbs3Q=Vz(<i5M;4=O8`K)S6;Lx`v!9dmYc3pG-IOWM+z)0^e`&- zM+GGqD>)b{xC%9(!9WCINbV2$I($Impdz<L&w1+K-tmJovXfUDcRknfnE5AufVq$j zon*fj=tL<xtlDlx{~c#J-yRrPpGsbP?YbO~S^K1Wrs7{~Yfqk~dTa7HA0rdws(Fl| zokq(*{86TS&r_2?U0*MA&WVwc=8Nav{)-g@`_t<W3#yB2Bv*%7{KNb1!z-Lpu>Y+y zUkc=ZL*o9O%HLIOMzJFmXfBE52EfB4l$}TQk?x8c-8wJW<GjHCix*HVui@Q4n?t!= zL(Tnnh=K!VSZ$4JcKgnafEOTHZ!X%YR@-V>&-7}KQ<9*7Br)PeuD2XayP+Z^D!Ogc z7FLrAQOQpV5^zY6f&=Q-Q%Hdg8z^Hz4jKx+_w*-`J&z8hzk{;R-j8=U=MH4SqThtQ zGeZ(*8Y$V2=nh*T?o8NwNG0AQg&x0!=#@ejMLyfm&^}@QxrQcmnyKsO2;&E)B7laR z()W=r^$ScHsJciUS%v8j>#p7J9=}{(=#sU!Q8GEm+v0k%*Ooq&o%Q#azIGB{{PkU& z`1^XM&fiQXao8C1&td<EN^Sr=bQ(s+T_R6FMJJNfH!Knm;oSS{m^ge9#Yz*0-YkkS zP?qq(A0dp6D4u{ID5n%;`QEZCE@{`_wv0?GFK3%asB#8XcTfovbd?uolgFwh6D|;i zf3U*<@HBEz)F?qk9Fr;;s6A~!c&7WDo4IdU<!nKNi}bMs$uK{DTcY5Oir0B=1DMUR zNXsG9a=kF~ci8ou0$d`k#OtQH)0WuWYsQmj41dlj|9NW!hyk!D2U_Ms?BKcC3u+p{ zc}@r76Lr<??=&BB*$tx2PhIC9`EY&K`9~7Jn?|AXHP+WZ!Yu3j-@l2oAH=54Uzhn+ zh8$DpALR*ukCxm3cwE_OGR@rvKL6`Tps2g}<^TQ}-u=@W#`n*o-uMeF&%G-asO<D5 z2?vy9@;ZU)RMkmDn#(Scv<6+n|2F$O@sxK`{u%AZjPiSOe~mQ6wMd}?3<vNi`)TC> zIp}#?B6o>G4_sAUpq}SzUCm%vHSejK$E%t5dk#8{2H5I{?`bK-+m(H2xb$0@EPUQF zdq%_gk=)mr`Ic3W5I-S(zOEH%51yaVFwdzFfQA0eE$jKw&cOOfO=vb2q4*n(>lhoh z?s!`Uf36*N-4cvVf(DUOX8XIUu}^6r#?bytC>KA&`sU}ja{MGt{nK56{$tGD%)A$t z*)_kkk14qU@VIlclPADQh$QY^lwE(G9Re?7bpJA{zgUIm`*IAz^Nwbk)aN8YyYtF! zPxk8m+q&DGF@tSF%Gjkyw<y-0dfHn))67tL{v{JS7%O^$4(OZ#{ypHEe1d|jatVf2 zK7r0N7?kJa<%tns+b7%mUV<7}biq94W*Xr*UF><8a}G_&oG^OQ4<U*T;gK$<49)Xa z=?BU4x)pOH)EW2d%)AeHtCcv3mKdvNPK8zGtENPcik@+QYt(e7WmsC~$RaMR(JwsY zqB`ki4D)QhUJ@Ozu}Lb5XoEey{hJc={|o{C9y2#j;p9Kh<Fo&Yt~&oXVffo|5$Cd# z<OaZFOTrTX!xO-|Qmxe27h5?05d{997mM{Yj=VF1;V~c4@E^<HucEnCl^B+5+6kMm zLi{+T;JLg&u?jnT-!Yhb_PIEt9OKaREl`Rl>g)q+r;#Z~To7%1uMjHbKA^mOS0xNu z<e+Mj2-(({h5`RBsxEe!?sl25f!BQ>UEu`R7zb_|TA*ksUMJrLJHhox&o8nDLYy{C zvVEE8#j^{eQu2wihl2Gt&11^*=WE1BU<syj`@>9vK{mFLkUO9Q+V?%jcHB)2gV<b% z4hF`&W`DO!dU+hj()&U&{LxA+S2t0bxGo03SJ+y9ANQ}F!rAxd#q+nypOpcj>gq=W zfQW0(@b^TLE1oAFF;|xd#wIBxZ6F66coq2Be{k^U|KB6{@n8H@0>i(->iWOO^7M~n zhb;<}CGRbUdZ$YAjdNt6R~Cq~J=|`0uxKY<*hCw3J!U_|#;$F9TH~cF2iN>vuzx#Q z#qVs_j~zO*vjnmGb=mg=S!Ttw)NZGUM>iQx9B1vD&QJi2iFT|L^4d{)O9MkC?%8&I zVY~w)P-d_@G7O#M;Ve(Uj){%Pm46RN5@pl<R2+8n^U&C&=O1G7&>4)4{0{ZjN4W6W z1$^>X3pn#WFn`0oKc)BOzRYsJZvK{B9x6Ek@TAho6CfifMkp;$#;oRUJNWt^1B_1I z$N2trK?0g^{W6L}zD&+H#7eCq4on_+ZhQ5_<?j09VM@ixzyi(=wQ<f4pKFz=Qj&aN zr;_DIkpa92P4_fp0Z!-Bj#xN69(5`^DfT?d+ZU2LKC$uK2~(8^>hS#=f|!0G%Ku+5 zb>+Bt{Vja`cfj&&!A=3?`ExJUj#w^FA$c>P?=*Te01AYySnIDUj8WeV(O8omz1c)u zSVv`l9YgyY;{A(tTOUAUeGp;0vx5l}1k={#xn<CUk_{2KUEa25`o!D&j=4|CHo)l! z6IkEKQV53Tv2dp&e((|O@b`m`2Yp8Lu*WjLBSL4$BSKf!U54v0lf<ZLcNwxs$H|US z7Qx6HD)og#$!t-bv*h4@*p}FR*kpKh9-{}&VsPvO*-Jmfl@q7%)!%R7>wf~KmFMrP zDL}}-P}1drIqd(`k|O}$MQC}ZS*Ph%cjE%EGB4KZ+9G~4@+p4sNAoBZR?+ZjtrlcA z8&?z8b#3e`GJtX(3g}Vk&NWMTARpqM$K7|bUbEBHV(6hB?+$qQ^AhJNU$;XiJ)39n zIAfbjKZ#@euzRrSP~1!7ctxD5Z&5A&PE3RkFm?SBKKrX0zWQ5w{`SoZDANglwLHP| zJ4$W<d>4tMv@Kk*qG>AY8&u*2EYC$a`+gfEuWX_)a2f|+^WhIyFj8vEw0~RPyANS& zNG3iRu8P_QP;Smn&E<0GwW;wKuSqVjyHhE@)5W&uJo<AUQ?`-yJVi}>{Lts(9Y1p? z@}hkE-fK%DHnhH`9K|b248OREcydX$z^iae$FSP?6!SMv<J|kPiuo_k7WFDY3zeZr zdHgI7%sv0_EO`jvnMkI#Dr{S@GD2-R#=0N@wKbXK1FIN+V-1t#6%3VY@G35X=71a( z1Z^aUfa|qP3G);5M9ZazXHIhGVHY}n$eZIGj)#3({J{4-?EB-LUmHLCx9(VBnQQ&M zBznp)%;~tHBKA@HU8wiFlI(|r<Cic}{u0IVhuH8w$E7d6#j*dZg_9EVzkfM9nIl06 zV)foISN_jJas=R6&GB{%$s~1su~JQ9%KZxt*5+jQEN^1$t*<e3WCj7|vAMR1#+ob$ z=f^UsN0OB1v~NI87PL2JPI4!H>Nh{}ley&beThwWaW(G4#1E6l7X@qL99=@>A4fd= zxq$npFf)B0C;t%R%l`~<o@}8_AbYB~MP!Vs=T_u1lpFzg)}nX<26Td8*yc<xqO}z% zqWR(=u-RJ2-AgsxJKIKMy@BC<4U8U&P^wlWBp|P?%LkA%KovX3CM1xD1#-zHmtGO; z_1k()Ci=N@cq(ykaAFhX!Ru&joW|XY$8hVL6PTVmjp>DZxON;k_m9BrMd~KqS+z6} z>4d)kd70m{l^g+h=2M?&K*LVd5H_cK?h<g~KLMv@A~#m1QS?K+_v<N9{+Ds+^`FUW z{#2~tU&?zc@a3`;NE+k@rYEYS4hMNx!CZ35Wj70BMUmODVg>U@VL_Z5@#6zJM|D&y zXXSNY;@-+xod5V5E*+ajGnhkVjMY=XoPzzicQWBGk}#>Rn#vRYp1I@(z%!rziYGwd zcic#~v}6PG1rOI$(~7`M?rFr~3=Y3@A0r1BFuFewE7wP9@LhRsM7<&ieAA&OSNpl- zl1ncLcPx!8ho(KFqVz2jZ(fr<?h=~qPq8}x5w4&42H$=@hpS&@HM=iH0}Th+0ogw# zMqcOt{3H(nJlD}xJOO%9grVjMNbCK9jTNE=n+O_PC{;Evc3=$y0*|q0(E3INwXL#x zx$XX<!vS0kmQOA>3v$UNmlrLz^*ImMbn+9VQ#|+0y6k=KItC}NVs!Egxba80cky$a z`t7$k`A?$!PeAbiXi@CdiW`8*ex7Ogki-7ZO>zU^d9MpDgeWq9bWx*l;?G<ImZ$3| zRp)T<je8gyTR<d}e`{?3t@<#0x2Qq_2@?uQgB;76o*MwU<dVxS5F(vCRBgYb_Pn<2 zZ>`p*c>Px}y6+QIy??^u%*XiZ@2=pZ|Fn)vU&I;ZPqBMsB=3)P_%m1j&r@;(;JJ%! zbmD46pipv99%Qo%PbJ3i8m!KT0+qEfFt&oB(It$RBTQBuObo{u7?wy{!ILFXQkJn; z2lAPo?s1xP2IP`UE-y^tq;Z34bslR^#qrt5X9MG-vp6(z5&MR|LLvSHbJJho+$U4` z{BPR0reJ@%_^voVF3JN=ClAWw6sP9$T_raFzAv#Jyki3TQDBKIG%Bz#1FS9rrDhH9 z?O(^A99hQe<psFq4XhFoXbd52RxA;gsy1-kmP)kAIRkRZC716{Y?gnhY0O3Oi~pj$ zc}4PDSQSU+8@ydThM$)|#-ZZpf^?q62mkjx{^hTLOUIyJXhd<SIB|-W=F0#3k~|6U zds{LF&SEVq8(1*8#Wnq|+YIYVyzI)yz`#22X9s35^v<Fzj9c==eXK97Vsk4N2<>O^ zSxcBuxH%c#fLwCPC716@^xoqjZHz{zq!n$Vw)w4SmM?&V$56#tQR-7z__~c_|6TUD z)9EJ^{74b{F!P^@(|MNv_bxdC@FIn^t%SbXZNg`yyDXr#5a7TlP%K2ax3Y@kr|Y<U zxhXh71Cxgv7~99iHh@;6fOf+Zqr%mwf~pp<?O3ejhCwd5<nmp`y5xFqQBFsk*7j5J z502I)gn1L~@Fb>heu;bMzQX$LvuLc|!Oim#KK>o>;qS%IiOZngapXPKA=3vSXZ3qg zk|O{wQdr*7th0wT7nZJd*^rwL#CX0w4K&0mo?V@RJK4t1|BorW`qpJsi@!v}{|l@y z{|wEo61<}REY~BqW~BRSD@s8RxdD(%F1dVnVXWVD@QcXhPq^Mwo;&ONUB8La;CYnY zPq7r7!u@mCaQ2^P@WJ8|4vI5VmObi@fSDUg(d!r{_dM=>d5PZ(mD~V$krF1H*1GPM zj(jAR_4#Wq&R<clPz%O!XD~cIgIC_YFIMvsN`f4eDz1bO-j>BTWJoeRlZdnDhc%a6 za(SlWCY?$ZyI(;xN71tLZJ<!Til8mZzxfB;`}Q1e9ACh>_jSngf_j&yJ6?%{;)x-l zT1Crqt>&H|*cUB%2w*n|7geFC<7h!h>MY9{V4yeozp*Y0rcskv*@lD-HZgu^9pe+5 z7#J3>zgUumSkXy1Z4Ilb#zHR5>+Y`XIVzA#F1b8NQn;TXMLH&QE>!FDKvy$S@ehoy zU~KFfhDVRVEq;u-JD=jhN9S?!pB8ZO6JTrAejfKRUxf^q=vOQmcEG&6Z#PJ80PGft z4QBx1wVgNvw$^lKtlDY~!;>>O{MJ2;6c-ioX01^{t2QENLP=TOj!7<b99v}TAa5{~ zOD?%QiO>LW940LLh{H?|XJ-Rmf#Jx{QNllCqy7=jfAB3n{{OFw0RXHoWj`gY?dJ!m zMCd3__}e9t8vwgSxFA%sEYZ)trx^rG6*j_f(QXlfD~J{DVRa_N;6#9dkrmX#70ld; zFn@=kgtl1aF{;C^APGgZ14m#v%NgKin1piffLwCPrCYN5f}<dR#`zT;IotMDBUA>( zt&i_xb?zJ4b53Gq`E#soeTjP)@8R_C1AP4t%xPj$lBeD?IO=E;Gu0QsU<+}s{CAP$ zIRLv+>>^Q!K=P<Y1SAT8E5~J_)fk7HLw)0vDE(Eu_vaTee&kJzjJ|`d=8v$s{u&w^ zzJlu{LZHG6jKL`;LG>jz%#a%bx#Y5U#dzqBNyVqPAGr$hXN;b0&MSivM)u#pK<PXd zo0oC-+Z*`yv)ibx-$Z3-PL=T8J`c4w>AWSqr>Jmbm@EBVEV%)&+eDSc#JZ72JJ21q zx);yX6=3?BEVxbnbr(Yub8rja;>f$NVrcTG0{?HKP>c|kUXj}}TwZ3iCS9ZW&HY?* z$t4%HFJ$gB(T}X93XyDy6LDMil&{bVKf%J?v$%5X4!-=G4QwpwEWYw!ma<nH68yWd zWj;1n{<~H35I`@83JVnV5z93Tnnkg?dF}LKYt=)s)VIXTUlz!%hM}PbCiZP%eE%8- z#%gf9Ko(?4tZ`o~dskWbhL%vp_&TY#azr4PT>4i!*E{LO<A}|B^u9po-Y+%<Rh-56 zfm@i|cOC<SCs14Y5;snt!0A6+mSY3+x6|VNpj8xa-`7S%Db`g<d7Qr&BsTzhNi>t7 zx`*y0!L>PH?oNRA)&>q9nZ=v0+`&QIf$J=x=CmbbP(|1rSFl`UYj0JOPnab8XvvX* zTyp78NwfP^O@GXKeo_8`qxS_qOuxXpi}KJZ9PmHI0lY5{e1@y1&*6jrJcZByXHy}N z+dtRxnWU_zx$Jt$4S-$|6-P6RiprWjv;Cr@_yB^IqpoFb)xpL>OALT@9C~{SPIU_N zTbq~>!=PDrQ7Zc=50p`?6yXWJ=PIrsA9^0xoPb<%$)!KVb`jO<-H{D|ZFh+*ma5DZ z+LC?dCN|ekV{7$GIF--g7LQ|b@j6cY(>gx*F9GK7*u8?e0j7aZoIw<F&%c)>&jIK) zQN4s*&AaUt*f-l1W56+WwGrm;0_Q%}Nq?oGRV*)FlGt4vN8Ve)yT87Hef!^#E#NiO zqa(7&4=BSRFx7&5kLR)OH_G%F$V&%v$)z_X1NS?+#E6;w76GK<FIFN9jLf0x-k06u zCg$dDVCM7{+`DuYMehbCCRfnh(0j_<UHiFu&!O=UCrAQprC%<+Be?<4Yod^V(1rsd zwB0yEsu8Q@e(?lw_bO1Ag<IQL!}v?z;#dFYExi1r)9}Oq@bC*+uzxJb!H?xLUQW0J zw1j%Ii1QAEx#ZIOVhsR;@5}194m%BjpgALZ!3Fs43DMstQD47-8>bd=?0?p=e7~vq z`YVIL=9>LHt?9Yv)HgM6NuK53vyvMCy(-C~i*!$J@&?c<585u4XL)e3hw9k6xP|?% zZ{g)1FCYwN#DLhu)>0F`zk%^XOBfnIB%d`VXg~?AW>M39dRe0&XA;aMm)?->wQ3Z8 zOFvR5kj1Yd_WcUB)@Ctx>nf(NoyFkzSAr~_!R_;_xOE1&cTvB8Yu!Tr3>ikU&rtct z3N_4m{Ci$<1E6ojatB1&EZ=l9xGxL(*xvx>KM+W7^BcI%CSL!^HT=<kd<}<QeOt_g zpP(`IF19v?6;)@s%n*YPH>jT9^dMpzKg`jATyohx5@&98QZGYzaa>TIIz9ccu6l)` zB9Q**_(k#IzrphKHC+7sHg282C!YK*lm}N8g|Alr_Vdy%fRXX`^Rm9ak=y|23y}q> z<M^EmHY>|hz{Vm&0({AWDE3usE?vUmxAtTI%kRnJUq+!AqgZ@bo*T(1f4<u_A%QG$ zP_F!Q$z^wl<=L|yzikh$dx9{}H!cybUqoD_^8XCA&CfA?^$IS0w188;Z_0CR^>#x3 z?T#irnHJ-5_j9@Qxa3s;{U)jpfUiRW#j*pxq`mf_RglF?gU>R4MFQ`&<h3gT?QNh^ zZDMq?j)?;s7@pXKUv6nHA}oss;i@`e-Oz&@OG504JUoy~F5kCgJ${pYujqRnUDg-s z?tP>bFO}C(8J|Mwz-73Tr_m}L!@|@Txc0?aoc-+-&VSfKeakuwj_eU7dB3kJjEWV# zk0g#j?)mqd<OV=rN)isx34>v169z(LS8;O-n7&D5ppN0;CA{&&`*_*AjS6Pb@N1~o zNH{csu;nLR29+fI0VZKkKiGAfOD?%Qd&!`Db`7c;e53q>v?HkRHc>2GL239a6!0OM z_y9BEah&<>RUG?I%ee46U}bsd&yQ7>vEDnPFfZ@xQ^^g0eih3b5E;H8atAnW49{~^ zlOdY*^c30+4>LDHi3`?o^o@B`58TCy{5O5OiS;Fx`gkZ0lu)b|RoM{B1XXh(&YjqD z2xLnJbIB!_=O=cZW!9kMsRUr(4^Swxv@e8TSVq*kg01DRv0nci8>63L5hro|;v7!? zj|R^D6;Q7i)MwG#_vL*$%$L%SM^Uc$`&{xIfITB7vtQNv7hDx54A^B5+QPqj68Q9Q zfXk<v*jT%cwe=XIhu87WukPT$Yp<i?yo44Gp|)`V&CNq-H8gt|_aRb%s#v4q5wa*l z-hw!nT)vxhC-j;azcK9T?eo44_r)j;iUB_~C*J-v8u5KhUA%>BC$3;-`WjlpHxLZB zRp-$AvetDZP=B85GrQkt{6IG$%i;b#A-MstSA-iys5%VBqPQc&9gwc{`!|4p`LB9Y z*;o<iaNrhx_-|&g@8$D2`on`VQ{EH<;3r}<$Ptiu=&-IpG|`3Fe2JnNRS$Nv3g$*Y zF1b9ubSZyTg`?yAG2EmK*m~+L?+set$|^f22EcjLo$FYbp2eAuR&oC02DY}ED2-_c zU~A5P2WtZ*?%yDvf1G;zx$@sDk{bYfO3a24MtX%SG{A=n1#GSBBgy(*t>fnDI$rtl z3M#|5#Iu+|eQiyQhjk3?TgAx!*92~ylznN)Gy|!~CR9)jMU=1NWO)S4mnV`N1G(g~ zUAotZUME=^a3XDmLR(P0I=rGNaCbu#_#)QlZ)5h>H}d#7R7TDTQg<8IPD35603uY^ zTy@p01pmN#e#eVs&Bh6mkjtKv+yL0?l5z)7Y=a@a8!X)?ZvZfTRUT>IS6;%z%X9eg z|N0Fke{dL+?jd>gE7)qwvHFHQe^~Vp=SMKykcI{V{h4t#ewl{`a>+$YwtUyXYV`6W zUn6%+><hI)T__3M?=7M#kp4j7w!G>N7ArHDJ3EaFzn{U<-5D_qrr=6gVBwx#!&)p8 zV65+P&F8H@_PXQ-z+M)$u_WCEx6^txYrxg7fQz59{+G{B;pmU=W9VoBM}9Vp>ck-l zBD{;urJtf*mlwNCJ~}9`D<nM&bor3IlU4e;^3NrgRIFi4(Nx@yd59<-4eFR{G@eCc z^P(68XMls}B!Yhtt1C0Ob#Wahf7iyn3w%?c3<Y0~RxSG-A#53NnBL80?@Dd}<f26- z2r94LQC@o(xM($8)Kyr3J4K)lwgSEWb%?>q2JY-zM6kYvxUqqWLyI`__H7LBe@Q;$ zfV_81HlHyu48~QmA&~~h(?)^L7eLyExFc4O8wk1dqr_deNJ4U|@s^{gdvqM$c>5lk z^;DNps;;6~UKXf+4r}vMn7VomOEZ_@l&_#5NWkhsBx@2KZF<T1(QaxA-(opbiGB?I zMJCBF&Xs>IxdD)il_W_}HVJM%k*y!>;tq%;?0EAyusX%CK!n!TG)5;k@r(a(9s6IN zz_1_y9$v>r<p*fh-;>Se9WemLb;F^8@nqD;MPg_K@^`F=g?PkqjuPb3m#eGepwY_? zdOX6AN?(`bsdY!?+_oJ*SLCrPC{-?E7?%+gZep=9i|Z$saOV9rtSqjhG!QAcfBBwX zo2i)gd>~7xd}kOZxdeGxUoJ*+10WYIX>+0E5fzKH$$XCS(xb@1!VL#=*X%CRkmqU` z8lA<<KLjd6Rq;07z`DSa?e>~%P&JgsUX#~M%9|^uI)L+zs6a9Gf^3K~mt6WzI`duZ zT(@Pp`Y98JBO>NDWKArh-MWRX`E%G<IfKoybBKc*;^o)G007SZi$M-d*nm6$<oR%2 z!weW(Bg2&S<sN@7+a)&ua(S?*ZHqBT&rzWP#wFVl7N8N3q63lIWNv>8i9rH)F4Pb- zuOo;9Oun^*w|{d3hYuV@8As5TBWxU!P3k52s9}{bDA5B66X;SV*EL-TRgR!3DTMi| zZOA}wE#$JBq??{MPNpc!_Q2|xNGoF=oadz4tqie-pDz-KKb(SBo<#vOVpdOMYHA8s zPv6ASwcGHV+Y;BWV^NT|JKv@#nk59{nxyjgi@FR~F#;0O3-hYJTplR70g%gsMS14T zJK{#tHl9UfA%f0rW#KMx;vZ$d5v5*RX`nKC8$bMi-N)#U&fwsYG1;PC76ag2F(7^- z2E|X|_;1OEH=II}k=aarWmKD86K${-hu|)uxVyU*C{~JVk>c*I#ibN?D^e`DJH?8- zySuyOrtf#xT{nM{well*=FIGwJ#vOe|FtjHS`srE&?jH{;JjGR_)ak4UMk&?)$QkF zHk<3uQbDamS2uN>J8gDAM^e3$^cws3?}h4_&rPBBkm{HxD>(JJ%anlIz7zMQZ^E%0 z`MNQDkM#UAIm1-Y=-kP(&U8qetFVgx`kExENy<3)DU>m6?c`xgr#<$#I3T5CP0Y*( zy?6H6V#Tn3?k3&F>zMA#z6vRS_~wu*sv^!NuKZSgqWW}x$>=+&7I=m+9*R2mgidF> zKs|%O$b%<cs?P#p)KsC^!>*s?Y?>*_ymZfafejfYU|u$FXTth=`a0{BO^<zchX>t6 z!<Nw7iWd13s+CTzUJPe5MeU_itvLnw^*FhuvcYzbKdJ`fIm6g;Pyo0xHRgQS{#9<s z3p%{<a_MqBEc(L$!Aot0|H7DoI9F+6@(pgZLU3#JWZ<|nwQC&WgcW8$CX4&53SDWl zH%D2g5l3P5MLoiJL>T;IA~6H67`D`l#-P+s#XVz7Nb1M%b?W2liBEN9xu*Vu4??dl zSa-Ce;b@*JQb*`MFkS3znt&uzT$<vIXs_DCAGj}?-W#J9RRUd&#>Ez#7kqsodz60? zn8sKWYPWdaD954GYyBaQvzpcY!P!#+8bRn~t6=en)8Vl*3z`#f&j*x2U{@Zru9Hwa zA}W$xo7-6;+X6;+k<mLEFy628!JBX3+VHIP>>VwKFY7uW%l4@eVZ(Qw(#0tqz<;4i zJZaqh8l;z9?4nupXU`w)n(@oXQukf*tZ&fpz!-9R#j^$U!g@<a=T0Xy-CM!bW|0`@ z^YQJQbE}%71ud$cuGF`e+=|vGgk_HBdN!Adzu3=Ck9JT8*(^j{jpP$4+ckaDQ_&KY zJ47X;=E*|8s6rCfbgc-7->DZrKbEIu@B_04HuK8&Q-?G5^O``k)mK;pF7%oAe-?=n zG01;9^inLvM3Tgg*}2(ZgFa+{k=6LLKVQF3!rcp%U~$_zxp5cp|I+VkBjke}7O9wy zyx)4%qgff%*hw8{Kd8WqaJM9NfcR(Kpyy@Ql1aZMs>u_7c2m%zzR2P6A+kJhOzU+H z88V^HF}DpRLXWW@X))imcxom}zCzPY|H(S$hj!u)D1;h!@nd2k?pX=zCsSJ>-#v`O z^$yWeMxc!iW9q|@`iqALX3~8qd$=Qx9Iu`LDzA^6N?;0thA-ji-f)meVq(}%Q`WnH zF=a&RY$Ap_u`s3+6gOmy9ht7R<nlZM_ZQnT6|Rvp`czTf%2KO4lNdYPiJuQ|zKN0d z@ZBw86RoW0Ie5M9$Qj?wR#FWHc>O!S7hZF-|D0DPSo+gnS|0d4%MTlEH?cScX9d-p zn%T>_Tr|ZT%F})fbN>8fLE%Z!OO-3lXjquK7~4d;eTR_BYx~>80fFunhu|sA#w`Ki z%TX9`)sN6|o13qYcN2$NMn_9pH5#^9fa#n*4Q=v9Rx>-zW~MsF8D-~+;A+Dso-bi= z+{?FfP_|%a;<|-C^t>fkf4Zc?5P#QSt?lI)dWp=6=6S9`c29dBUgeNb=LLP0C+#&t zc3A?va4L5^w^V-Jat=KylzEv$^Bz#E!5$cb4nbcd@?k++bLDUZwuY`R$Fgj%SsaeB zNk2FFSH(>AlhzgUOzP=|>ZbSqnPl|1#t*w#in}v$u=u>zuDn%da;1-bwTQjN9Ft$I zD(0+k&#!_Qm=bEHcrfQca^NJn+Cz}`P1<A7mZjBji}cLgPVtKFtM6<(#}N}}wR4}u z>6f=%m|PAh8_|iMXC0~?ro+=PeXswgzaPs^U#shulT)jMH>`v|c<X=!Sr%_1ad5V$ zJbOChzQylbiSF~0nSQS_o|5`E>+nFEG^4Z2{j1FXkkZfi@Vla#+HFqof`{NxS<4#y zh#%#|0rjE_qgN=8re;+&-Gt>=BKwyW*=nsn3ijwo(JjgbZ>1DS;NfQjY|{<yMK;6a zn46N24{d*fozSq1Iyob@|6;h<RLsRrWz8lL!wB=hRTsb*$$1$cn;kcAr4HLLD%nIE zGH&7ZT(D$rR1zdN{&8rFk>6|(gJ6x@Gi{ymX7Jt3E3WWimtb|~4bjLK5RKT+1U_-N zg$G%JDsm%C6%V+7KK4N)uieN0a5Izo>~3JI?#tgvoTBo0H=!6zc(nJU)SBqmdm+<p zmFROa<en(0LLix*W6eps)q$m{I-7hoW5B08p$Cq4w1)j%3nDo3aIoWem<S)V@6D!J zN<-meZI)4iQqT)q>Wc+IG)N&s<7b#z_qQdhe7u+)jdHi)$C$Jy@q%sKaK{PXl_f6% zg;q31G#yty`+NI+pz~GxQOaz?H2!rnR_saF9SFU_kZHAlaEBS^#XGf~a65fuxXg*G z;bxu-eyC@ai%Hti?CrtK)}cR7Zm*W)^>RB$A4&?S{#m*~xyv0)I44f=)45&aZx-T{ zU6Yz_JJ{amgYMOVetFXRSweO|<;H}d2{ecn2y{0f?``4)?e!86b%&oE7hE7?(Ok$N zxRBz97=3{bgU;xrx2sTsk<i!$QfIgxRZBRkN#`x%9==ir3He+^e;a_abN3ke;)^*J z2f93v1ouvSvhY+C((gIH*!4<*H)BAX+2t;~vYWcBj1X@^T{rB`ZH(kduKH}ym*ouY zmS!DpayOF}7UgS+&Z{=N%{oR=X=c)REH<WXNEmZftIA2Z+o?hMPx~B=d8O3ZCj5Ll z_t(sfo<eQ55WF01+28F^-;KLiVaWQQ7;QKJ-}`@&HZ%T0u>kFe5D0Jb#q_)ULH7uE z)zVw@NR~M2*GT}I;1DIU@`1hUt!eDs<qwC$&l=c`O9f=-UC7N8sn<}fS(`71IB$iM zdY?fi`xJ-0>-0OJJdfwwQE9H@>#HXCqiw=Rg0VtvcACE26;UcqD`Z^-#?pblc?iMQ z9q$s|Z4@O#aJ597&FI@0mfOpgTLC#(jYXK@A3U64sdH~wYiY=pABM^aj_7BMhD!wA z;My4O@BI~=OG0*pU^(n+Vb5NoeQM_lbFjv%M{onJ&}Q6;ES9IyH5r~M8=nmFp?3&J zTvAEG?rH!V7=qp<?l?1S9bVH7^J=I+YL*@5s>@=rs0@AA_BNu`*!mSMH0FS9Y8XJe zb|Y0#uTZJ;5^Z2FxJam@pOM&{p!&_2J3T_#d%6v5^cq<?>@Hk$FtghnN+J-llcIAG z=~@>=lw8cq_B;yGC`zUdsiPYojZ&q*UycgGWHK@}CQCXZ!aGMgav^E*=YRFWy0O6o zsCbuTmw(z}Omy7}2)eWFq5Q;Q_=EOlx2EjhNiOPRWmNfFU|(-9+{p0~Tbh2IwF%PP zd#xEVfM985;BkwHZ6$KU-xk@74LiKHmVi@K49oHbH2MWQ>9^+-g83e5_DC%7?h7cx z0b9OTOLDG!3#{^n(V@BJKaht<_K4mB!|V?3Oi8es|D;7Cx~P)?l<{~x0G}>ZJc&#w z{X)TU<X#HfAN41HnPi(h5VzTo9yX{sah$7C9UWM!(b-0F82%jB!(8x3il=jxJxhsF zp!-Tj40{P?0&m|uXEeRYN%B?^{m$c9NgT%trYt8mCMUH^Z>5?SSvZtkAi<S2yR7}T zZr~;8o^X_)_qbov`rl*wVwtxBdZ#LA#*0>98(hXGC%~U6YRFkv=VYJg(VWX&e3a=T zw>IJeCkxD?qZRWz9N=&Jg0Ds>Ro~in9kp=&`l-?g^-GB-a!CQT;r`H|oy=4&bP=YV z*|#Tc?h5VCn^#)V7>s*8-#mQ-Z!3ie>pWWZGDy)ydOQ0PT1PqO|3FxBFWMAv5=~7= z8O!D1kGkq0EU#eMnrlS!c}^pU9w5IP{)|OWL{F3!$w>n9w6!GFQ8oN=(AAHnRSQay zQr3PlH3ocsLIv^(NOi%Mx(OeX>P{tRne8!LjCLN}^})g2PwFg-IZGNDop<;=5D?X? zUXl#3bMZ%N`g4TxzFD9qYzOCKg--klu(>mPG(f`TLnTh!C1yOrs}4cWM0UB55R!eQ z-=Vg!`H1=;hZ!R5B+R^s*2h}CmL1{gv|eqMjjTc8GeG3zN~qcMq`3Rr8{u-Un)=9} zG%AC*>3SB~F2|s+f2*|XRe=tp{4aj_Uw5VgzPg~TL4k&bL9yTaT~vOQOn<<BhT@WH z0^XuZh(1^8uX<i8|2-YnuG#mNVV%Fs0q`__6rEk@pRvU@dd>rh2V740tiX)lxA6DP zI9ZKM<cuLPu;?8IUC>QGSm@AQR6&<OcEDZ4(^rvhf)}l~yU?BGL3uu!fge7%;V+{D zva{Qcp&hg0XSgCSu*DW~zi!T2^iWhcv=X`#;Ebh_eqs-AJ62I<zcT1a4|1}`jhgs6 zqv3Zh^;|;cdRA_s%tryWNz644RmZm3mQf|txul_TzpJ-T;^oP`KHbuSAtO6={$zhD z_+P|&llw;yCxlviqa}0PHGXJHVfc<jv$u~4-<p@Sd^|ETZS)GQZX_O=xFPx@m(dF~ zjbC#R<|kukPppci@IT?wldW)9ms|ju9fCw~(z1sZCamh4G3vwC7<#NaJC}jP@6v?+ zo-XY0r6j|>L-Ob|li~^33yY#2*(6#Kx&b5FDUuD<>Sx(b+NeJvX_639=|E$XFGJ2) zotATOOp3hK&7UPHsv@Z5*RQ431oJOUhyYkW@J+fREX!^G@>LeFHANo1dBTrj*<~ZJ z_@b}8%0PmO0Pl#G6Mfu#(pWLeu9WoC=e0FbJsv`FRocIWagI`_kR`TB(Wks+OjTN& z3|gl9*`NaE2>>Un*~xZh8F;5mCSd`ZeoT#FuFLb^+8NGMFavadf+^+N#2`j~VsfbP zNbf_aXLzHwT$9<Ia-l?8z1!PgwL5U0fTJY8!$5kXBwSV}X*^*fQ0U!7$$>5s)r5LX zp7opyTQ_%TbeSVYG7U}S2m;5wob&MqWJ8RPHU`@tkl7e1o#$uy=-mGBsjpRUwV&Ia zB(BYq+@%eSSZ7HcPUm6`l5x{LtW7qKj9>&at9GG%30uT!3~knRjToMH-1UI7zGe<w zA&v~1zf9k%kK&0NB47QI6IMb!U;Vr0DJt0YR*{j@xGDlzC2$)q_mdr<rF29DM-e&o zOUjqFVmZ!uhe$NV?<Wb&VBz?OF&?GGvoc{@wWL}8OW_nn&-|k)24sb5Y^z-ob0X45 zX-(>2cJItMG{q)5w4{rEa*SLG7`p*dabJ@!iKA6?{^BS?QDo6a%UV=O;R=z>DvUln zv5up@1zjdlWLmr6^Ms}3`&sW3=jsd!v}%^}6C$3dpb#2eRr2b~xy6n}$Is)dYyFOQ z=Ox>o9rNse*S*dbsbUd&QWk{TpC!IKK5=tdXKc04L&r^-k-9B{^O+<!J<A*8P$vrL z3l&!bTI`j>=6Nkd`#%iL>`!Bkc%Sany#JRWS!|Us8(Zi+CZ@Kt8lSDOaEgnIY9;>x zC+4EnYALKgEL>Hquu$&$)?N+IG(Iz72d0zWV>9d`#NXv*5%7VPzZ}rLB1keL{*6UV zB<9l1;Lhs2K5$nRC|nL2>sXU1*LS(tWLQKhJr6x0cY)Uj$8f}5C$9;hQ8V~n34%W~ zI<}P(9rKNG_}I(!8!OPC?-B}s)2O4o9V|;D#D3pbV?<l1CI0j^7aJu})Bb_r!4Ss+ zl+!kCz~cSoja(;LPRcaU@EHJo$w@0oRZ18IS(>o30pN+zB2<)Q(U6Idp<kiNeU$nP z0Kh{(!UGWBLErpI8G`}vL?d!i;$J+LPF^(=KFIxKjwW>`%B0@cR$mq76t2~T$M6W* zXq3DNCkFrr{oK!gQtIn}uw<isr_M=>M;8C9G|JTMDDBb>1H(KX_iK^Yms<-!pcn;a z8xtMIg@vkL^&L*)7Vm-R5{bCA8E^e+v1JZ_NbIeTS!MUK!26mnlxfTL-`$d<liRfX zy`#|sI$uNsI^RSCb0Ftk-K<>>i10TC$mF$_#I<Dv!`i4>^#`2w8}Hj<53l=OaBQvD z>?Yl$6b_hRd?h-tUMV*hZQlw6o=0?^`;PmskOmlV%g^UyoQH4!x*nTX+}lcgdjq-2 zMN-#4yDmMrGtHGYiw0N5+A=Zd3gQvRDIV6gfSsR7yl#E!@5<Yl4%dy83>Oh>r}42+ zcKDeWGv}P2D#w8h_!ek;;eyUj3Z{F=DfnHYZ~k4K5dQ$kIV36>!s~DgKEFM7fiMd{ z>oRRjiyAI$)i;Q$SB##sj@PZu`P4NO)7g%H**%|lV|gSHk=;)pD{yvx)}g>eglByh z_<{rv8@PcGL<)0PxNxVLPKxY??_pj&_kB6{*f$iOEmlU3pbHbe*^%PQHF^mt#?1U{ zzr}rElVYvDMFhsPDW$KS(}U;a$-;n}>dpb<^O68WRT?(e!**YBK5wtkWhp)Ce$dyw z-F>~fGU33kHMZbbtW@@;KCw0tx~%=F(wSpl$fhauIaAxjaJu@Q_*uS(qK^Sa6$|iU zAJ4bkaea=Z9>rn(#;cd=?<|RvYW6i8k*4QC5Uc*weeW3)FdJ8@b=BXQ<+^k_UiT1V zbv$DIY{LAO#DtWad3v=zPGX4pUT53;<pTn2pxA{kC49g?ZQ&x=&LM^8y(&JU``X^p zYq?VQEH1k>>`i0<92q<R$YOCDuogbI3J}NnnINlVL>8|ry}X0EhqD;QLgK3~5Wb7W zkCK2;h)u|q{7mv{tZHVu-n$yx5#~Cu-n;!Vq$uI^CqQxFg{7q5?Xb&wMjP(zwx<7h zWsxQ8L8iYeU9FRnQH*=M^?b#}Y*H)V<?3t0DReM=zZ{@`GM=*Ya@El+EX#V>S}jGu zJb6Za5W}fA;co7D?YZ76dNC|@dIL6Wi(ar7I;}kZ-5NK0pUnt8%ph}QO2EIv4C|H@ zUkPOgr~8o?-wOJ5xG7J?HEqDPE{^Zwm>IxcCHbz)tSWw*mSRZKMtxS{i;}O9jlGRD zY3{h-*9+b7ymOU@+1S<l%3r8;(bKVhL?4YIgz66GA`7#H$Nwtw-Gf^iQj3^2ZtZm9 zyf!fA`!UWe0-(<SCjBIo0M~N(0v6ned;>g<g}>;>dL=MjkksV1ozX~aR6g5)u!V#~ z;JSo69}Ui!vTN_kUNbwut{q<Ge~I>aA_AZ9_~#ue%N`BPB6^U4UFf1IunRSS+6s%D zhUYx&mJuvZd9b98xm(UTZTPZ+OBj+&EB#&yp~xHKz}8aH{Cjp)G14cEI<5!nKkHK~ zzn}#-&0zyFosE$7dc}EKp0O7VWKb;WYo-XgFpY2V>1Sz(D8iE?oct^2Oj%sh<HdMW z3RF7~vk^l8{{%`K!;z%PkKX=Vgfft#*%!h1=DHaImI1B~Lda`3;E+4qXmMPN3pqm^ zQ-g9HNQcsfuyf{iKJ1(6x4L?q)_S4sKb{Tp<P_7P9(%g^Cwui@D({i;f4XZ?9T+fL z?!A)}I}Sh${E^w##rNV#qy?h*ik18EP&2TiRx?juW9nsi-puP!AHBi+^TMqT@>}T5 z3vRK&SLdgW)>AOK`Cw4LqrB}y2EC6CQo#HJtXJ%{zSM7Z!V0?+Fv-L78Y?&+zy9^E zUWW=PeSX1(yzxT-C!*eK&`g^~+qlAMIw!(aNC(_qlaRtl3Mb;{x>lsnWqM!p1Fful zUJ$I2Rm6MIzu^mifmpx|gqL!{*Vypz!Hkdr(hs2qz7?+8J~@*)ytGaX-^ooiI>c+U z-yN)V-5@tT0`&YJun6Ceo(HZr2vD?;Swv33>YC*qbIx^0lpVsiRFYwF{3m3V{|UJm zm9Z`CZ<=Od{2AHiyUThf#9)bXFkhzi{q+=vb|7)qi;r|w6AJ2mV1=5>P1axluz6Gp zxynAC74FwH!6FFcKP)i+7bTj?zCHUh0obMOwO@b<w5?$gm*pywV_1uw18n{=C0sKj za3xNX%Xy*ruFDjvPIYmMh#+zf5E9pF%J_7e;`shSyDy$VXA@Wlc!Cmb0!9wg1@rCv zb!>Y)x1V2fEm5H9KcFqgf@d5^nxCR(pYpKp%VVw7{r05<?Hrs0xALqgdHT|Nd+@y% zd>rn28r`~1+**;y%*Km*$gu7)a^!jqy7Gm%=B@PHwmB$OU{|Og>gj?4NL}>HE402+ zvV4s7$e#Q;@w{WUADZ^}pfx^E@FP3_#~2#1#+<KiNx*8;akKZr;e&D*oVB(QAv2L= zN4HM!HX}+^&s?PT5y4kWNctHm)bW6bN0(uK2X7d?mv;${U0`jC>+9;@AAUWg+}Uae zJGmktR{#p5Ow<z)CmhoHBH8GmBc~Ajf7*`nKlqR<sO!{31e9AH(I2nOuLL-asVeOS zlvd`|mo1$0dHIW#gE`;P&~|Ma2CQmIy*q)eK*t6EYdqf%*}gxllOEHg9NGJhfTU7# zNW8x;*U3tCDe$Kh*5AnbE^1rxizs9AO3}5qcz8))JOr>x2?R)zi+_yu-=oxbcn8CO z*(_@sVoqWK9u%t@Yu4nyRHW4@E265Gd#R*T*ILxHDZ4e9U3zpNfhf+~wHcJ%s@w~0 zOB(XrJM(^?CuMK0PrTc+-e$A&BEQ$W2M+MY&RR=}lbUJnt*&5U?WPNT$>QKPGTh&Z zF4Lnzb$-g8;AyvWSF-^Et1^pe)B=W)w5S3|T@4b=1<_NTU`GYu?0ADddv_fw<)(~z zCv#Qpz@4g{+^_;0_QIE(o$iWdQXL#o^xn{4?#SnUvv9(Q_+u`<=sOJH*7rQ(Y)kYm zYRa!W`nEF=gHZoD9wBu^n17B}naGTbnRVm>ZIbueu)SlPB%>^;-Al3BaJ~A~@<64| zzwZ4>CJ^R=cH>~Y>w!(Gc%BkAH_B$I_o@ZD6(s|7!A#Xr{4zMVn__vNglTAs^Ta42 zmXhz&h8`1ah;oZNU~NF6Dk{mcQ0JdR;xD?<XN761P==iwg%{QjW(rRb=rvAITYXvP z&N>P+@IPZW+*-l_0xIv_=kLYs--7(E*yH%m)y5}@=l@y;Yf3lKv*j$_;j1?ZqK3a6 zTGuTRhAtD<j3gsp7?Zfy=U#i#lfLL!s0aoHyZJwo2|}X!FZG;^6fl~kDbG<PoZbXE zb&3$Tb+6isQ&&eWHpyQMVs}xS{FH|UL9i^Bk8neOn*xv4GirnC?4rqZz}5gUdpgO| zR+KN+j&D%Ey+JRD_%F)y;80PdYU3%Hw>=sV(8=hg?>zCo-r_g*EjiQuRp!mqw4cU( zt}tY-z48+~Yj$!=L-Xsg*4O7RU-wrA){Zf~?Ljs%CN2m5WL|@zQh*cJ>b64)-Gv6I z_W{G=t)WEWcrQnS?S}WU0DbwZOfa(5>vb1pannnU!c!>h^`PnHGv~KYrGzdited3E zq7TJRBJ#7a<DPK{jEc?35SE~=dm{!WzL<4^+ZBGJ)jY#gx{jEOlrhLkM{&ll09*bN zSK~kLUG454H+wJvjvfj#ctAki2p16c6d_(6Wkv5plUK^m>zwI(EfYUobD;;3SF4t# z1ADgayco8xc5@nf6ZFdyedm<5L~t^16pRc69Uij5vz@I6u!!)m-3fu1fPXQLdY(qj z74M(5W0%)-fXa6(5gwV%ju2{6*TAy{nX_j7Y)8Mya{DX>wc>H^D?N<!N4HHbU%W+K zCC^PS@5rk6Fajpzy2UVeh6oG%=<I7TY!v&Qvauc+Z~J))Z_@aA^Wt0<gt&fgQ@B7t zwo~6-<e<OW_w|Uk*5|tE?Nydz{h8@H6;;|CCNszS^0(Gx>g%L2iAQ`q*<H_9cwRn; zSw+j^=;K{0dB~l+QH$0Cb$g!<CaFN3nh*FWyi-Tv-ktQV_1<#2<_9O>#BW`9s?l9( zINA?E50<TPy$^NBG;sM9;kC%()ltq=Ox~0j8-||$oQWtEORh`d+YM4``CxM$MeY5C zkPhq|L5U#Bh5c7Q6HaI~f9aH!W3Zw;>L;vyy=m?Yo)-CQCQwld{-1_f|4+jn(%Hre zokCtzPA2M+^v=o<o)aBaI0{%B==IktJl}-s!n$^F76f443Es5W<396arLuy4UE}c+ zk~rGOQ;APLb;<14a)D?;G+_cXvcYTDCUsBj?{;qNbEFB*>n6_raJ4Rc^y#1U0Kst7 zA@66aq1zC3s;(MZmf<hB`7k2CRANDnMAT1pAsN>9-&^qzMK14KBWn~*weQz)9u;^_ z-0#h#pCyiSmo>g?m{V{{b+1?eR5Ek?oE7T4oulve`I_`8Q1??$ScfbPG2`oV*VjnC zN<D9Xp9C5igU0vj7Mu{qm=N>%Uo5`%<J$SKwKgolo<jy?AP@o=hZOYCQwAdr`Vrk0 z3jIhdXemT4DNV&pC?Y%;id{ao|HCdr+*qaM$jXfV$cGGSq{yWkV{%#Q>lpZe<*?Uj zMY9}GX1lG?GYQ`dXGH|!f%0JeSAT(+_%W}KcCAvdDl?qN6V9%KgojftimFmhduj#; z?QPa;DBC<bIE&|s0tazRIES=X0Uv`rNq%OSP(7Z^?3Z`t=unC*znfsic~vlb&3DbR zYFN0ALI=e7DzysCPV_QPL(0DF*M*CeerrHL2KId>xeR+PLOSdE+i9z2GRYrGYCKK) zqidB?7(9mhTi&tsTy_ziqsvRT=Nn^Jzn^{sOx<&03MG=$gWtD701d)t#o-_XSp0*y z2pqnge9qLbe!^6+b~5Xy^up`RuPntbBhd}!E{pU)IJH`hH5_pv=^6Bc`=OmJlHu>T zSU&gb4KrW;Q1sdh#@k+2I&Er?L$1-|%%orw3#D5ej`S-6<$Zcxi0Rhwf#OhDdsxDR z{TC5+Fd!Efa0O_7pRq>p8zlsou~uxsSMbtb@%D|0kgjCgH_66A2puj^svy|yYZ~F( z=#ON+PH*qE45q!7sK^UtdA#CC&~%>lGmtARv+gZd3uFuLU(ltATX!s61~(~sphDdd zkPtypv=-KwnP1|B_2EH2U|2{&hp#$QSt<V3NtU6G7FOx9aJ52T>@f9~p$XiF5JFH_ z)BP9D#csWs{Bl0w5l+!*(<Y|Rmw>-usb%Qk!yZ?lMfon-+LvT8Q7X_lc=s?V9-^bv zJv+m1GRM2@Y|yHK7zUl^aauHaUDmjn8|x<CUP8kwiM^DT&euUUtDrLjDl6%|TVtNS z+4JA@j%+<a=QbJLWsN!4_`Y3gtf05K&3Sd*?j${bbC2oKA`B?VQ9S7UUzyRk<O!@T zcn{oto4KviiZQZk#Li`S@?5rojrCwH>)5=F06snx_!>D4_V|iOLnKc!r3qqnE%Fp( ze{6S}!WtPN1_+tK=3?Mh6^x_%&qMp|S&8c65Mc~Z*>exyd7=z4i8*NwRDrKk3|`er zZ#y@OPS4-}mMeK%?U>Fnuzkony2&0;8?7Z<Hn^Pb?AYB+k{=Arp*qu|H4M!3cYElL zed8vTis~q|)d>d-)>uoTd%U6b+@S#hyi$Ml)3))W==IHGxwN<TB!l80@{W%@11~zn z61l%wv4E-@2+}-?Ma&TzyR@?dEkT9UlixV(KSRMjaN|(?e=ZS|m?TtjfQ}a2hDEd- zuI%77cp2xdQNntr6VIWhtGh-;r6z=OV9*iK;0?o^E&Hxj89u-q;rUyKr>NEQ!MVqR z@O_mpiBS!?%8sbSI^tb@SNdyi1=o=Y{~4vFYXsmR9TgD!=3Upd{S%-7d*L?*yTJjY zhF5h$p}(XAlhos3;Ez6w`e1*xc)JY|Ug<2Hi&?v>f;GL%_A12bJz&nI=P4p{u2uFp z&vU*p&%Uo8e;heKBp2AXUQt-@?A&~9C8VNJD?ABNCAGodor@82DN}y9=9LzGbnmfz z5+?wKON6MVG}yL?7T-J1<WRkS8?ski5(V?41PlSjO#wf8$E5&G6Og$?c+&*_P(g+0 zd;A3vIkwiC7Wnyd4kB6`eu<g<!h~r7UNAR1m8aFb3SkVZcG8-C=IftG6s%4oE`+AK zjp;XjUPzvmBF@Yb%o7l@^;7&`n0Eg^Ava+#{_avbZQ`C$81+kCdYvV5F=GtAE^=%= zD_MKb3g3bqxkL`ztDnos1akJ#w%e~q9J-8+sp<F(Bz(&}Bc6Pva_Xl?7B!y~@gv3d z#LVMFXXi(+_9i0S@0>1tUHKWO{y13_<raO^d|sb-D6_QhYpVtU`xrDHi1dl*Xl=0G zH&qy#k`N@}#dch)DweuxF9x9Pbr@(1qn^GqQK#b86+MGhiCb`Ae+ygd#TVLlzLY(? zWo|FAKY3ZdY$;c@j|Pk_HS~OO$JC1RMRgsR|76b>i$DGYhU}$E79P4dY-8PO_~nid zPIjNutCBy4o71CC3|nqveB;?!Aa*){&pBYN;FL`-cU5;ntETI0kwid0f7)>C4wUC; zEZ2Enh>K@KEhY4U22Olmfl6S|7A;BnSrU&xkLdlX3tq17iUDkjJ#+y;jj33&(B8U( znx!)P8L-=EIUyOI{L>*Owy%<5;AiFfGna#8oPYXlg#ABuC^$){=1%olejcq-{p)Y< zB+{}^X{`|yYjOY~r7l*Gp?B5$lUMkYj+*-CEV4oI;#zE{t782RoRM9u6_RI<bE;uh zs$V+3bL9;RF=wWqzqkD(9C@d#LvYqOL9W#;qPQb|lwx}u{wbHc?A6@TC>*}Pr*i0U zqOPK;G6(nN*v)r^rRs>b^0*V1_+qIHl03UUd5Bhdlk#X@s>T}WWmBJyP^B>*vzKEi z{G?=fHhf#(QD?X<@WeUpjhLhGc}03o=myp6w!!RAyHKBGp^Uj4lP3G;*G*;JtoaE% zHpy^<Q2?DktC?GX-0$LbBfCEmzDwk3>-97PB%a1|I?k=#g+T02L!PoKZuk_mWGK_1 zAEXa!9<f=|g!vw^m)#^$%lt9eQY0m5Ks?l*G#~~1w@|G?P7q;}BIPN@Hb6Y8U(hQ@ zA*QLe3xOYE59$5(>JZhv7!2P<(~hyPFA1=qqS30MYMGFpT>1)lypMUZ|Fts0ND1@* zox%IfCpzMnB>4mR-?NQmrG#BH@tx{bM(YP%SO8gnm<Hv5wI9!kYCFD@vQE<jS4Ckq zliY_7+4J0yuNOALe%Y==0sBO+*>bD*1?c%2Vc`MjOZs>x)|1>42W-Eb7foo3MXwd_ zVX|~DMG6+|XCC3UlS)1p8fv?~O+Ab`9|KaA_m`QzC*eRsvmm?rM!Y&@n)h~AMHl)P z1#@rywmlO5-PXQ6=Pj47T<awDQ<G$d#AXfA3i9f^995maO)ZfC;}0Wd?}H}l4rc~S zV_{oPm~w5>-=?;?{4&xDhIEy&l_slC5oWt_R=aVA9}^L!bR_^Q6PFDk0o?DKG6SUF zH`fIWqX!+}sfH!<#NcmM0IA#BCp_*&@6ysxo1U`fG~-?yTO?)0D<Eo?zOtr}=@07v zFuL%6L1h!RnPOGV){4@csD`tfYsKGrK8VN{=Kiw@<c%f&*aziUo3f5}UP`xds%a}$ z72%y>n4i{V3pr!nGHHgMg~p;Ncdq51JAub0lOlLG+e@!X^)mACUA7-DB|0q>N~|ow zN8Ra1!47v|zq!8=s>$#VerJ{8C$Cx_Ac(<{pzsjsJ$Jmnt+ep5sM?}$?gyBW_+7$V zH%SM{-UhN60rq$ZTY5h4UM%di#K#|*K6toX=`b3+T`qWoTIK<F-n=-ktRV=3!VjC= zK;*`zM?Ow!m?+DjGWWDYCWluTt(CP))%GpVD-LWc(ihKbn`!c2i(}o73k!*hRR6MQ z@BU}WF@zmUzpv*N1An98?Fma4>(!3`ei0wZH_-SqKG)bIwFvDp>93KEic4(Z?^z>z zARw>S$_cCJ1tbJx7PJ#cQZ3BW)aHPmfk1$+FVnIx2++iB2&MrDWgz56TZtwBz8e{? zvG@3CPf>2K^47PIXzN)f6#uPx2UeQz<o#QuSlTW(aO)E9cFyzS=JeKCvaq(Vr$F)W z<$$#g0^I-d*7C}(A(2y5RHDV3p@kPbuQM6yR<L(>f8q%fgTW3<L={9=SbdP3Y)Q?8 z=xZAuP*W>5))N#8*cb^QChE0Qlnn|GhmHFf#MHvw6Ege=JAaP9AfU5#bpHnt+3!I% zc99#1zB3f&D6@b0bGl(vegdI7KE5Dlito=>-b##7vqc?(&xLYxGs&+s$C;6uf1<<x zFQeN%9O7hS;pV1ZAle4J9M+?Dz>mYfy!OrL7hRyi_kpc@cJ*eKNtQCb>EC%7&{8t- zB2924DVU97UqGq87U;hN+A8ZDxM=^*k$zs{@=BnxU%H!|Vv%~jYH)l>TCdLcZ6oLw z5vi0^R@mQRrXm{L7*9z#eAZS3B>G2{k`WOHMKk)3IH`LOmp(Q+TGxt7+t{mlHMMNF zVCX{yNOCZ~a=&n$`6?~!-Cq1rl!3Rtv=z6DlKK3BFm=5?VX)wf{#qCOFY<SY1(ZM- zb|BoTJbYs9_fMKI!kn<dda$|N3Gg_Fao@P!Ml4>^rY^cp5sPUua;I~q33zE?jY1zs zR}eAL8&b4Zm@G!L34{ZidWU}wsxX2EHyp#3lbjB_MrCzHezberpmdKu!Q9pINWqVe z%1iwE<|54mT}a#}_8)OEAWOvFWwEx^wkgGV<P2??JW#{QS~4|ik??zLzem=cdtCRo zoqq6a9R>MiHfP9w+#?++hN_uYoucZ?h|DFG(~;mddg!yh4XMlIsXJy>LLA;_5KNsa z46S)~<F!PWay1>ns>;B(&DT#fTHPJVxM;(@e<Rp(Mi`GG>l0u$D&{EQVgz=tlvQ4Z zhtUzUw_ogQ%4gxgm*LK2*V%lKAlC1S0;Cu~wR?RO_ncvnyR~S1&1-I{ut$4#wM&=` zrBIk8ogi|#3p*P;ObpszD<2CoUM(%QeYTe#WR!Fz*fu6xSwIf%8(vXa01$6x=i<Gy zOPCr6z!$X<+F;M#-bC#*{S7m<Aw*APqFH+7_7h&fesTX~&gzeCWhF=}q-Ok&X;&}2 z*pP}HS&kxpU{@p}2cb&6_DKEoo~j_J{y$9X6Z;o;UT~;V14?EQ%y<GCWExAYwq{8+ zn+*r!sNS}HL4Y-=TYzndr6(H)`Qi8uPl@171Eoh~OzAM<S!7*)Qxf)*BoTvtCFs7w zw3z4&xa9qkoU9@6#ECyti1kr==Y2#~ENz~x-ldtxzLNya#+Do90MSggMXF>RzM-A0 z{GMf%1MpcLFe-h&2J*H_mQIPQ9I^Yp`oT;41{zJ@AG5E%BYVzjGvxjA_U^E=qXzjN zV|B>&Oy3xzY@6h~Rv*EJNW}fF%Kk#D`-7Oy0m6kqUhn4?E@r>j8T0+DcR*I|5V3S7 zw69%buNLRXsy@=k3Lk12iKbZ&MN(YOsN=I!Tu_-;f6PT17*2XOTT(u}opVV5!<tid zIE?(BCpri8nc?dRYs<!u7R43Sqs_&`4+cI~AwzRCwITm<G#k6(f{>wWP<}E#cLANX zz3s1({-T4`*FCEFC+9!@PKYP%AlMCjqkYtam}Myd>L4GP+Kzuz^ePe%U=o?ActF^1 zs;6v07=I~mD#rFf(i49DoXXIp>LV3XdspdI?RR?}ljdx3AR!}F7#dac%SmN^!zSVx zvXh;MZ>Mzu1$y&_=Qi<AO)GVIN#7o`3~fQ`Jaea%8VRF`Q>Oz&lp~HP+150r7K)Eq zQP}i9u!D1J5n?PG4`M1O4)uSSK;kRMk5NDbA`@mJSVI<^89MEF@c<zI3uU{1Oh%k@ zoqz`1#*^^HrC~CBlPF3TE~XxNMl)4}lI5rIBj4H7{Y04m86?Gjo?)D%6!^!@%Hs4X zP)A=W11+i$^L*Q)*-&P5XyQ`}^04lAQ|+QcFPBV?SW!l(vlLoFw;=s`Oee#7_Vc$Q zJRlrEpaV;x9evnf;`B81cyCc5gOgWGP5cu^SSlF^Q-%6tSLtsll|czl9nH$iKAqK# zI{nYW<B$HhSglbHU2xBRm-vVsWFnGrVza)&3{^Y;`LE)9JweAitNPpW)Ki+7Jtlek zte9?Ki&fsJ&u}f10sU2E%)V4IME$;XExv!g<}j&vVa$gMsyW@^H@&4AU5zIq29QiM z+Sb5cmAl+<hQ!lsiS-t9&+}9zjKc<*J*!UhQ&dO!H3?YbX6zyT%WP)<M`vGBRft2X zGJZdqJ(ZW4f*DoI2c$1OQ&ER_?Wd=RV1d%5J>htGlUv7CUbiy?S2TZ|h_H|_Ri%U_ z%E*n|$c@fj!z;ECdshiozoJw$#SoC@BfgV@oj~w)x_g!k@o`Le69t)geH<SO<upgS zi6A);A4ieoWzN?niuLO*&GYLtGR&JAZ|~NwUYCn;eX~FV8DUfA@}BsAvZ{k}ZZ0U& zv&cZ#0Bqv!6jub_N7n1$<1tl5046+zlQm2*v40svQ>=h!MeBNk{3sbxU72A5^5mZ5 zUKOO8e&yZ%#ROOiNxE|lIG8J$?85TmqqN8djj{E;q%S8j9eOD+QY<KJx__R2{ZW?v z84sv8#euMw(se>r1s(5WS&#FwVH_AwiluFlLpz@R2?GQ|iGt|=ib$elRzT5WyH1aB zYM3wam8HmKb9GsNZ46HZLXx%(uyUm#>(tY?xXiK|LpjsxCM?6$RBG|pIjeO)^cv$w zmT=;aBoIiYR?$h9i%R@6^568G-dd$dCL(f8qNm*A=7eiQkA7Z`$iE6F&{*p{Shgsw z<(Z$CAL7u-&Xm0oujEyOHLL^p1;u}p@ThIZVy1PBUk<>XM_jXF`e<_v)webTDw495 z3fnEWNvNpc28SJ@PmC~G*%df4?ti}R*;W7(xJ&Bj6zL*iXQ#KmEBURxUuW9HZtb*e zX=927MPZtq(MAC^8}jk0w!-acUHCVguNld2sD7+rXFG%8@LE+C6#Nk0og2fqERiXH zEz-beq=1^y2w#hg_JC6Oava2&7Mjm9@<>UQNSKI7P-g4L_n!s&eVPF&m!931qi|N7 zxT*sIr5g9FN3Zp6G5f7@0pYNk!cH%ZZ}2wL93sEwcWN6CZUVkng9Qdzy*}FWN$2F> z;WTUNHLep;oZU_mW3VldfzE!ylzVH@*zSDI7*W=#jr1p)#v<(V!&^5FCX}fcrKths zhj(%SA^9=xlS_ZupO2mVpNTy9e3N2sO0(}px;vB=ukrT{DINrx7<-F;Pc@5|N!cIp zcXj%X%RpvL?DXx9<h_0w<CQ9bsutz6iBgjb$S^eMT9Hw^v*4WUBbc;6Xelm7nXws^ zihD(?Mk~$iprF5<e~gZihcm2yk<2NBH-0NTOyUL^Algff3pa_&OYTNzZ|=Q&c)%cv z^VW-%eqMtcK7JPYv?|^;f`$vDGJ^75Bw#5~SUvgEPJQLSD$a}1|FzZ<RB+pfB)7M9 z#6HI_Ggy6|pn|Bun9{^t@`g15U7oAXTh1y7uTBn3FwDTEa7g1HbiL>w{v@DIQVCkB znhygin<2@-Hj8MsqC##NG4S-SxJB3HUw@a9eam;w@nvX5F^NY4)pvspe;v%xH`>&C zm0m7bNupE@5EQalJM1HEO`yOlzt55HSfz%~w>teH*y3H%%2L5QGl+k_FD-{-u1$}} z!0js)u`shzlQ{dpAt_YD(RpQ|>lhYDoz<9I?I>fi!|kP;65c}2wg&kaawOZbCQGC# zie<T6$ez?cW)~HzMZ_yB^79OL@;y<CrWEI=6Fz<jVC5|fF~DEw#(hc}HlUKDcce|l zr%Okx{!`9Wy<c>~e>E=A|G~Q`Ssmk!`F+#5h!2bz?$hv?CKFL#d_fVWhC6R@cp{G~ zWC%$RBI0%jhf43XE`u)~mao$blrFGHiyiz(y}wSYz_nra3HXL2jApxEHzx&P^8Sdg zhfiE7JT9CwN490U%XoXS{~SUrM&cW|!7t%EMR{A)aqr<eP`C)A%z1C+S1lC-mtpS2 zJR99VMqJl|Z*d>yayOBPR+9K}uFl*Ae(*W$=q9&c|DYr|v44Z!4(Q5<%h<PN5_;$l zH!a+<WslrwFT5Y>hLpb&{oH@39H|7C_Sgy4gEpN1tSFm8&-K~ZR^`_PSjIqv3RSW= zggNp|?Str<j<o;ihb|^Dfnvva(6u<L*!e{7-0!$kIP!#3Op{0<G+==;ycmiw)mAYm z@<llu(PEk>>LGqRE&vgRTOv7OIwyAMu=v*aW51(H#DjW{nk{B7!#WG-i%gaBq55RU z6)Z;Nt+1Q!zy7Be7{~7X)&R7hWkHFBu4juQ)a`k?NGm)(x6fprI|gDVmFt1z1Bf0- zI*4uPXr7t#>tRZknd;^JUP!nGPAfTjZ;V92_MZsFISh<DvW(n*Q1Fj#teZAj?tZkl z=u$@t!ec(23CDHX4|rr|Yt27B9)DftH?B=WS18z#P>_Xz28AE~>#p$-aOgYvyEG;L zM_GH<YI(hxFZX971C>ymY!nIPQUu|GUS}qcLT%%{6zm@wi5zoMrxV?9T4vO7-Gw#l zuR<0D_zf|~<av?>wAg@ho7Kj?Vs;e$Tlz?8u;par9HDfj3wg6B-DhJ>G|Bn6PL!6x zj}{GAH90zxnI6#pa9V9C#PI!U<|!|Rg_;rM)ra5_y@O8I0mcl0i5aq008Bjmh8rtt zDY|7Q^)hJ?SCCq^g~s@sBn2=)7;jDw@ZLcwKi+%i1M2oWb19~g!N;70>l|bGVuKf% zdo$2R0#d-YVH{hA1|f_XJI*CjDY`}m#qfV2F&D+Z-Xaeo3x?<AJGWA{a^&8hC>v_a zy)ArYTA~u8>oALH2eARCCPol6=ug1_VNGpH$!dPZx$uh>y}ww-IbJ_9sS@s@$Uprh zJ4vr`bw07`G5Yt_mLiWjF8&x#7-)OUBP<scJ&G5PRF}0}-GGxZh3>BEr@<wn`sz*( zAt-xo)1*?skiHdFA5n%DoBf4~T=$F4V7(Nzs))KgN8B>K?`@sGb3C0VlktIqb~ZCy zAWWAdsYjOt85l7ibNe&<b#y>@7@1Q9HiF0xb#}CBs0GACGhkq6NB`Uf(c(!u**>zk z3qlU!_e?v1)~u~<d&2g2c#U1Ng3CI$m;S66qnC397$ekX+%UNjB^ol`GW%MTKHuU0 zmAnBG04Sv`4s11E)R{kTIX#&}`yB><YE?&H!nH!9dkN3?MBQ_yjq!@ae?N(-EdU~R zj^1^Wc()x6lEwZL%)Vq5Z6T0b;)icJ!2=)g*BJBxv?Oan&;R%r@u9j35LaR2@YMfk z9{5|rWj&d=3B9u?xT7ilgrg_msha#UwlfB5u}vz5Cw%JRC|0+C-IDnMF?9#vNp!Km z2iO1-Yussm{e-K+W|^o(!?*_gI`rg;x6J-c!qaTf2m20%u@2D|vH9n4n{&7<|3J2< zfRfoFN`8<rZ`W-YAPdqa-tfucnyl#o-@*HGVI0ikv$sWc_|&_)yAyTJ`u}>0l;M?3 z2N%AaaN%<&nHm3Pv06Ki%1@+*^YptH54Kf;#8vyQQ0{j|1?M~woS_e@kW6`EGkw$5 z`qWsJsXQ3CUW7P{7n6+b(FnIQO(sl*^5|G5f_HtbI=jW&?y32;^#g00=vHhL74#Q7 zcxK22)P48ZKP5Uvq{u(4PW=3hyHW>B_KEX}m9de<;vO}-LmDLov6Xz%y0gGBdEgo& zTu@)i7G&Md6SGgM*U=7ZZntW%^5a^x(9Dw+X2Y}cY{cs~;rTc+dpC#V@Fwh0k_QAz zXAb|z32pOu4ri0vlZH=cV`8izI1}s=eqU`G`4JKdj<d&4uVE7;T2kqm?1VX9gr@CS zt=<!y!7uQmRlCm6VC4o+Li+}UQQ!MI9m?XU<{$W52YKd%2Q0HsJ>p&M;<@k?4NeEl zkrFS;0{a*^B{J|T+=hvq825@@X44&Rskm7$ew5@uPgqF$px<k{1I;8Ch{c2trt!*< zpfAK2GgId`N4!xK6d%u-dRUjlaov!%g|9&0vcsszRrn$i7fWme)SrsbOx0gEs!@jT znq;;U8L_PV=<w(rxywYAPeHv!QS5Aa=wKz<$T$+7IT-ChA^5byPNThG1;1u+F28N; zx}rfm;7^YR)%A6p|8yOUT5r`$FS{}xFfGz-Ff}93leN-%{G{EUL-qJtAu-xHDit6* zA2X<BO{xDUb-f>FXn$rr6}3DSF#yji0dbj@83eOL5Wl@n=yJG1Mi`+_b+n(5SHk|` z*$Hu#=(DM1_!n&UAJZbMJTerbWg7LH=05>?O>TB+N2Ny^U&`uVtX?r1Kz4MoP-pc3 z%q4H{a7LYxPS!k=8p}ZEG!NS?DSA&;B@gsBM7YorVndGrSWqH+=#fuw<iW8XURV<y z+fS0NU>$l(I(ISiUvZ}6?@7TkMbKqWSKzt41!ejhBujCyZg@Hq9piJw?MN}eO*5um z1rEELJufI)SRr(cz-Y`D(ZI-8i}5y#alC^PV9n6~2=H<K=NoV)L}Fo_am`3K91-y0 zZ#Y*)lu}Z1wzDD_^HLDO&62SCCj>Lx_>6Z|y5U5Pt5_EJLPqE+3@tbx{9++=)319b zMQvP8C2@@q%00l8j^yIMqmQ}|?0dHHx1_o%u9(Qlcjo_|Xe+?d$J&f?O}OxQuj0PL zNZ#(@m4Q&T6sH5$azBc7b%uIR#B2^S5cBc<{6H6n{@+@2@0dn~gWKBD$B=#t?63O? z5f`KMS2@O?!1k7DQ+J7X<CY^iU#qzL&K8-aA0ki}(!RPWp0nB=Uh&qQhkgts1_4ge zBh1`p68cD{6_&*}?jaxcMZbGiT<`6#BoY;E(vQ(iXk1j$nXzTrehMSjcbA#if}p?$ zf&Z89n-BY(ftNvK^chmG9><eB5lNM4lE6MB@j~*tE({k7F_sH>(^!_e;+8&|eoW1T zAW1`HKPFQx@q*wS;YCjpF6Sl7mZ^IJ1_Q*yqN{m+dP)^h-sgXV4dg`B3i-<dZK8BF zoqk2xU!PXm^Xna(MuV$gQ3(}pVqL$c#I^fJM~@a}xQ*1tythfzBeU{LF(=&h8!n); z6<uAm`o>P9J>^ntOcpC+5dcJN4-phZmIy?HDJ^AiJGDSCVMA<@#l0Q7=-wx2Ui2Jn zS=p4^yhRn?htD-WG4&eGhK|}>mC2~rnX!55zvS&C*j=_B_&8eBDbCN&cX6~@dV*mg z->U(U`i%asCeHC+j=+%I>~GuUV-%j8{A?(NtmeWauPR9e37my9l9;_s!P_z|@_T#G zN#~}^TP5&PQl#hr!h^@VT$lZ0QuY%J4Nh~;k6_Uc+hFBm7HMOTO*~&95CMiTK%HO+ z=RU*YQzddxPp$GM-2=F3*G{3#`}J1wUG+aO;q`f!_xmWiS}=|&Eilwx{|h=nMG8|y zUU-u_ioRvlg<ifTXiD2o2kp-(b&yf$+Ceg+q0W`Hj^V^re5|js>7{q%+kH5|VlusQ z_d8dPRFj9d!ucp$r~cMe1&==b98$n+rr+^~b*-Q>{Z!7OdXLupq(9OtR2A$2|GM$I z@k7+k!5Q6l?b;*bt9xrBg(c*{$BZdzWvKcj;_?0%36eR<Kax|E(WRYQ2<)_hqA|=& z&LDtYBi&N1^uApJOoOx%BsIE;Qdl|e&UI+w7?a;f_olikfs#IxC)jK;NFP5r?f0gQ zmW6u*Rh#`kTYx{Fz_15LR66aDOTQzG+xBAym1qvQs$aChjB=|kN51!3V?J%m+YaR- zzp-RFn0iC+(MUlIKnK}9MzSRLqNEp8Mj$p74nk1LA^gRz63$;j%kG8b%=Sd|w#i+& zMorwd7^LBvbpcn(&(?gO`6bYyVF4?`e~)W!oY0hm{Z>hJa3+_5lW$$6+CS-QpfwW* z9+sJQLf<Zb7LPtF`F=W`Y`Hmr{MIf<e(FcgOm)Xq#2BZzECLp#fr~acW+ybQdys4~ zSm%RSVrgtC7TqRF!luS;&$<?teq`pBe=Bn0HXJf2aaQM@y-IoCgj68`|F46JA${yk zSR#l~(l)+O{V%dpgGQ{?(6!h9;pwXb>HOdKkM3dGG!xS?Ii1sEdfKMDCXZ&?n65D~ zJvrSB)6;QujDv}z&-p#PKi}U!{&b#K-1mK5*B!5SySyu#PP}c*@pQ5JJT6ja>RBdD z`=XqgI2NKE@|%H?u*;$AU7z=IdI%6cnLe!AW~_O@<uY?8-~M-1u>kidPmBHp6`znX zN<r%Ly6a$lfs-9Zm-`Mnkf4P)|L@NvzRwF)$uf``NLdLm;s3Fwym)2Q>M6$;VfSzE znZ*zka~7HTQAS<1GB4+?nq3?_)u0#=VrW=WN<_rUaFpmpT!4H}@G_pWSc*na`$sRE zDg7gJJ5?hERo`0ux!B8=5U1tlKvhbjihjbT=RR!g7dNg`HEL4*(djt;-Du?Em7^~w zaP%P;WeBwuO-kfYcFwmeNXzjnExc8Q-(@$yEYWi=t0$5eqlj|z75rFp;+Ze-+5W7) z&4rvMF!ydM+x-)KR*?ZDK{*=KJ^MWAkKPVe$X?^HndL6x)O&3OO!P@@DQ4d|&(D}A zF)t1cr975@^R7H(V&dX$nH)c0YySUPdS2v|h!^8_u3oe-TYT~}3y^{KLTA11>}!zj zX&x0QQqm~66W*7K;$qZk#Y^|pECzVW=Fb8%iUUSY_Y;w8qk3?xNK^3X&u~+GpT)2J z3htoz9Ze;LNn{AQ3Kev>v=fW@OCG(=w`f77AgxTpmxbChiXVS1JZKICm`4iJLy$i@ zQev%dT~qifQNI*YcNubad~r75Mq<tWkc;u#YwUL6+L<hqo2uiO;Y{&Yh{)4C@ylmh zH_<zp?3vsWQ_E*hj1)Vy>k;0E*=_v0s7W&O!#3)fS-5ov_&g!OK6Z7Ws#V9Ewk$F9 z^gVFWrwADy9+p7}JDfokHGQ0I>>*TpJkm-Dd>z$d+`Tj9gW;AJp<B%15|Fne&6NMv z_rQ5~x0Q@$h?g$sEM{#QM}AF?Q&(wcj?wvt^u~vi27Z{E0ixD<Rin3q^?8iK#M>;9 zdExi<Pc&a&p6Oc`h?UyOWPSg-*lU;ySCH;(&<)oYfBj(id7mPqw1p7Hm9*Pdj<&|0 zOXaKV3H+O2i%)BY;d#5b%+VR3Jr}THW~Y{KUYpO$lIsn01246?dmFy-h*lH^WPRHF zaJnb95~r#+omyn+8rD}=+(vdht;iB^g%Qat1JJ0?Hv+u#!``#Dj5OK;Vr-9kyS_`H z_&5*i(fmsapX!wXQb85f$N(<RZ3YOZ{R>CTUaK_4^#nO|hx|Bc8l3-7uCgn@z?UED zr5Z2JtpC^ew=;~Vb49V%Y!DGtrDi2HV25CA3G;+E$K^F2=fHm!j=iIq*97`31LE6- z?;mO;p(pdabKmovvn{A>bvI3$Klo?{4GWsM);9-%KlCAgy~Sjl#f<u@KtJkCNH{}p z*iMi{HvP}>H|ZQ^0R?Fj&bu}>UU=)kjL}*XLVMijxx3Q^=Al!eV)FbUs>wr|g#8f` z*C55qwr!A;ao)^MKRJ$<uOS?myoZ69MSJG>%6_?<+*;kq5zAx!@H_;Nqd$Rp&9n@7 z>Ot3Ld&z?;RnSNX^Zr%3Sj0NamD8#c@sx9c+-I?AA1-egVzg@@ZvF*5bLp4*B-p^m zsS?b_v~3ulRiWg1_fXGhYes|wO|knv^SRRPN!{dm!Dx9Sg~gG7NsgtOK@hfWNAzg+ zHU@|C!L&c|#2snj%3p%}W!WhDl?}$bE9{XW&e8Y$v6s8^5(XAt$vybms?}PV)v3iQ zQu8lbR&Ch5Mi!8#%OfR@|K4e*RoGryR#gDM+Vxn0ny;Wur9pxW)?qJbBcN9nDthm9 z<h(V_GhGC_zak)aFyaeJdOnPK>$)Xjcd^(0#A{rP915G*Po^iiR6Teuio^5bx8=wB ztMw=bZX(~*9|ot{kft}_%4gs6$EJ0b3@H@BFNOYyYi0XAAQhAOKOGHwH2E|4B_vEi zIT)7H(1=1<V7?6(14B?NX5wab7v)Q`4{v@Jh#aQw)IQ6ccB=6k$Utc#chVS|Y;wd1 zjlx2@efN&CixP<zVcvAW(aii#r`IB(nw^v8?AK!IijHAJoL3aEr~QxVe9io?5zgm# zcNU|F$wq1#{RPuz1?}Epn;-|q^Pztbaqh5t8!?Mc(?L0q=9Wapgg8r7t0iCj0J%dP z+Y3Gh6q}&u@^AJ3XnakGon^z}e@;DJLSd$ZprHV!O+hep-`;&GziT_yH!=UUZ)Y5c z%c%^1xUiw?Rf6UHf$dcbT3!`zvS*6h;`G?-FYN}K31YWJ2EDM>E@iB2@jrE{?JoBW z;#F2B)!3MM$+|B*AGIY@8ka1XxsB?FDi+eOg#$9Y^5~Cupt<7;Gdk<RA7*B?KM&k* zT==JjlSj|$q2!u}f{REM_Pv}=I8GfmTQU#T#gFFM&gxjwLX;G|IPY7!FfdfWUsHLX z4ibj*^N4H&@KSIxT8(frorxz8SO4KEfN{yIdad2ogL(T>vi&8^WXl~fLtj0&WXJg} zI$prQIX$ac77+zmd3lfPcXB`YGf(Bg1!<7|oxCkq6>>B!Z5^{Ko@g~T_pmBB-~YVJ zz)+gTHY$rXDtp*G9!31KNaQeLrxs`eI<`d^oj0vcy_zj51<UmXh0ty*EP#C*x*|K5 z4%E4WM<78<F@yf8hPzT?IZvNM0Z0Gp5nM?J*RH<FcnaiK`d-K!=}U!wHP3N+|Cja5 z!Tns484~cbw<oX*hLr@WW;o1k00eFVR3j@UsD+4l{`)-K?*T1+5^X{A$PPrjJWMEM zDou91Wqh}@@3~JYp^b6N0tffB7_Ns8#^|%L{_nn9M0UlM<cJ~pdaG?v)As9Xi82~R zt_aa$W=0CwZCB09i2QOt{fYd&QIselXU8Og(*9jmf}R48OJHl?w$T#j+F$XSpN^~Z zjbj)7I-Ya9P~2oK9vAJ5Py%G2UJCDladJPk-w1p!XIfcyd!Y96)QiOPXRc|M2V863 zS!DB%e0c$tH%cr_obgCVBp=#NUbrF{(Q15Nh}3*82kMgpd0g`3K?$*Htd)W|mY(;1 zkXb_EtLZ7zp{2}3tvX545*&ZSHaG91)TZ%Y?cu@%zQch+lSDN^?{@zZE9<YYhEq`h zCW;&wyB%3xK_@WLYtJBdgZYT3MJw`8@z*2u1iV)_?3@*>u0wWyqsG|A$AGuxkZY{- zo(3l}*wvZkx6`NL)#ysi=(-e!f)xjX#Ev08Re+ffJSgrTKk2{ej3l{~t+IQX-?Oq2 zSQ)PdJ=UnGp*3Y!d-W|QJ^Q1eFYA<~t$8E^Jh}G?x{-0cpK%`{`*VDobMrTnq8SDE zE$#A61@e=%Ocrz$lsX^OfBf<J^4<0?_b8FCP3ir%PGiW6I+R(-mvUQxg7$!gpUt+= zjR1HzW>E+leez{Y(z<86fuNGFAXpByG>Ne1eG#H`o6)K1*Y)vaPfz2LS$CIkOF{F$ zh@D?X4%Dj_UN4K9<9`LMh!C#VLp45uei4KTZj7rVE-*yTgd#!uy~9jc2Y2o}L4q+0 z+J8|VLVugU<6pUyvHBSaErorcJg~ARk3A|yXqGe^4x#>h5NH*CAKL<sQNv|FOk-jc zwTrFc&%caFr;44RNSvnCdTV-_SSmq1G7@C*EPyZj#=}1^*Ir5`Eq6p{eBhEzK3%z| z!2hVlllG858Le1vit=a#MDP?qVVI~~yvs~cIFX$e!_d3ZXtlbzI)3Ky#9TMbAiLax zX4MOaTLYH`sb?8NG9kv(Y;^rEM?cL82(3;~`Go)LetvrXw0-h<>a>dJPRQyRfx<gO z9-&I)YV2+)QtUSP&+nE&k(nS?$+Xdwvk)zAMWZPh733hP6XXZw_@v+sCLKjxr1pUb zj@hWWiFc}{F091tevHlKj>Ry~rMxqpfqHAAgosbeD~ZE<|Bs_wj-#)0*4X-NfGnS# z@5CF7;p2%oBdbFK+eEovTBJJBab<kHHn^-6X`r9+2xZcsrmFe+Ygx%b@M|D;5crcG zxxn$xeP3r7=J*cBib9pvQ&5Ap3G`WORNO73P^It<eljWgn~Q?B7E)juwz;ieMNXd< z=HPFgboPEkc#Hm{7J>5?q(;(B2<X`@n{b@mf|vYO-XYT>(0)4!2IT7SK|ViiM9pX7 z0oX-MI3Rs=tAx!8+U2_$zrL|Qt;fTXTJj-zT2mmac0SM*b$9z94mTu(3IWOn2Br~_ zcCTa})UtackmE2?oX^I~c0ndLmZx*yY`<Zzqhf=W*fW{c?!^Ht<jb3FCZ=WXMW)Gs z$AvwS2<7pLve|rlFksOCU4-aB&aGTPs;otyb*TeC+I~6p93Go}Ym~{z{fPq{`E!KA zBS20rWl({?EArS+X%~qL;@a4ik`2eD1*1sZSrQ>>jxE80+X|SaftN$(;Sr_hI1eid zeOQruq}#oPUQMZJL6y%r>lIC-L%Rjrp|u@uTn~@mh6MT&b}~vrDnasn`Yg2rH4I4C zGxUV1CW!z3p`n144DushnJ>A8PR$rxfTbqk^MuqM3^!li^!c3`t~qlSfYS=OAM`6g z3Sd4W7^pNnZ9e<L*8&p6qbsF8`f{Cs=Alq;(shPm<0&TR-^6-K`%qL{_;R#DVo|?9 z(fy2Mv|K2?EobVkwW~jv1h>t1T<Arr)U)7Kx>_Rf@y(&^)z?Sxx9pXK^nJh;{QY<l z57!i)|1OArEBD?3#fj{jp4Rq3MsDb7#o$~H=*_so8b2S+6h%%8CgDfN^9atv-1;8@ za&HhhG`^b>hWAJmY^k7$`C=oWWZnkq+?(Z?jMOuRNH4&b;KcjEG+vqZRwuK71U7=x z)ZuWeXUOI>T+BYn!Ss+>1Vr2A*`^}1{3<k*Q75AqQ*W$NG?bMo!P$m?p@1yNY3O&t z7@l4LU*^n@doo%cz?fcs61-zLi}ACd`I6E|Q7FCE%uKlV#4TPRuRDemGfMj;qi@`i zy?g0WAOW$;1p3>YylX`IBCN#zjclcTEi%DZ5D=gq>YUdW%trq;dEPJc&!6Mz%D-Sp z27R&7{C?_e?JY>va@z&7H<LQho%?{Z!|%3iZCq*<rYq2AV;=_HB)m!H?U_wK;+Ok? zdLQ9YL}=`)r1y;2F)^b4e7~cEL|rTHE!>TExPfTh8bx_UXPTShp;L+O%EU!xXXd~H znmAKdMrhL(9#IvyJN<4U^w_$7bW1vGX9{Vw(x|@U+r@Ker_4O_Q?pY-F-6)WYud@B zjy`{%;8&U_VpwgBBz^AzmTBs-g24N2E7s1LS4WJ+Vd9g@bJA9zN+&xRtXREAiAe~= z{bvu3^%Yr#7{bfKdKZG9Qh8kRT6{C4iv&5y+`C?(YY%n)9*0xX;A>};PAD1mmeAHb z<fv!dYcl$hC;hNMe4h7B%(ew4$@vdW@fKx_3@3UuLxp9HUB?zReRAQN7k%mnUrFQ< z!>ljRVk@Mlu2Kjdi6tt8My<PRrp>3_Et}8XU}0ePx2wEj79UDiPI)DjhMZggnZbtT z_m*G1yp_8iTg1&BUz=f+!<}*^2%6;HCOP!B{@FWDx6`$KmyZG1XM-N^u-|EKbzXp7 z{Y-$`uHDYG@kV8k%Ph4uD7{K-r`cg1vIQXtk=o%`8U#+Z`GJkBHRosNk3d@_e+aT& zI)Jx|_5OWmu*{2%?B?Q;K!d?iso=^>7+YgaVkfCYTY9a(xZ)Ev@YmlfViwBwK?7P= zNq6e#Q(vdWrjr`8F)<E=jyc>jD#F!vq+N{!J<id8Y<mWGe((ivqCU7F%nlJj!U;94 zE}yxK&EY8_fqq9Fwy_cS_pz_=5;=UgQVt5j&1Bs7sVKt#c?NzeJ$ur-!YkS<A%fui zxB`MF?);OE;27r3()jl;&%?m&uQgfMjARr+{_|ExFWBS&Gmjyfvfeh9Pa!U7;|>RP z9P0u9jHCCXR_5df4)~=mHvVCszn{tNZqy(|IQ!@S@N_V`b)2qsr!k*`7Q|qMz_`v& zFtMl;-_bB;QBO9+@4Zz4aeN49Np^%ZSs-U*DjAKKik$zIcnP*$VFBV|2rXVhM&WrG ztMi$$db3bj0F74Tc!Qz#-#3{(*Ef{Xe@aRNVhS$l@4SLs_81ReWKKexn{pB`H;g!( zQ-3~ZSi9-`gn5Pc@$%UJ%M@mfEv5qzhqe3%nb~?mz?Jep6oz%<hboNF&js;7&)jyq zNP-J2WFW%dclYXvBNQdPz%Z8+=B^_w5xActZj1OiuM~!nfY#yU4-6&INPXY>C$<Ju z>8W4?K_0dU_MSlbZ;%vfg0p<$IRV4UV8i`R|Brg}$Mi+u$I}T!-NQRD<Z;>NDZ#6n z4SY_nKUV&pB6#pgrx5)vM3G=VUfg_KwvP$KkjV>_pw-x{VSHOr`3-a85znxIe+a&N zA+JOO?}v!Unq9m;JFgm_`1Ro=+DUw@?qC2IE%D0d>J-?tT;VcGX`R{gw3v|NrNzK3 zBmLQng;IEn)Z`19mVvOloAx=HcsSMO)f`vl;JGhZa;WV25{u1xY&OE3l5K3iti&TV z?k1}-&=;qfW=gC0X0E9`3cH$=v0|F;87k;e8b<EM=~?`v8@(?4(yi$1_;>lMlA8`F z<ys^FX=!A<;Nre&9_=z|#p{7T&STLN(w^E%!H~wU&C}^I-FqdO>dN{MPv&Pki;TN{ z(JR(1k4)!jioB#>`mtv;poP$aK0i1N9|r<hIhCD`0^An5&~od0!+DGBoV%`gOFRu$ z8yP2rf&ZG{UXUkGbK=5a6LH?QixBAuM-JYv7wJ`^wb6aH39%6p`mUu8ynAWy3aawv zw5z)EUOG5zNxjU(b#}YUT6%DY1b0d{b|}KPneO?uP^4jzhS-~4+c51#(EE{hxuGv9 zKn714{`nOf1r114N=}{T?wok<^><1`?}^^PxIK)HCun=>31j^hQ_wnYZv)0nL=imW zzb%4u)0RHV6i$}M9LmNmN8w8IApv(8<-uGenUu3EHkoc+&f8?+w_zdIk>F^T8)p<M zcw2borm;s8KA~sAkdI_U?vbVR8~Ae(MDE{YLYc|%?EX(OTNLahk)DPHrt{qT+}fo8 z+Zj_PD0xuPP{%O<68E<7hZKcDq&Bi9S8*`+XfIoOVnQMlN@i4AJy<#L>LsuQ*UrKs z=BNQ<j{?m5+{o3SrQ4~6RgzTqH5hifu_UZ+??TP>95@8RhmX~uR`}8+fT}-VU4vOs zso6-awIjuaqZ$6qC3ThP9&%O_Fx9>K%nQyUeC0z{xFXw^Lu7G2p2(qILx*f80%2gZ zl$vvxZjiM=i0@{a<Ybms{94<jQ}1~2RVI`)l9%5N`Mnuc6=}!Fe_5DOWQ7`xnp$Ix zj__wD4E=M)BlHw4mdjsyv*!_9>NtHvHVqP@b#}cscf~;JO7=sStl5w$W&|1MT?8hk zXZQYP^_DF_00xZ&5a*B*)R{ehYifsv#SldyW|Li=HTyn+p+QHZ7l}nY90-dKg=pqf zmNnFtxAkf&_(m+Us_~6O*ARKIi_(W~tfv7X=P>eXhqPJ7Z?+DFcgrloR*I%G4fkJ$ z!OdK>lQZ<7Z^e)M9&%e_ATZI0BxjB>-#k;lII8m;<nZTKJ2RY!0mVZ#-tQSwrB2@p zk^pjMVJ}kNv*a_#^FeS>Oq1Tvdtv!h4wnn3*L{f3QSdM&WVJ1%NmO$aPt0@(vTcNp zA{fmMTIbMc4fraepa);2-K`uzTT$CdGG}zWwDk6xn{aAbG9A=Qoxjrb{aO{7DTa&p zGQe#kve@}#_FoWY5WNW8(nFCb`tEqbrbfkEgpNHVjhc^jpk9voAc&v9&ABqmbV%(j zlaw)P7e;DB=%_W>e~cuA(zn+>dC%0DJ!^l^7<pONgT7~kDTph_gCt92xfpx?uq!AV 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 z⋙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�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�%3xh(}bx3D4_7=_S-Urisy) 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 <Ni2s4C0Jmm~D zc*4Qq4301}6Zp3<6zcZq^pJp?IXXQE!IK}H9?hJc9}z<E?1W?RbQXt)CXa<P>nuQ% z2p%^JAr9*6QuiDV2Q8+M;WnZ2c^qyYs<(;7EkO$@4mbDf-7*flbyk8W977{NI0yvU zjtO||_E{NrCC_Dj`b@`@89Z(dGJ?ht)F0G0xPY5px8t9HilHTW7fZkq)(?)457r6L znD(II<M1;R{6PN3G;RR`|JIpe_!-E(cpP>+5EP%sO>bZTKyh^%k6ni<?9O1JhR_Q; zy9Z_0u=wfKGv}vmPZDrjfgt(G*1`;dFtfM?`G;-;OPJh-oC~eVT}x08YtW(u-36Qk zgN&<K!t_!XbcX>omYJWOCSd3HB0%!pIjDSQUgm7Zhn8Bk`Nc`-a`PMe$0sL8`y2Dn z)h8FvzzA^+g6zN+b{f*<%mD=G13!)38c;aHGsFP8zetB*N{0K3bGoxNlMJHEUuMig z%$WTzW<Ugk;CaTQegYm(=r40VBNDVKJIcRs003e#;BSIKv|_O?9$Y;-S{*F5W`QKo z4aGkb)Pqp=3i!{ok}U-F@=r0;I0BL#AOD3fv`Rpk2&jvHR3HYpdmzt4F8i-^3L&6} z`yUmE0f`Op;J-=FYMmZ{8xnsjz<~>!&`kJ0(jmABt*nrhVg3I~4Bf(j{m?xTF{B!V zzJHYt&Teb~!LzCHUnXek6ab+6A4u7MosPhCfO+}fH9zZjnb`t7`PYrlN>4!Z0%+R) zx9J$n|NWoa|2~86zfBN~|3mL*&CVA5|CEl_{&WAU|BHSD|J(Q;|L5^p{BQOJGXIl* zGJyZ+Ur-PNz<<UEM1!7xhp!$8Ul0VjH~v+HLvWq@FGnDJZ~ZHLZ(jZ<0r>j<CqMf5 z{vrNLq;SZ~5Wmh`b$Z6H)A0YtufJ3j%=+*A%o6<X{Djmbf%t7zJhF3gvNKX_1@W8Y HAN>A5r<$m& literal 0 HcmV?d00001 diff --git a/front/tauri/icons/icon.ico b/front/tauri/icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..210fed12d20bad28a82627da44b1fc31c0b4e40d GIT binary patch literal 47720 zcmd3NWmpu^!|$+kx0KQ)C?MS-D2Oy7DhMb_r-1Ady9+2Op`dgafQo{G5)#XjBB`Ks zx8$<KE?al-|K9uQKKK1}pXZ$~JF_$AOr1IBR|f#706IWa6aW`dK!ynbJis*$j{j_P z(Evay_#Z$2f3^X704Qby041gWY|C?k+q?i^X!xIP9`Lvy(kJUDiztvB2>>(t0FY#3 zWy;DV2-XC!UNJMV`?nK3fPoHN3yFx>2LQ(HD<($Qpj2CPR2h<2o=INeN_n5#Xli2O z;o))J0bIgQmZQG^A4}*-)sBuQXYug3eA(ntV}35vpoNEHcvyJ2_29`VE$%MUK7I5m z!yhu&W$N1A+l<M_jyWQXD<jvgKG^IFYgKpL3|ZgQo5FrUEeE5HDu|s`MBQ-xd41s3 zwF1^jUBwP8_ty-2>N(r0J+qljV}qFPmafU_FruV?top@#C|l{p^^$9vW6iCL@EsZa z<3OTv5zf>aB5E$?w5TOk<n->jy5+gr`DPR@1)3U;zh@q^tpDYm7!{Kw5d8QvtGasD zts8#EzPpVE`<+pPG6<&LXxXp7%91>db!|?{>K-}-%*VCNd)AYmDt?T^x>={$0hm{x ztJU88-Lenr<|gM=5lZS7yb-}drPn7^gJ~DwC%>45Dw18)uXLgUr_Q+}`d1r(*jos7 zzpm>gQ8#5bz#>foyH(^D88xnhl13a&B8*Q?2K?u`!F#pQCzX@){3b0H&9VX-xy6FL z&G@+_N0PXPp7oj=sz8;-hUmMGMg0#=jccDygqe)5VrN%MVGAO9sj`p#EM*@J`<>x) z-HSxD4}4X8Iq&twyly(hAhO0+OOJh9--r17@zWjnUojM{n@QSO1W=N^hWVy30NY6j z+*6j(shpK9aFVLpWj?Al;BQFX*3drOCh6#}tGPUjyKVDUoVTx|5rO7=u!2@Z&y2_X zIskfm{H_Q42p8nhE5fT6^@Ll{A~QO>uj_;{AFZ_|W7wg6Y&*mZR+p`bBKlia9$LA* z=Ib{^SPEdfS9iBvcP~X@6QY^yIDvHdbJN|Ms9njlL$Nkwa>>U`c6id6mUV|T6}21X z>lgPQ_rez|)x4o`LY}}A)_B$E#LCtL3Pxdew=Qzzrjh`#$b<FAY6X(bif{?mXMv_w zK7^Qt!SS-d3+`lyo1p^{ujk7q*n~+9ITkl>^-(@Q&)F@<KKbs0jEYp>`?VBVs^Vk5 zY}^mjwCU{(-IO4!bLz~brd4bB3SY+oyH5Km@yFsiUwM!q2fJv@XwU1x{it1uI%rD% zs%~icGe&QP%o3U@_z<pPGCK;J$%b!?9DU2)hgD*_aBdKLGjKnrtpe3Pi8T*AsQi%5 zb!j(hL~dKhkGQAuB5Es>Etkt>CthGB`PLjW*`v4)|1pF}98Rkb%+1m_D^h%FUmg7* zvpJGnxvO5ho8(NG%PvVx;?WghG~xWp{A)K7eBPh9^%SGuOF-Z&0`mI1bpx4~LZb~0 z^Z2Bb1ivSsEz={;PB54O5Sql*d+k|e>_)r><R?-`gwLL*jSO8ovbt8Z7&t_?Wqw}P zBxPj3+bn2FQjd`YggzNTFz3|WQ~*)7t|d7AYa^vMVys+=o}a0NBsoNr)X|?+G_Jd) z$kTk9PEm*z>qmQS*A3I(Zq@FOnNJ^JC6e{1Ckt`Sgg-VN4`q%Sx*j!OXqbJd_>G}U zmGGLXgV$-HF+ha&cl?$Mu_xc9*SL<^x?U9{hk}aqUKr2iCFA-l=U+NKMm1~ho&0&; zD3;?3-Pcx;mUXqJrKGg-Gpa6lzHRrw-($Ia{|-hwJuctTa9QWuS$0$6;x7Z(>f8E* zKJeAZ3D@2pU#CXKon>^p-YH+O4$IBd`;aMK$^R@{e;mu?8R6kT6Qm>sbVp)_KDNC| zc5n7#L^j+ts1H4~%1*u~@-eeqL=~uw!0c`@#XHLwV4g?;Ryg#iZcoZ>4fi~Y{Js=d zjYWD_tYoh9A@|^oXB#x_uhYW%-UHCT<c<es7i+IRo+fOwY{QOcZM2zkdWby@F@)y+ z^C3A;j^|P+@bpP`K_+O2)pFI$!Yw$ZziRntmUxT2cfN9&Q|CEDy*~=mi9jVBBUJ;# zdt(Wt`Dkhj=}+(UrViN=XLPrZ5UF;b?H}RZd7f+N+l8l(E$v%%#*-ZOzM&qxDBrde zU1MsR_^Ma+(BIk-K-()=HqBHO-A6pv?C+P+p26M`(rnn233R&1S$l~GN)#d9y0f!c z*fcSTs@m{Vff%?4{@QRhSVd1hhw-vcR}#lE+1EWDhnS`YM*rYU$kh5n3pq5!KDx^7 zdW55%!LlnnIDBjSewW7JSi2m$pTx!pUryt7JsyoTd9LCU^aW8QLM})@1&9!$XWQhP zm+4=$r`Y@2x~?A!Ac!8LpNjfEBv%m$)cV`(iiUh9hLzktL4KzI=UXxsSNdZ8;yqdp z)T}X7=@a+7hWMcC#SPggEgc(kD}SuXvNe3$3HKwMG6!kxj4b}{+uUmkbvFGtKdG1| zh}8JzJ@7!a3PyUuXYd>Abo4<>*UyGl?2mnQ039QZa9?V-Hhd|}8f(Qq?WUCr;}s#v zG!pyl)89tdmok?o1X9+*m#5C~G1<y_2I_R@I<4rgIJoL%6WsT2<C}G^pU&rVS^Os8 z9+#~-j)_U1TFUGHv3-v%-#d|O0e22MKCGg@UK)-|bJXi`w+^*n^>BzH&u(HaA%c@~ zcqdfTPV3m?wst6Y;dm!_maKzWn|g{ru5I>Men5Av^sD~qv!&RKsQs(kyAD;*(=_}X zZuQ~0&ZoJkWIWNimx6Ms&?9s0<R$Uh<0C@HhdK4sBL9a4(Os_CcU4&Bb4NzcfJD3R zf1tSD={8SN+w9YZ*WUaNKG_>x?p3*%ONx<C>Y89|3y*(1Dvs)UW{vN?s=G`y%;l}N zeC<2Rxy)5e@=)xtr!1(y;;B{(M%l^x=RuQ3;b-+R2?&w9DF<j9-%-ogkLRVT)?o?s ziqKSFkEy1c;~yY%LFPrlW4P(aKg2ba7rNV<f)_{RtcNv~C;y5a;eUn0!^qoplouxz z0v*)PZ+Q=Qymna@i(0B9t9l9(pKZE|E?u!T7doH!GWn*+xn!kJd3_OPUh#6~&kH}6 zI*jWxdIpl5S`Mja^JK_BhtHmj<?^z+87gPLJ~*spCT_DwtLT(_>Jpb-rfX6cylvio zwQGN*Ds{`!Loe4OQ9RrHRp|Ri8fmnpDku`QYoB8aK_}?Q{^7rhKu};{%QP<dpJA#@ z<d{+SP;Dmd<D!f=w*~c&E@~~N5n=PkansD;R|t=F#dRqzCL#9k0VhwXh<kz7mf_tq zf13Y;g)kr%k_d=e>irbGC%vf!{7NP<hX<`@l9Rhh<f>gh6p?uf|A+u2{<>qW*^gZi zp?Y@P>MQTt1|kRmfh(7+Oe!zB#r|Jl;t3Gt_y-e3u#`IhKt29H9469=ihs8NnsL4@ z%2h`#BJ-wAQ@)>J#9IJc_|ET43b78Kx^o;sA?=Va0Gvi1$%&#W>mIxMuE$|b$Bj{% zUv0|Oa#@jyZPz@91W(?v-s}OR2wK(9gaH{Ktxxhq$h$0jb@AQU)!$*y6=w8dpmM); zreWIjw4cjsV&g3Nj6UU~OMb8=)ewEu!6^1eAeJrVYIqf8+duHV2>z~4aFp%-NL<%L zk*Lk9+iN<mi=k29U)LRcM8LWunwF)6%L<1*aVf6HmoRs$@a9oJ(ka0#S3NWJ5AHw2 z#b)c!wKm+pJJ%-;;GUqS7O|8)F5Asbz6Ivl!{<ypL;=^nIG0VS+&}NQFp=RO@tDc$ zGz)4~#h=HM0ujH&c1Q$1Jf>XurCjTkItGuF2HZDPb7A4I#s$mEc8p%eZC+&JnLsy} zxlRO5LH1Q&><gs74=+7mK$Tx%z16s;zM{5|$8_IUoij(<sl)+2Uk}>1=&w4@BePR) z@(M|P(NS#*-aHoVZ%ULwZG}a3ysmRowuWx_;y+{?40MwQVERN25V|NLp2##Ed{xR# zkKR0G4WHb|;fr}$J=N$bAQK>%N4l&raIlPsdg|H|((j4tW6NyVta0^75P?r{eh>_N zuvoBsPcgq^9^d#{e|ZotbP(0ceYkfJn1dP1Kh@M*Rk*BE9Qu8=d7rKL=$B4ZcP1Mw z+f}Fg>TLC#T4g@QGJW={>c5gs5uZn+q!4@Q6wHT@#F4s2qw*DWFNqkfyL~8ijtMv? zq<Bz5i@>amJ|Ns#d}<I}-u*43WogUx3b0I#TG^P`K+Gk~Do;0(3pG&QhjUwPRWl6> z8rv=sbF6_m*l!wr&>y8qqsMriKj8<X{R^Y0gAJ^c!Cwg)!!6ljJQg)AOv<ZrVB5iV zqsAV>hhEn%8aX)t*0aULe(SN`s;DWWr9(BjbjtK>Kr!J|RlBOFcx>OBeA}6wUQ|o- zgibX7dC^h7hh42dWfKLmB*}B8En=v}MT3H1R!%VhJeFoC1+^moTmw3r?!}J4k75?a z!hl;Y-^z8D2N4ydzv1vg%6vG51_^!y6i((x?sXrUv<3g09^r(F^8f1*=EC)G06^FM zKfFg+ZaC@uX<8**FrS<LPBt^A!<RMY_AS|852R5mRfcOJ2==fx5sDxJmub+EN!bqu zvQ9>e8nJB|s`r{Q0q{P{reV*h3yK)+9TS5p3+gYNen3V^s7)mQb#BCwlR+ChVn!yU zdvV9m7R{{=Knx*`K&l45Bz*q1KA~|Vs%CYKYrrq*-W6nhTlJZ-WLdw{V5jjB-(rmj zgl|nE_^)xW=0lLLkV4=mEHW4gpRWrFwRy1P)>n2{Ue=E9I~|ppjW|sFfhr8D$+h2f zJc-gvHYU%9lYvWAjW#|~PK*8e`_l*8#S}~DdL7T(7*o^;=GbR+aC|M!^R$&k#UpXx zL7|C^%T5<<AYq8rWjX#5z87m;8+Y|jFKS&V7>aqPyKYU1x2pi^@fS3(k5MEZOXHnT zg>Q+|;muE5g2opWtfB_(+3|-mB6r&fdUrFA;5cc;hp!+?7D2>>?R#1tay*sOt>rBP z?e!!~I1iw|>x+tU5+*2rNbj;UKl3M*<S~OQ(*itCp@pWDRzC)~?6!c2^0r7VS}kP` zUc9@SjceA)&Z?9R5xlv%e;T#Tg4oYAkP;^ErLU;K4+DGNQB#SwX2On41NPPx8$cxN zs3cmcBntgI)3Hj~(w`+gqQ3SR26VQrwv1opomq-ADClmP*iil;m^_#JDiPHX*gtB3 z&zSud*<W#6WpPBeb@vOYONV?2(_a}>z>FS!NYYng&-nOxY};!Ci*|P<u?o=Jm?7)M zS--Nsp9>GvTPTFD>gFQn^x!+XDDsHJMVnQlyj~gxL$NX{VUk>+O~Z;&`kPeI9y%79 zY|9>AY#X<N<z~8vZO816)hF36OH9GJ+$SWbEh%5v;T<X14>+?C$KfoPX_4db`F7|0 zy%)xNlSd!MHe;K`aveWAbdvA=$vjJ?gB4}X?&47ot#KFY8S@KAi=f8UrVi3ZvB~9; znm*tNqOL_y(Ac%CdH}hMwL(S4)ZtP?K3TOaJ6HuB-VT^E7Wv9(n(El-(bc>YN{!eD z;qWvg3m45|1Rrh1i*4!^2VJikNYI86_1u=ompR_Ryc&JK4{SnJ(BXo*$RP+4Bq~a} z_bPtzuF>@NT#gNH7Sa#z&b&H$p)!y1w~e6{1oClm@ReFARP<3^zZLPXP{F*D%PP+- zh}ChwH8k5jWZ)ayY6j7hToIUWqk{l0g;`?wTf@Fy%c{3EOVO?=s;n}>g0k;_6`0u) z6VlxeO;1=VM65zk@YOtb6%hDNEKv)8?fIOG`>HeA)Vt$?4BH#?^=Mj*;{%9GDlam; ze+!>fqaaLvkp9P$I5qptvQUz|{jqYn(<=0YHdY<TA3fc8qyQxec{FXl6Q)AI;d2_> zx7suM)R|C}E>9?4MGp}cuyh}>?b7;o1YLaeLeZf<=t%3N%5&_nr0l-9I84=1b<=FS zM#KHa-EX7)xaklHK6dG%hwvr#?Hd^S@Ji_MV@_nZ^DwriDl*Seb2yVR@F0J+!8cs( zg}aP7`F9nG!+;VtD-8rh^z}#02kMosj9FK_2qb*}h{KF(KZdZGVoBCI3)$N@f=8>V zg0LR*{Q(8oN{~IcbdJn@L~NW!?T)m6z;fA#`syEq2@jk}M;ZU?vV>YFjk`v!M{!|C zMFp2J4>Zm#2)W`ltDt48kMZr1^!m7T#l7&O%IfPXXHW{b7wJ$(_`xJ1(asm0D=TMB zN<m32$hvM@&U{)i4|j1+oh6Sr;PX=?_}`ldf>-q<uB&S1>%uU3kE@ut+Bj8*65jam zXMId<p}S?58<$%}zRvU9FB8aU<q7)NBSBXOiD}ACeG~IiH!M>bp5Od=oewf5GTh+P zRl8E!v2tM|qG2V$;E03+^)@OSBUL}9qs%9-cHbC~gvdm`mPwgPgZ41?NWbx!O52Mc zOaHi67d_#XOUb?KtD>xTtO!4#$4?wZ%ae)OU{?qh2RcIJL7>ivG;LaNhyJdMc0Bnk zOMC-hs-*$cLuJvk;gj6ZHW8BC|L*KD|JB)J(zCArTu|CFx%J<Se<#wb(!cS~5rR(u z(ed8@^zqMC-rS9TfDws51(Fq!PIs3rHE2gKN^nv}WZ-}uB~a&Havs>FlFP0qoUN-t z%%9c850a7H6!Z=z3k4OgpjNQI_D0fa@0D@WTS?B+A@K1gwCuAsO*A&0Q6xm{bgbvQ z7EKI(ryF+@gtqvw+ln$-wC9D?Q3McpA%h<x#3Ae5FQ^t~q@Db@U@bmd%!TJa+$Z9> z5NsnIFX{64U?zJauv$Mhn03HJ+01N#DfltfCsy@Z8=7er4<RMi1Y&<+l#Bt%!L^N> zvS#&<2DxZ<px%s_=S$aGx9K2Ox_58w9KuEdGGAYHvzC3tgT#$qc(|ZycYl%JVv!1k zr7rGaM{GNOMo^i5{NlYpYuqHtW!PB+-K;RkVaJz=%zsO05+|&pg_G>4Fe2^u@-wt+ zt<iec6z-OF<C$ELM}0Ko&G`h=m(?|3`oug0ts0D$pV_H^=Le8Q(-cxo7<p(pD8Y|j ziRLboJN_g&LASz5Ze54rx)^p5b{-x&th21H2ID3~b!N3!|4AKgZ0A1ZVyC~jxl9It z5ivyqF^P6wiyfMWO+TEPnT2##aT~4#?jR%O!KAj3Ot~Rwu_A#1RIX8J(~%ZuFWUl2 zZj~H7Mw~f(g-E%KR)DUL7xKnX(lmQc%5}AWOgA_NMgD4V`Mu$uACK_c5%ZM}9mJsy zrdH(WjB`_W)<DTzuDZ_W-?W@c>bn{DRLn-&?yumPjTpbvX-Nmfa|jiV{f*^Pk{*=g z>^yfgSL#Z!Oxnf}rvpi6O0O66@Fo(T-}16wbeP$kj~ZduEoz@OH;KK7WW~ynah6r{ zcP5`>H<pOnu(r~tuBgcV!Ks#|wiz0SEIAsBm1=PX-^@G8GPUx7(Y>*wD0tWF^ss_F z+Hw!H{gDi)zwNlI2{5uCGyB}IxQ@}LNq5|9S142IsfiJQ1}W)R6UNoD6i#_mI9&C; zzR2bpKxL(=&t61+I2s&vO1G}2cgd+Jv^888pXd~BYW7+m*v$|P?#28#!7c3YkyE4R zVpnS$t%Ucuk3Kb;^SBlDX#MP$i(DmVSx59cF3ds9+8$Dsj3leT1{II_UH*p6X17m2 zeS3zTgQ`~yR+G=C>s3)*#BwV0rNF}oOddE2%z>cf*65)3CE_%m({BbdpC2_Ye`dAU zm8@BXSS;wbVqwig$6v5y#dxmLwX6rzzh%M#c1o3|R?|@Clr25-UN$AiPJV#LHrB5P z)F~qLv7W`>kG+H*Q(=HhL-9-g!nHltE!$_i=pYxJJxT<QfsXsd`0Pl@UA$r=H4rcM z65z@%6^m(UouvGM!57XZWa)dYGzgThsUPB->LMhqkJ}>?xoEGo_RvTDUVYFm;gWJk z?Uk%9AGK}g;$Ui)xXWt1fEfQTnv1a<l1fqx(67D`F4zeH+6(H2HZ)xPIln?LjUW|C zjnOTKfk#RDW>_M_>i4J+G{!g90QcFImX~VxQ+8wgAmOV_&BUzH9m6I7qMOGa_4$0u z9&cLBI3x01OpLgK3WxJkWc{n$-fwO9-Q%or*xM~DJBPNszzVJM4U@X=@|Hu1dTi1W zFEBF~J(H3R-Kx7Erpajw6{9iXMZk~pcACSkhz3l_7Ua-Nl}L$lxV4@jwA(RUL4&q? zBx}8eY4{EVwZAX%iXG@<mb#Tcrr+R3A$}yb?~roW_;xR$NR!TljM2L{)ZVnElrWWf z<n-OOJ-J<d;!mfh-*Klj#i%fTbmpy9vkfc0#X+rsvo#)+pjdGq-b~ofvDAR;nuy6j ztalYbdqGT*#G${jN)e8vRuXkF5o2&OcT;|YAIhGZ7jjwFJa6RuH2&6{J(<YmO3cnS zG-UNLgm{zHo}6F78n+M&UBsb1qtUD$`9k-u8WQE-+)*~OiL~WIYmob;TGkm8vXDJP zEMHsG4WfJaD4kMwPmSCZMc*^SR!J2keX|rM_*4ltb@-y_#toGzm+7SASVKYeIH1_# zEhM<pQ9nQ=8N41P3fr?DI`(M%D2sZ!Ua}vu17$DB5IlKj@v!|e%?L7OW2q;S`;pg* z0n$W0rx+T#e4JqL$Q!t#i-cOOz>-#tmCCey=vrGJC~v4H_I89Q4_?)k!2-{6=<4U^ z*%_<PEHYsLb<I@n0$taCKW?Hl!(Q7r)d9(RO-VwWky|UHRghr*YVUu3q=D))6=uvu z>HSvwoH_CetVuAd{K7Q}B}ZpLE`UY^1InXgzQuQIlGzE1x4opb@3eo00iteZA)2}L zOy~h!fa8-@h-&Vt*!hm|X?@@f5)e|?#>fOlu(D6QKW(|PbPl>Ri)v-p#~`)Y%jld6 zal;yoFY?uydp#a%V-8W#MXu1}X91_4xZAyFND4OdQ7rok!zP@=eIC{Cobft!X)1UO z+UZ)K9rrWz(vylVdQ=CSE5*E9tIk}#0(y+@kf$s}pH96D!Jcz>Q*3C{wdZthl=VAW z*gv<%qzkQxHDW+|jIDP*RJ1xoHzj8q{5BRuzI`Ro<?)I;Mzp`TcstiIxSG8-^7C+t zM^XRo(8r66ntIH&5y4xpI2K}9kkLFQ<I6ELrkPre=0LnEFscBdsZByIYvUVJB!EoT z)<(V1xE%V$tZPZ)vQ!RtbDrhU?;K~a0@6ZARD)8rvkYg3Iz#1co|D2y3PPrtM!My) z*|Ckq59GhnPtsi+x*S57r$KhyR}6a<C(gxyR5b{j<N~PN<4jLi5L<l<Xp-)Xd%gC4 zE%1U>5<aJ9wU_Ar{BunGf@gs1#XJsG>f5_qGTMNoLgUt_r*UT?)MI6bL4(6Z!key9 z;<kX0D3FKmWtIRSN=;MmiiB$A$1NbC=p+4uM5iO68abehZihI;O8$GkYPngsvHz;; zF!tBze$%LX9e$&(=|wnvjn00t`X;aSq;J%YeR>JAUrDa%nX0BG44X`%Jb7~p@a|9< zFT17*!ns%(3SNYZ){lx`bgpjuCN&3_aocspne7*}Po!z2+`gL6P}miLAzDc#b?CbN znOTyc46dTC{sk%`#TUOls)@c@_?KTua)>s&nIhr>9&c`Frj#2F+odaQ&9RXL;Mi@o zM@mOEiO6medWSxp5;yB9m@Nwl5`2r^nQmMWAf#6Ao)aPGoWCn<!RY<A8JFsL4pukY z0K~Q+V}9Sep6Sha{*GGi?|Ur!v>Z(vJI-@;0Zw+2Pvbx5ZhdT{*Yn{97=2=7Hm!*0 zakWr!R%8;_2ex$Rf(Yf#?uY?`X*Gag|4m@byM*pTn&2$uiv*y=!YT~=uy<DRGj+uq z<_iKp&f(B9!n^NLK_Z9{_!~u~s=F?i&e|~bRpdDS<ik~9C93wAk1)p8x+Q(FJvPQl zlEs8y-Sq*ll~g}9Y(^GEm{mTLQ$iMos%Rosi-QS^Mb~ra#<ZHzSDR<@KWm$bw?SwS z2=66ok<XnTGJXn?%^RM?uJM?1SN^p|H{}tzfJRkJzqQuVjzZcSF%BRhv*DlwBNSeR z`+%BQbSH;q>l{k^h^QKi+;vu;`3nw?2l8jir5M)arb4osR(D+840Akxyzmod2k8jv z35xX5fE!?s9QVaHxkf5i#QF2kU863$zlQ<s1jWe5?jL0AC4FM1!~QvV)|xs)gUs$H zt<o66QRCJ~2N3L^Z7fym%f_mXa4c41<TU#6TN>KNt|nJ={6KqTPQ-a>l6<FFn^~IL zt>A7;bGK&`S_1mlb&BtV1@%Va^Jj@{>S;!`j3rV^%q_&7Bm5$P&cor&9lxNcQ^fgv z=k|&jRZmSH{tQu?`=_#QX2f4Le&B8P%f`c~kXDR=QK;+wV!v=LI<Wbtz_DD}qaKgz zomEqx7bc5>kjHMyj`#A%H0clop;<I&edzP3WpE*j@$VI1r_!69aihLum{&*G!WKA5 zN7GWf$8lrl*k_gm^+~+x+_B!d_f!C`5#+6sQ*WubBr`GvvQty7qB<)I=T==Qsx{(e zbly1*m?xmHLD{C|Fq;}QJL9iASKhMMOO;XWmTxETSsa{{sZj~rtUz)0l9FUQ4bLz9 zvfYzE`T(m+@K>(7YaU12x-qS^cw4yIXf(<5v~*;zBz<Q8(!B@DTDhlFS=seLe52UX zAKpB1<wVjsFUHyr-rxBBy}zi?7m<fD=DgmOAd(%(ZL2~I%3ytG$-Y^)dj9-FZqZyV zYju<y_t6%vMW2hdR6ea=)D<6=tvb%kscHnAif5Em8sbxE{GyJ4KJ0fb5@|SaTlfW{ zw`xAnB5WeQD{|Btu34jL9Wq3MSSJ(o9OpsFSD=ymE1&&?$04us9Tlbt-BCY$QA`9r zL$2CR(yLPsd~{cSi?o$f_7`u63_RuH0o2?C`+EA@j+($bAimH7+B<5%Z&R`0j+e98 z8gn*jXgCc@F=+b!Q|?`1PM?a_6?$wxuj}rgbTC^&2|cM1cudf;eD|CX(2Sg%#egQf z!s*+wvUFMTw>suCh(q>i(7#5D%T|X4w`ip5{VY_ZEEvy=*?)O-wm(ZrO4XS4C$B7( z^;99Q6+8<cu~Yc<%WFUTNYB)h>@^Zahy`_vNAM+U*{{#+7nzvYmn`1=SfuP?{5A^~ zPr&_+ZKFp<=Aswhf}&P<zlOm<Vq@AfA$2AVzf(Smg0JG=ikTZSz7_ko&M;>^$QpI* zx`i=9gg)&qJR@6UNabDBb0xn6<J&oiASLXz7h|c-p7)(ZRsM^hTs4TT!+oz>UeFV@ zl$9I2Mr#jozsT3Lr>0jGIsL>@TV)Y+#WSOo<RNa;eGOrI`*BGI`Z~Md7mrV=@y%h0 zwxP|0sjoh|trdKRI5iqg1G*@#>^yJc`>92XL})cZ`m{O-qn|l`-BKL<yGCE|>}^^a z(Gmt}Y7kOi97^h!^I<@q?VrEL&&?%!(SgTECCBrEe?g9aXec(O7@rrunxMbYjf{OY zztkY=!ogT_*ShIPzTT5?$}^F<JbDyY<SJFV$vY&pOq|25L_lfqiVY2f%M5EMJ^5(l zb2QU-<AF7fY#pINUgIlDz81rnzZ%!ZoSk*6VJm4B-z-9Ycxtlo#M*m4zCyQXt|^o8 z^qvibj>b$hhK4I!z^v8TW3waI@D3IlQ{5d1AC$rT-XT%x9t0}d`ACJFkV{$f^IzUk z?XEdC6xAJ%SuaVs9+B3M&;K!1szm3S(J@{D!Bv;~*w{tRP?a42R?XA9btwE9;)o;s zg7xw1NI>@MP+1pq0@U`3xcN&<us4L|Za@#hBj{aL4rXIi>YBvA=09bfVDP5_0a+HC zIlXNOtNg$W*^{^&NaROR+6}sfDSw3l^N;s@$5ve9aihsxV=*BRw-#E^3NYQvag1aY z#yqG(=h8Rx%Tys4{3lHQQhlN~*IR0vwqD&-A;-v2I(POS8Q`Leh^y9j!&>hrCuiNe z>JmznkkI-TJQHo0{@+L?hTwj~e^SYN@8B5#;G6uPE|nOV^N4|-c`(X-w9VM{*tThD zqghU-Dl+)tfbNro=DxVxczZLURyN1YJ0f-jX5E9Tfcra}_6<R!v)DS+L4xj9RnhlS z0u;2JA4=rokBo_tmpC7ywWxv?PC@Y+5e_co)Y+%`!i0&_23RxkQ=(oHPvi}C5%B?R zr4Ykfsq6v$q)CyZd?LPzsEHuUBffV|)?3&<6&&wFomrSQkCi<McQuXq7A<|9-7*Hr z1H#j4dUxT;RendMR5va^NgD<Z$3*!)-Y#zzB!|(~%Y0*v1Z+4-4?);4=nJH@YGBw= zkyIyAjI<w_m4kAsl+GVwCXA8mhE1m9p`a9_pEyyt;>BL}Q&!MUl#zp?-lhI<;aq6p zjm=ioqQyY?q7$yC>R7pmXqt^Ix#nfRR~3gF%@Fk|P37($XmvttM(#%J97*ky4o<s3 z9$b{lh^4SRTzJ9pyx(1kB^)C(i@8GFcZ3^c4_sWA^Dlt@6mz-8DP99`D-xvH7f3Bc zorXiPs@|EKpG;p}GbD~GjZ42tD^v;E8AinI;BZHaiimXqS-DqFy~+1^Kq)EKV$FQd zsu-`{bi_wuA}#zp?OY(s%frh-2?NC#DbvW*{zdlH-!q5Nx&FFOQG~7TJ1Md;{w|tK zlxKEvemy-xb18_e6ezy#So;M*WkS`~hqePD!YP&0m85<ix;`2yBYY^QLMDg9<Ccrg zss-iov0&P=1izfsg0n{bQ6vGQdi%Gv>T^ceL~+GZxtBHJmSCI@kueC%40k`$msJCw z5mC$~L)NHvX-sW*9JSvI@=uM0wO?lMcsT|oi!$+pQbn0CHV;7=_4M#5!oKT#&FoTY zL#T)eW3|*^${apPyjn`8GH#GuDl$Kj(8Ot)ec5~q_{X|f)fwK#$}wPePQ}W-g;1%F z&8eynT8>mMuKoJ{l^rIbPsoO6agQ3;N+v^H5?7^TZX>(+C_hKBbEXJ>`bLS;hq@v{ z4t*C@+qL^6l%FsHmrQsed3Z+<)N2XkQI#-zfIE56+WkN86;-LH`kmRS-%4`rmTB2D zh0wmcg9Q>-%j|;lai6MSd@iJBct(3lsvR@CXsaP7aa#zCY8Lz*6Y3-9Ox2keeKWwA zdeXzOMZDHcN*4vgj5t+WSMXdmH2rfwMWG|_(ngyD1}eZH)!4)3JlLmcTAk*9;1%C{ z^pgeB7vgR2jy0J-LapA$$EP2QU6Tvo9*l>U*u|+!RpCyt&u1dm0vn(KDYA?--~}*t zucB3E$Po`CVyG~u%ji(>qh!!kr9wUI=8`t%Ed@!Mg8V}DAC}CQiKC6)1KrJI>VZL| zf?H54IvPS;!*chINBDEuR^4<-r=W#>Dp#U{BD$D7_3`B0H$Z|77&qNkE%s<p2SS?# z5w|ClUcS}kqf+mCk4vcg_99{H8mQH<<j8Bs#P-4|Gch|+dt#`l)#Sz_X$}(^;DPE` z!FXj;Pb%{ag;S`hD@+9_P&zS_l!kauEUgq$U-JhUi5QrE0e5NDW+8=De=E$TxVa`K zYYe!y%~uNMQR?tx;j709EeefC7Fm^hQT(!08xD)<18ll}<#&x4i;N-ThOHH@li0tb zht9Y1XTN!NW>ea!5J5*wNXPnsE}5n=^{Q~vlT0k&<^!^J2i=6T4V%^jY#$s`f6@2r zB9ed97u1tqR&`HCZ8l={iuXt+@4k3LH~?D{b?jTm>G@&AG3H6Hkc}iq6DU(%#+rj# z*rEn1{)Mx25z0eph+b47lH{tD5;F^Ztpd35XZ9vTTUgv=X<e52winZPT<o=f_AzH_ z##PtH4MuNt?~NEt$s~VYfdKF4mPjoNnGNet1JR!ZZLhg7P?si7DyCX+RUz7+fc0Z^ zFLK1v#C!N8W^0XO=`{Kp0$zX0dm?#}V*zh&47nXMNZ8P8*-4^55yD)>3nWtdL4~4b zi5<QfZp2&gShg*<3AeGi%T`QmKE377DFt8@l}g0nM+3ZH6Gt21muXn~8N@KUG(1T! zf=HL=zg@ax{#L95>*;1b%x4Q}`76SPTQZouq^6`Oeo5(Er)4^v1wojc?ZWH4FtG(_ zk)yDqqw>&E2)8Ji_gbeXaa~~tH@VtyB%AAC%dFadPiat|rhkY<tSBMI!z-Rksbb-m z+sx6C;@)QjlrtGnQdFkmE^SP6gjF0ZCW`|e`MbP`y-~2Koh`fYG!{WiCFZrU)Ny@z z(Zw$xbYtm2_zW^bMu#RdFo}z--`rHjzbqF46Ml7r)7h7QoHL8VJ62~-&?aP)<I`dI zY>zM`0F66>U7Dfzk{`t}ODE$r-p9V9a<8s&fE8|dG%fds%&feim02;ms=z&1OeN$K z^ZF;T?TkG9FKF~dj3#3V+}CVVa{5rW)oa4+qIwfh;wXGG;yM7WNGF?t#(Bksb3(~; zv$9l-J~A&dVGH<};^wfPaD5Vk&`G9EnV(~@2Z^+sn=FQY*8u|}Eu>%qk<<`#|Kb*n zSRVf9v(Q)ehw6i1Y=S8Ce4K7-e{A$#GtFaMxU!OfWTHMt(BWIm6-3Ze#Ml{p(WoY4 z5BAeb9$b#W^l}B|0lT&>0VolW#)?Q>{E!_qE#aE4GRmpD)+y4qF68>e8#s$&zYFd+ z=K1N*({cp9&ScbVIVexx%zJqX_q6;x{x53g^|@HP&U-m5D+bSE)!PnpyZ3gpVK%#h zJ9|ET>a{&DkT~m%cn@R67TnHZL%sPiKu!0)L@MfVcGHLx=qGw|W@tWy=8i@#yR9yz zxKk@rl787FYlaWunj`5s-k|AdiJf?m`=`B4^dM)Bn<=4I?#C9Yq`$HhB@Z*UuKa0d z1gLv>>&~e2XL3;Rl3o&i#jtzJcN7UhUA(d#h^NzHuz>7%8bczVO=2)Ddt`2cL)pA4 z7ZR!uw$vg63^CVJ`ScUIl5qwgST&cPYp@tbKG~xf<0e?i_=dHTV=#f$YLP}pGnI7# zUxNlEy4YcUjtszo_^VJ}`HpR86BE+)TL>)|9Swhwpo}J(QC%_Pze@Bo%bb_{gl4`A zy4SX`OUVG6w2FEh)G8jvn<D;99<=&0&!P?AE$j@kH5~*NuKK!SG^1Nj%zD)R6RDpm zs$(|PwX2W8f-m|%NS_pJN$eMtbfgIy>5EVX2dm04j@d8*5ULAGd@Bw_GDy5%r#oEl zAN%w>3GB`K^U23r+cK^3mv~Pio}iHSLpznV`*^OqIJl#c{0DaJF{{}3pP|t<G!+i7 ztoSopGx6wAt<FgUuehtm;^=c7!)((3;=Wn}Nxgn+DY!xn{r0OxYd6%Xl@u3(8zrhR zy`DF%L8VW(i|I6^n~HjY>Kh09xSZcZP@e3iQH*}&`8xUaPcz-Cto3l)vA>-!I`79i zYERoYx|vIevX*kYt4P>HfP<Ic+PAsq)`M$I1x57PjFqlDKDz~e55LVxS%><C-hB<$ z1@hZ{D&L|6Dk}Pz<|SJGVdon%fO}gO@+IBAm{PWY;U|Nf@-1tCh0*@vRp^k%vaJqp z9%JxL6*EyImF&kz58(#;hWj-`TxE~M8aBNN+$YMbA%w-L&@7JCzAeZ3A^bT@Dqo*I zlMg~f9SIXfzt2rEhKL$Mgwl@CtU|PYk_r`&uB9r)v?)azZ&_OX`Oexq%3P1?`;ZOd zG+au#*3i%X<}s>|pf6BON^LpUf^z|`fQh$$2jZ+^Max9(n;LPgy7cbGTZ6RLq>A#N zgJ_Uv8geR0TN`)*lHhcOP+H-T4;NJyn5Y@xe+8}r9lV#6)Sy+Se!DLfzqW^F-BY<_ zL+fBeGu{`P6}5JCYu6=x%+1H9<NiW&@i%`)NXTQr&xL40Z>W-;D_`_b37vBdQ&3P= z+-^_#dlsBPAY-fj2_{O#PbM#Xr_PmkA$$`67LrwmXi*PVlTo@Fzj(b?lo^#lX&$fX zip`VJYL@+iw%E9LOU7TRT!YD#kSBwWcht9%Hgo>NaytervF96JS;G9w*#kgtxM)xt z>XxHgl=h+oWO)y_Bkh)n(Fl4vN#Rz23x${!M9wA8C2KU?u`*C(={IvLVVLmJ$15sg zDgvQ`RN&|1#VCRwJ3m8uDMZ|E_AP>XL*{I|<*Hy?-~e1AmCXpoS#Xa~V~=~XTvX$b zfBM$9erz~vP>XilzvO&KIQl5|2o`XP3*;CSX<Xwh&i$6KC`4&6i|#$H7b|geTFr-w zT8v*vck{-wWnf-=4iDHivRsH0A5Eh$v)lH}7Tzoj97^h%TFf)YM$G!_Qg!$@*;6YY z!NAATIetL~4mUS*d*-P5*-dQz;0?QopMCeGkUdSLICafthIl&2FB?cviw0(t@3O3T zKXtAw`q(QSbcsditqB$757sxi-<=s-$z{nxUQOTzfesVWqo}=G*Mm9Ptmr)J-#BZ0 z&Fz+D#)Q8297?&p$t40^bjEQn(PJe7@9X`P89>qMytU@iFgc3v;3QOI!T2{WJ!)SX zK=bzS8blJ3e^=X5_fd~s*_xj!OkWg0P@c^F(gQQD@Ju+>z*57ND9Ugez)&e0`x))) zVz9U+^3A9+Q-KBvD-+kp9VzaD6Kj$f)|mNoxPF03L$aZvpmfMhS5X=;%8-qln?(Va zfE;-rhCe+C1|BKh1#A35kLo`p_O?*gO*z_h`O0(8&!u&f6gDIvNCSM5h=iQsJXM}i zAud(N@g!aH6>OAA@+~X8=^=M3l&!9CW(#nX$hGV$DqtQMgo~g;3CZGX@}aaoF<dqf zpO{KR@YDw3lgZimhDiJ~RMR7Eu~uhW+Qkgr&Co$U)aC^x@bm)at%_4E3xhj1xeGxz zkC%l=+9A>)ft)~eHU%^LDdewIZkGvD(L08TjHdNC4cuc5&Hk~H#9nD**SYMS8yIQS zgHy>2MtPp^V!c%X#W2f3r|G7--<7$TlK!@LH-R8{q3+@*4E@nZ{QBez;?_77aw4fm z_bTU?M+`VD=$d3}O<z!#T~HP>k8vbDCg5H-{sCJj*6*QRquUN~b~m_c|JMihcP8&X zut^u;WM+H8Nh#SXE@szaJ$>TW;#|SdcX6|SkJC)GTTThxHT2M2YG5ArV-@@vJ8>F& zj}Me~vMu9(F;XK!W?N^cn&ah;6>jiQee(0*=ax3+{K-g_340-z!}STjKB@(hiEV!A zx9I!sc{h1y50;F{Yn8mE?0GP&fqS(Ax)?rG!hx8{J1SLBw2y3wQ=g%KkAwxprc<z2 zSy+!D-U=09<Dl2|$qa<2+AHP$vEW;P_h-bfnH197b`JHGiZ!T88mrh|Dy09Jq^gQN zcRSHrl>xqTV2wRh*C!x2GFPqI_rCs<x&FGMf)VEmjQ{Nyj0=2&fXbA=mC-LNN7-#` z1d|HU-1*(2lO5D=US7v6g;0y^oAMdDfiIWFJ&rwMU)q3j*;BJY_DRKMhWCb`KiHE& z$0(U$7^`X#ubR#HmI?xj$70>`h&^ybdr@}|yx|39YOd_&(H+;hO|r>(@&1q>>Yrf{ z^07usE{gK;s;u0&GmxmHUeLH$1!_c4>j&CtS)lesW6p~R8_X-bIsdzALm>Yw7a+#Z zEgaIc=fXZYclaDnz*1|0sd)&5gF$If+R%{Uq79ArcQLV!gch8-!NEj1?7P){@U3MF zc*R$?mJ>UrTCl<N;N+;>)fa}e)17tE`;kH9Lp9E>GQbU-cUCiaqdH{ov?BgnVEa!O z3G-d&YaLZnwM#E`&M1a|^YoIIq<Q3Kp{dS1GmmC=AslO&whpriwkrn<f*Es=_#n~! zP}T81Oln&rXw(NHerGmOBsA8IpD?P`_r=p3LtM$>gs4BoTU<3IxvOfasf(j@D59mv zkHDy-Vp}i<2}vYeaiiDqe5QE3H9I%9K6<}7FY&FeA%iki{tooOzG+87!;6(mcA;98 ze~l?y&p&X%H1PHwIAsH$F#WWq;+_|s5ODEaa(#d;G>Q96Ahi7nn0})h^``;c<2VxK z^IkIX?3RLfT87l4@E+2to86Z*-t=I7DscB~73p}hko8Rmogp~i&nW*{HX_prm$O5P z{L}0Ih9;Jt!AOuF%rm!L(BCKx2X0uG#dA2ShTL?7zKBClHTo6Ymg)7N@w*nh)fCjP zdn0rKZX5@IPQRPEN(E$2f(*^BqD<<I&;u(l$%jf#n;3^3`~nfLIBj)uvXhAk!&#LN zR=E{_1?oP{j%W_Q+YtB)Nc2<|HR8cI)t$#Lf+i5C-Ew1r_IsdfA?C%Hi3V|+%qrS4 z|8at!qj1yhhTs~|-Ut=zdgRf1V)=V9s+F9=yqQkYARL4cN9@_o*0dsF!XAQmR<m&H zRd7czyh?fW%VA;!s?Idn4@Srklu1hKYuEb&aV|tP&57bfJE*=7uXT&k?ip*RYKIQ_ zqV;!F$`(EM#Ta5}81G$F0q1_Hzd?g7Pt-^-?<KP=EjSGaMAESA*~V6thcbV4y;kt~ zT}g|h*T{!;EjfY5b5*9cJ?fYOFoh%Lo`Rwjx~|@znR{B$L@vFlXe!P$C>3+7^MNWV zbc53%Y&CgH0lJAvYq?1C=B2<hc^Vo}zXj0;qa;VHT?x%;s}-H%sE$bD3@v=&N`h*V z-6fSl*Zj*TA`Et9XSH|sp#8>nO2%iHLL#4}dB*ww5`2_L^_NmLzp2{!bYsPgsLFo2 zVc**8?HmuWf(=_pcjX2xrfT64szGy40-Q$|2WI(dQzUq7E4=8ikT2f%7H@PnTT`U; zS1o6=rX$6`dSNb!d}SjgmOU8Xxf(dew1IqQrxhLW`Wh7)%L$?KSGFh{h|AU<$NGRK zDd>SX)iP<EV-mX5mkiuc16^^QbiqMQKjL~rj6qXi|E$aDJB2ovK8nYvDw_S0t_f=j zIvR#&oybvl|BoC+mI8%8b1P^1V&brC`+1PAr9Cvtv$^Ji<e*U!$YBBd%DdO&1Z|{P zRP!&~;pfh4I7j1f%?RS{q6EtN<C<)B2J^o7S9N$<g&Ee9s$7&hQpCY~p*m55WL%C& zEroHU^Igj(>ktMPfJzK(?Q#9sQe+!1<CvSv+c&9K>fZYKi|pplV#rbLrX&X7B>Hlq zcwgcihj=ypa?(va!o3Py{g%+8pFIHim&+380Qt+)Tt9BR?g4@NRd3Y5QS=W2R>t6n zrG!JO$Kym1yryn;x%5Fdx56I1!C|xsj4M5=)A4Q#EcTAnlr)Fgf<atiy_y9m-HR<g zgfHjoKLQ(-_0l^;7~}I~FHIPy82P+8>jX^(I18&5mXeOwJkdlSRW`=I*2}s4+RH3P z(vUdGKRK3EW25u=GxZ{fhViL^OEN8gdtrY?&HzU5hRT*)=`n#)Mp<Aw4RG1~nueX& zAsc~Waua=dK-7gUsVDL|mz5a#ub4qVF6QSh#33%Lx398xDu_IQm<vQ~MB>32Ti3ya z_d_bs1M+WMnFTOAyqCskS82ff4!XA)U9tNhaF1<@I5xV1%QfZx47fQP3sGT+0_OD7 zEWj<{&*6tjQ=rz{SxnkX$MT^LO`V~1*=ObKKv}xZm}r_L{^nx7^mh2>E$CXWZgO_i zmgDjgt77kY#Y28jQ4T7@(Ad%U)!$9kvujK#Kw*2P4(nxt=8I6^<zd-j$F6!w(~+?M zt#dDmP_YJ;3Yw<yl>Wax0V;4e74Xj!aDMRC0{|jz|9JuvTha7LXNLyL&I|9!@S5|@ z9Oe*7v3-Tu&?0tQ&YuZCYIH9}9dD9pFGcGMy&5|hzw`-X^WN@F9mg}nh`}<yz?$Je zJYrUBb)Zjy(eIf~jY>X#&coBw!*f7yb>p`Qtu%*ftI~Qx89Gc2!=1+_->Ik_I!+)C zOYuR9NxrOhKLyO#tP{Mg5>{&4F6lXcjGwWktq;Yx*WDskdhZXH&Z<QShlT!rYc2HB zH_;_!*!RM%t54wB=|<^l{wCys^!4b<Kdikok8QRTa@5Y?iV;b7ep6RHe64+(4q|l7 z@J(?vY+dCxW_aMVT*B@5{5N72HdTKj1%^6`8q?^eNA8rXjm35izn+O)a6)n`h*fXq zuuXf#R%raHv0V7|MOyN;z0$@Q-8t<#I;%3l>t#&eME^3}rV7g?)I(zVLw4N1zwMpq zelCF3H0lsa5H9JJTtLVsr)4K_RBpXqC9EIlzY0BGXKVdTupO-x>fNR-BA`Aua+RP) zy<8K|-$-*~>gY^7JG3+KGERt_!Q(zN)1_UL4eg%-S07$}AYUq$DNd8nw)rG$`>F!< zU!g?WCtuoYZ>{P1Lx;<qf{%aQOuVbmGvE>7sB*;$pQ#vEl*&2CKPDlN@)CP=y3Yrj zi^dt26GD>sKGi-rUVh{1+;hw{>!f&F@2{tb-f$e<X6vSVodoxe<oOcj%O&*a_X;Ki z<r{E==|;7`nVq~0oD!ejl+BINM<RH~`0}pTmT)w_Z|1raw(#|<1&Zxz6UT8lty1(I zpcqy!95Qk0?kC@~eSa_Q$4i;9^qWc>6)$2|ZHt$g)NYNQLAyQh)I41EEyRwk9$vmv zb?Ce;!~J$~Z9nN)-XI&kJR0|=;M#BhH?G%33!Rg?{ybkBt7da;2?ZMeln$x(i(5)d zF~I8`$^E`t-n4AO4)RWOqgH?I7UHDzla?%gOgf#NIaR>yeB>0Tx>)+XBTeEf`Np$H zDMLf*#hc-F%jd;K^=MvnT))hPRKJpzz?gm1#bbUs-lBx(f=T|iO8m?1)O$=HUmblA z|L7+5WY;`uXF~P5!C%tXrPvRgnza%ZG%q=?S<tu+)mGEeH$?l53K^Yw$7!s0b_@Rw z8&eS=8EW0%X|vjs6Veu}xg9H!D3bBMIPW52*qp{Do%7kl7t6WKd)%Sz(jIe69?Hj0 zTr7WNL!SI*YwF(I9Zm`gYltZ2<?rD5TlPsJG-HG$eB7M<rAVO(*Luqjc1J+)R<Wt* zub5c`=U7b-p{WF?am}53G02O3x>;V1mtTg?(GAsV-+1%K<f*IT?<(kSAs^oxbnLcZ z@ymZaTv?D*p|4#$hQ9J?I+G(^0WCVdxrrDKJBwDeTTFGkY#uR+)Mankzw#~eT&<Kb z@^bo_Yz9ryoH!fIvb~pI9p^h3ReUXr*tu^1*_lV>J8Oo+1zY^@YCo?8cHD^Mp&O0~ zlDy<a|Ks$#*7}!iKv%Op;giwEWRKIVKpUfodQgA3&;_Xw<u7X+Pan)8mxeg+rqJH3 z=?|EI+38WVv(V9<%VYQCo?4?F6caWyL_d%U3uM_}%j}+phmn9H)bGpwk;z{wFvSkE zE)5RP&-2rN8qxTk8R+!wnUY;!&YRR3sI`2VFkJfbE56sk$M1$dzWY+a8R2R+ws-4( zKKtpchl4HD({oFSH0MGz=)(2l{!T=Gj$Cxd{gTrARBe0BxbV4zI0LW$oZ8FST*8#V zuQqBUs{t{BK058~m)7s$QI9tXu!NVsSZ}YKh|^ZhMA;Fwfi|0+({Jc1=5y@6Z-|$7 z4@|Bme-SZQ@}=<;<Zn}*a}85&Y-7DJq7m3W)XJtCvZ|e2a?W(4seGsb#tbKD1)|~@ zE}i>DbNb$|fKKmvcGW6BH2?0KXz9*}^<U&yivd+jDMCxIFqx!NUh;ANT*rr+wcoUB zlV{!MJ#vhr?+r3f+YdI%1?|o)DWs}hNY0YfQU)w?(Oyk-zq=OKgrist8p+-rbak(a ziRbfQz%&P7w7ehP6m9MR<Awb08p;oXH?<2H<_!=6=*~bLx<<lGe8+buhNN4MCDJXa z+C!g)OgS9ZXwFGp3$D(PKK=HC*jj{!7CQy$-CwsjGwHbaB3x>X#XdCtbn5ugO_3j7 zuH%py+B92F|EL*mW>Zw!!l6M$>~ko0n}cKKzN`72@>|s)gNI3jop&`dT-rm_=;?FW zyVSi;pHNPDEGgn<P%@v6i-`)Es=AIihI7B@rjpfzyxc#3!WwH|VHmJ^s!nc1nZJj( zUmUS+W{_#ds9t>b`oc)Gq+RgMdWm-A6D{5(SM51(ns^(GmafqIR}7XL5qGyMFq^ln z??4Be6WJ>}2MreIqcgt5eK8x<e?+2AkcOnR6_lh|JlmP=>a&ko$>l+?o$nw7YSC_4 zR&`glU^%w}Ih}YIzM0?zIICVfR^@F|v<&Km`Q#Zt5j7kzu+()J9!XudC#O}CO?Ma5 zb>qnUg8N~>8EfMLPti>~NwgM^0Q%+Q??n^a$v2u*A(qN3vlK&suOM9ca)f>&?tcMv zK#RY~mEfEbGa&QrEB1Z4Le5XXIR#cm7k-;a_3fx_{UIKB@LBx$f;240-3xvkGMjYh zAhnSC9HJv)w$d`J$MNMG?p}za&b$us;Wv^jXeLAnR&4x92ss}?ir7Lw!gYVdn#XU! zS1#Qu@-^5bFoRsT;iwGHLt<MF4J;3lH$Rog)xMv5HL&=+=}2Y%4QIaf4ba_FFwhwx zhY{QOUb<>U>Q5f<v;j?2En0C-H;%*B9>)`RJU~vv-(%%Nop|)O{N8}VnGE5~q~920 z(%u<!dn2F`S2vI*Tfd>%#@SamXqeW9ORhTu7hV27G#~vw4D~EPDj7hqCPnDssrwb; zpJdnoFDHZj1135D;v*4c67#X(^hG$~#1<HhE}~t-IQG;i`gS{r4eR6^&{dtrq~4fG zcvpLg^S=3`z~^tCjqUc;=<N6)`HH5)FgQQoK_zMDPz0G+WLt&|{TjQ_KJ)vSZQO=0 zeQZ1a^zGNisYw8nQv+bz-bJpy_N_No<ISJ@H*^ku1L@S|(A+7ie!t@2J9I&wy{>Dr zSAkhazJOEEJ#sFNJ>P~N+<?`O%7%rq;&4*7DVtmjfQdR>%_@HYt#d70`yF7>Id8!! zmwg;{t?xwNo(071gTfoEX%;H^`4wPMp=mO&Bb5ju9-D@`mc?kEx(L&cGH}LKYq52O zgJ@q6;Tni^;z?u@Ob!O%CG^-CO~iBSTW!4U3(dIfUGKq>Ctr_D>U@m!H6T)BsRA7h zm3V#y6!t)Bf!t!vLMTkWfZiqw7m{z_4fAp2VjV`!R&01?1hD}oe)bJ;W7kQ+2+E%U zNZX9OyOt~$GYk_S{$(rPaP<eVeccx^GCWfdy%FGc)Fvu~Ux9sKlE4j4_A<<jz^S3W zY3T1d11FrHLG!$gc;?RuQC%o-O|)?@`<pIr1|U8C5ViN50miof=kGonOV0f|2D;x( z2N@)W08!FgQTHn_e$WNZu&HPS!W1z$8*`661`E&FNnyin$`=r#2$Nmz`2yw100Jb) zt7<fI=$WF=+}Ur>;EGSy<GAxbhT|^y5FN_v5FgU%fV`M~h4?G5KcH}hLWV3m(g~eR zgTpap#saj?X~7w9eF=d`jC=#EQR)bWU6DLghEQG%KxT4r6HRjTrDPaq!5I$T{>3Bl z`U|f|>(L*=aL?f)fg>16672_2A^Zv)1jdPf&0q?N5fhoj3@kW(365V{gSt5#*uJ_4 zy&aA!KB919`S}IPhd6R^SPd=BE)r3oVO|(F+_!{0wl`qU#)}ZDmZhGPyRl{kCI-Cz z0~9TYX_z|yKJ<0ngfCsP0y|z#dRPkC@D%032+BtT2!<h>KOle~e%;2cf2l{{<oBVj z@oTV?CyBuumAHNd3J1Bo0qzBvN*qoh=hx%3H#^w;!W#7K;Ep3fkzA(fWm8K~9t@zW z9!SQxAH0os++ySW_Z|s5_;IA`u0=XFTlSbYD{=h_6a!ph0=B3wblpZYO*;lHEv=Yy z(N?rx)QwGlW#SJaQg5pvuO$to%>Y>K=hj@Q7~Aq0TzWll%@>xUTl+6O|Kc?WxKoJm zZD@vFvG*%bEUW};0wPpMQa;+-fEkA^#gfx%(R}=7xcxoY{2UX%Df$qWxF%4#48XJb zWfMmSms|&Y=)1?EclXUm_WUcFngX&#thk5CThvs6QUybdb7ujR$^<dEX9*h8^YHq& zuEs!LCpJFkWE+r{aK1q45>6nbss4N>-uC|-Tz%vD80z~zd0I~vc9`_BRP6l<Oe9E? zQ!)a^$-|I{oraSx-b((c&3O4S4imZxmrL>nN|OOp)sd$)F4HsLdLv8!cOVe_0;2tk zg`+Q5vtJ?p3QRO;0#AkG&*lD-?TFMa!kptq5U5@uhMe-GqpCV@JbXz(X)yq4^E2^F z0>9|}HF*0?Z>Q%zkM3;?Xk)FsO|OLcDo`?*tMJzm$!7yyQ&Hcx2n$Y+BG$JFn_fr> z;%D4;oswb#rNaPnHox4Ui{9UW|M>pf5$*dXVgu6<sY%i6?C7hg{S_!hP(sPoC}f=` zoNa|`pM$gB+Ks_3W&+79ZkLcxpmZ1jb4PE3-un4Ay#0&Ulgj@E;+VCn6?dhGrvl{w zvZzSrq=b=-pMw)GqtKzb2CE;7y#m)K7)pZyRMi<u?FX*>+*Dk8-N%WGUQb-KS`fdk zdwuvTP=Rs)P2ep11Tv{0B6TNV-r_Jq;nn0Aj0)msoG$^Nz{D~DY4dAD{4#g)!uL1g z>Mwp2f$)dP=C2~PpHnRL314RgDzN{cOP@d>MJ7NM8rqH{pMZ<#z;bL_mJqWiImcy! z^8_Z2uyQuP^rBw){#tzC2W0aPe1Rl?govMOuOq0a{S_!*kYVg#IDyz;1de+GPQP*w zhPu`h6G$rDpHQE`#4&(eY}CM8KBtq-e+@<kzD69eS`FT;*!&fkEa3SBOr&CG;G|2s z2*+Q<>c^$#JAruu6T<+i>Og8gCrLQC>PDAr{`Vpnx`8Briy(e!^H<dV3QQJIJ^_cv z(S=Y|dmQE-&v^pRi=m~CZ4ym5qb3*^35rW(+1&m(hx064{2}1#o8E|E@J4iPo2zVo zUQ@;4SAod}>=SU6PoN3)?MGnY869LAtjEUZnfL<}Q9DpP1~A&@w*~Qk=zC{lu;*5a z^&f#qZJJ)^)?O90zXFpLlusa%L9DNp$Y3eXzVamu^=((R14Z`<6psOL?>@=hf@JgC zxate%V5IL>y6FWf&R;3zt-v7yt|oi}t~&+sk>hdZzrKu+xdSWy$tCYj9<3A{io*c7 zS%+hpsBU&}$v13V_`dT{qu)p#{}WZ5-<!@;bkNx<p?~-?U*$6RC)a%BT{>UtGc>I- zPqfgWslDdQ@P3Xt7k+Gx<2?E7WE<%Tx)sKG?mV1MwxOnG8rn|U0&V6tbUa5U@`x!W zRuzE>6bEG^bvhEm4s_D+zdteu?dEr}d&Om_ZnfwpjiRn)EO2Ue#+5(!H3v?V9ci!B zQM577GegjGoXpL;Fsa5#6agvox79l;zC@LXo42`RHa7oxZ6BY`uL;htxX8qSN(&}N zFw$jU+HrqExAjSUux2Zq6w{1BG*j@<fLZv{qzz6C8{+(?&uc(x`6pp5I2*xwR&yp? z?GKnbY9ks#gb2>7Af!V`!^xX=9=`E&8Asw1pA?Up=OiyDzfRFp3$$|T6gP2@-6O|i zoNkU>lnP)Px{MJE?F~Yjdw*+WwF7ORd(8|wMTZp4@cFqDd8<;@4>b@1MbAfaZ4c4N zXVI~CkZ49L#yrBp5+C0{xJpAJ=3>EVA^g{GFGDc=16Y|B;(T1$S9k`r7hnXjZJr^b z;q10BK7DL0PHzpOKjlbuKJUG*c)y0Y<zQ#r#-4-&+i}IM^(Gx`j9M5bMB=|)Kb*lP zV%m0ERV(wGbYwLH{v4MMG+&5SAg4<<s3ex;aVj{iJspK^^l+FdkVKKvPIZ9ZB%R zYfUtVb@3K92c|}J%&0O@MU0(4XY5%rz4PBb*`3D!ycETwUCAsiOkj3CYr-Z)2zroC zU59U7eHYd~l|rOiLo)6bk_i-!00ZRD$fTM0gIIWR3h(>sQZ!Bde;65R5vO2GoIKQI z?jeGNK&P|>aB52sRrI(j@M<m*9dqkUq%2;wTzA59F_?CRG)WTn3=rWD5F?1v^L@k| zw#O`N9Ja8Dn8d~*3r^gU_iais6)+@vvL-P(22G8h;B_r0xihqPF725ZxWiOP1bleC ziTOm_htr<Vt~N1+h`g5et&xbgkr+YPkXl<qP(#G@Gyr;ToEXh#&S(F0PYMZQ;F@gR zF>yO0G!eZ8P3@n>`+wAdpM3ghthtw+f@z{9QdQCg`R2kf08-It!8#%o*SzGM6gmE; zqHf{4(7kpsg4H~UHKR&<CuqB+YDGc<(+JrTgmgiQz_2>FFO^6abV~@94OozJ!w4DP z_xJ3I*@6LVCI+yU7{CV75PFC)bdeU(LE1znY3KA-b~I{v0&g-BzLN5Mdn|QrTk82{ z*uYF8_BN8<Ekx)?kc3}A4B#-u0H#;JhOatrzbx8POEJ`ay_Fq=eCB-irdp6Tp$3|3 z3YxG|0d#L&jG4z?gHL>Y8}4!T;GRcF(xk}d(OLEM{hJHJ0D|P~OC*50THsfA0z1PW z#GNl)jj2sGos6Mo^i3QhLQ)y4<kKUDkSM}-G_+T>i3H+$P9{y7Z?Et_DRq?@#x(kD zM&8#=4T;y&^v5suW$;XI8jp3Q@j_pkOb1&aBO|WuIU*-%G=cZacI7?tURRMcpF$jU z>69SOY9oo<9K>-`0tgz~sK3eBN<fN1zS>^>u-=*Q<KU}=V}zWgi_e_T-cWY-gl{?1 z1a}pR)REL!bv6EVQ8(Ut=M9)QlNmscrpkf=keh~S1q0Cl{;>5jv>y2{s1H}uDcX7G zHesME6M$7nMm}CGtAQaydu_&%_h7GhmiJ^nVlpsdA5Y(ROk)7=oL7Ziqy;?QmBItN zlk_u<fw(OKv!<@h-$`H=c<Mgy1v5F`ceW1CYzyJdvm-d8HH7ITi9<@IH;vKMD#kxT zS&XlSHrn{t!{%BfAkUt^lh>qAJk#~;L7+ZTgU!wx@$}XeL_>cAcf|H+s-zi!I4%0f zMAX2PHXHA{c?O2fkHFru2w|ZsmrjbWD;;^B{a6S>6A^<vA{J?2Iv=HmYC^y!Qg>&N zhQP$Ij!cAy_oQ&ot^_&;GV%{dN(EK_Q;sl{3p0@SDJ3<VRd!0Mt}}`8T{44-J}6ZD zd8Fbug!EAa&rBkJzY3ucd7sZ`FPU^n?W`_nWe?FzjA-X0zgU5ve{2i-I@w8Ri!o$A zuGc>XkQ>u&pm}~8Z~jyZ&U^cRV6f*5#77vLNsn<urL@z6unKtgS@ksk`y3U|rbE=} z9juD7W9!(a08Szm_}C^Bj}RkxdC<bv5eq5S3YbPH-o?Di^JJGAGsySk^PXmy=-H=2 z_jWkl*AlwF*R_Xm$@B<j*BaRkNn5-hZZ@gP`;20MRhk+W?*P$CI)v7SGjP;ZAHc}) z*YU@%^`d{fNi=4QngXAgfPa~Q28lFRh$$D>+zMQJ%{$Ps?k2e8U)2NN;Es|2mQEI_ z{550)zVC=?)DaOfVVVWj1G7Y;L1hvmn_IyC9rkpeNZ#o;ObugpjVX|`pRhCqO_~I} zy>2eApwz&1Bx7ScJxC0ziL{%uNW1y)f*O4M=sKK944{GbIwf)?G!?qb?M1QNAH3fj zff=T#%}+MO5KD3|PrabRV1H2*x=CK*w1K`oC*gz(Hy}{I0?+@S^gu~k^XZHH0-cW1 zW_JxO(CWK_PV#*exD6;BtEA9XjTjY9w>>0b*->XGRlC>=&GMYQFJ_J4jWZ)SZ(0aD zMr{0fM*_dv6vvK%v=EP)sR_dIvI{3dBgmKd44ziQ)HR!={grd7aPjmo7B-luC*lg^ ziS@t)8r&kULw!G=y>z^mq9))<`$W(X-V1BEm!ABaL>jsQ+n*)-qX7gX6hlkO{e9aF z4LJGIPZ0MypS+r^u9RFCUzRu=h6)j4o<A)t;>~&q2v$dF1A<5lX`{B2gKR;4fSiW` z9Mc>?3;o`mbP<i(B5p3;?&ZE~g$rhR(MnT&k616q?$a`U-$2^bc|`F4MjF+7>AG}A z7{}6@IlqFLm8a!+j=hOJe`!Xq=+6k|n#?%ly3$b^Z94O}oc|{pN{r0Hl<5xYnjgl? zkIGI$!3cyu;2`1PH2|jXbizbUa|UO>Q^)0>csqqG&P4Zip6HtwG%Fp*Y5?@0Ghrh} z2wY2u%4WbsBB$r^=Jl~IB{SKW3Fx@EDvXPWz*dqLaAI>>gcCbr>?g3XGj7S80>up2 zSzu^;PnF+K49u$Kf`DnCgv8{F_N$G|l({vAV4%m6gYPu*=yQUNp`^VRlh-vZo1#16 zXRpi-P6Ot%x4n?=#4l~{sLJ+!io$=>4u2iqM6?x+{s@o$#=%H0X$E@cU`>I8WB|(R zZ;@)c^djKDZk~;uJ@3W9?imQz@Zw6w?jOCYQVg+&dhKvV#Num%6PlVZc2^a_Xjww? z$|aXHkwa}tP&~h8z!D+EM><njJCqTr$(&P=@(2~$K^0jG2I6HV(OLol&cFj|Oisx) zaSqw^7mx<UM6W56gqdjC&SpTrYD|72H<-_y&pxAaFG@7VBKrq~sxs)_IvrJw|4uY^ zAELcm@z`%%NqZR_4Er(<dU^7!GZ^V<!?68!V)utrxT2)zqdPLeU!?GIPWa`s9P&)( zh^*8=*Y-XQ<*0g2ldZ<P=U0mq<P{V?WQOopQfv1NlX|F2<o2Qm<5h9Jl3S6er}FVz zNYcNK9D1ix2=81X{5iD}b*eadDsR&at+d-Yd04qC?ufHbskHRcn%6T1n3lLlfTkTG zXl$hCXY_2BKvzu!Q4SamoB@bgXb$PkX%pvOoyK|BE=F(1`-%9g1!pSZo_>7TT%5y| zd(ZTwu{$o+XV)zO1NF6#*U2F<JJza$a=i^912f5)c?>z--ZDEPQjnkOPT`TR6n1i6 z0jDvCb&*f7FGk>{JEzGec1T4w$gaP1b{OZA>A~r_t@QVtw8PPg9CD7<P)a_LQQdn- z%ob<Q$e@=x17KPb(mqu!XzVSYT!zLe58$ESF`=auEgsMZA2<UDkOwWDbi@J{pEnI> zo%2S#ym_W*@S$lFR_QlhkdsHjb)lk)&$h$DRxRa{T`w8V<E;5P1q__k#zi!Iol6mf zGf7&XMC$p|B<UU{MzCuzBQlZrh{htkNQkppeRt4Iar)!P)Zn~?OURkWQa>L!cF(rG zsls=9iA()gY$Dw|7i#g@vwD=pg_1^BqAABQ2~lSftzCki?JJ1^bV@1?a<kC`x`hLi z(#&z}jI{b#-CuIS2hqIneaOTks{L{4xAziivBX}^&f|={`9wIL!>b&+`{d^o7^?oA z)ppUBfRwYTbWh9xE+GldskSRfD;QCcgR%Mas)PaU<k)-9;nn!kado(yGzr!!xB}8v zIS8H;O?K5OpDsv_mvcZDOa42yC9p1P!K?o+gDgu;6+*bkgl1vWi^F*FfoDYBv}2Je zpdXOC_rMrHFideYl0P~r(l^|51eRX-VGQ>iO?HYm!mB*cLX)Ndd(x*@NvX-tS#C+> zh9Ai7WXo&~EvGT??<~bnZwX;JMG-p5{$-};i3~3+wuHiVx1QX9e><!iO=MDdwG7^8 zmJ`8`1<_|-sVP5NAH)A{j7!bAypC6e1&8Y~|3nQ(pZye`yls%Un}a}@vvBwOL-(Hn zu>NSJgE;(D8z2065XYSPS-94}kU0>{YwlS#Aew_D98{5A%N1$t;Vy-ofP=@BT$Z7u zkbfpQ@)p(yhzVq{haw0;Q3XkE9J>D{bno9esR8Fs4T~%}W(Z!lqjE1$R6bv!1?(i% zpBca=(gKWN$=m*Wza7WX31QpNbQnbl&VCqOn;Z;p4M8*P{bgzUXS&H^AI1d>Ei-@% z&RdE^^l}VzRwEEfp$z-^3n@r3Z7$7a#9&pIi6vcPSs@1kUh_;ov3N#mh@6i5Zj$g* z$lOVj636%1Opo71&z;pSH6X5xWWq4D^3;UJLYf_Yx-^aWjF<PP#hI5O@iQ1C?Nb=+ ztU+@43S4;JA~er{ph?54ZrTqV*{^qtR8LF#OoHM0*w+2;(A-u8t2j};EGPLe5^&yn zFWG~?-W<m&Rf)%?yOXIeN63@vBqOexTP3pfgnB??{@=;w=jTM-y(8~^G7!E%Sum~3 zn^{dxP(I^c@`do3mnj3Fo3ah)5#rE9dwS2cXp77RTRH3t*v}%N@e?hp_ad##HE`9< z4&HL(xyTIM09Ol(Y^8Ft{r7<=F~W#0a;7e72%@b@7p<yvO`8<`Ir2N})`c{YtaE>7 z3JwwbM;6rJ1acPI4qnj{v7EsxqYjc_+%RO}8>>fz1CaMX(@Wm-|LVsnZomm3lQ<eD zz3n+vx2(a6`(*Q7k5<P4<JSNTGizF+zHSz|htDAv8dhH<_Ox7glLetpx5v`&?v4b0 zwK;|^a+HNkEf*Ci*PGi1%p&jp`Q-FGr8$I_urZ2gCIhG%AEEiMne#U~*E_bw1w-Is zsxr6m<a8~jJ<F}a)T*;kQ#&1A!;l=Uz9x)M0}x?9i)@dOi-o5H$Di|dRJC3U%dS_G ze9L~SkJo{jE1EY&ZPAG1gegHGJ!D(($uamtL<)47Ll7b2;KUxz<8O)R*>?Hm4&GU@ zFNaHyS?&M+`Vn+RZE=Hod4&C5`zS?NP-mx2BVs*!FtF!E^2c#A24lQo!SOKw?nh=@ z8X`3=Zu~27<Y^y8@9r}Y2y)z^tW|#xyxAWC!kS_76mLt~qJ1=Hz_BLa=B3t`IogN= z<0Kv~JDx>xe`W&Q;I!nbwhrPfxq%k@H16G*#7(P)vA#P^ZYu+-AaOE)H%HJyJlcYz zPVL9hr{9GKf5{9$Bbs%`Q!O|?6F}3YZIOxxk;+^~)Nl;6yhThB@N7n%2xCis1~<Go zjQa_JIMr2@v^tZcM;}W_R*h#?n>e!06qS%{{!E6$%vbGK(iwhnRTLZOCn(IDDWkS( z`*o!9P?sW2w8=Eev?^)#HQ}}2<i-7uJj2HOeiTOYv@ar^I8!tL(X>f9(9={?f`%zR zzG5hYYLbpeH%LvuR-J9lNnj6n^YzO8PCP%2@c0|@G5d0ES~-koIp1Gtc9S5oyZ75? z2UaT9Le7maj=A8k*u5cxo^70$W51R&@YNXrBe@xrsfLH2=-|4~E<^&KLVU1Z#3JFA zbiV(Af+%+<gmFmf_i;b}ge~@YYQzwYJefhHCP9S2QTJNzrVUGW4qdXA7R$K!!`3+d z=jAA#-IEerPPBlVyi-?r(r}6-e*iU24LJUo`|#58E^J<=lQYl}s@<!=IMf737mWyy zIB6>8p8jrP24_>~FPK*fJSoBRB6GG}_lS)rdo!YTgj;%Z4?%Mhga-@Nb+_0MP-;v+ zg>e78J%KOe+x%`>hx^6}jI89^<<$IWGKvR(z7~5n4GAsXd36<F-vq2H;m&D?|Ndj( zx?diRMD!hG4pb}8|D+}Uyls^YBS^y<N!j?>#u5DIbAwpfm&tY%vRssJLP?pQjm%?` zoO(~p!IxG>@u?Svu${CvZmB*=ZT`K1u5z}kNn?KpIsX>Or#1bxxcj~}08P`f_QUzt z2660BZ$)4K<*MA*MhVyZ`wfPw9Lx~4Z;jb_t~V`IO&(0iNj1z5<CZcBChuUMk^rW6 zZsK98AtGGAdDo5v{`;jU{<<@Pz7ZMf3zUDXe}6y|H0ioJtV{!DEnH24`e|%kDa*OE zeFr}GO~eN0N~%Fva~7VDxhG$PWPCPq&c#Cp&qbP}E}OA(fy^%QDnCD%5s1jeG&8GA z5k@oeCi+wufxqCX^4tU^pi-4r4`guL)&#z_dIXQ{N{V)9W<Z9<C$Y`HcMypzj%?1m zbg7Pk;azz4uFc{#GfT^_fPFaeSij9k{ADL#<BYS3Bb*6URf$6ow>>pq_ys6#-k-Gb zHS#jwONjTGV{38g^oU>pRbE5R%J^?z!Bp8M8P)rgi?_bBb_BO?jtQ&`sW9ImNBB9A z>Zfiv=uVtNn!xi!yAO$eor0G4-s)!W8i2`llEg7;rvRV*YZyz;eLse}7m!!+kYxb* z;CO9?33}5G9wcw`lN4^^>_Kjp$r4J03z2JyJQ=bGiwRywV_DMdig9WTFL7+281I)z z<zG&|7+dx9vnvc&x#e|>e03(~FYUvkv;T%=_hv*_VM)`k_@ljR05ZPsAY2{5%p=c0 zP5o>Pb?sM<@nlC%HVHTmz=S>+v+#Ec5$vF!4-qrCY-SkeO%0KMK+paG52Tb0J8~ni zDlmFa9W_glyIitq709zTpCbl)&(0(s?M#X3$|>%ErOO%)FAtysYO`4C*EG(?j0LA7 zT=NK`#5J|-WcE?8cLtyvve{tI4ii0F--x=#xhg6!={^7B1<xd4Mqq{vQFFeILWS#S zuh$G^NIIoO^3Z|?IqN=bjvjgKNvz2diaQW+^ClbV8b%R3!)|i8@{Gi_<Zt<BR|<dM zokX0T<68dLYH)f8gARi>GL@W-?v6`{h93ua?bb~q;B<QIoA=HDth79VnG5QOgPcJp z)xdlOhmhxgyuiqtR`ca`)uETA)pMi?Fp~1*p{wRZMDP4YViXZW#;vnsu-!w?U*Iu5 zuSJ)~{n)-|O=*NYt=mQ{+(Z7AUu=qFH;46D<Km<q+EaE0rYe-bFJN&(5do)>X!mqM z!yRiALMzz&o5ujF`CLSB!X+-=f9o3%irh{Pg(i9@=Trs{(M{cd3|GChM1~seGLORM zS%0S!BUsuL6u*1@^lc}n!tzs-r5VR7w#ChxjLa&2UKtq=GvTSoPZ9HEY0vfhBbFn= zt&^fJS#ftdO*j}N?|&cJ|5xG1AN~iH-J^-t;`V4a>1YkWYx%_uKa=rkm^Jqdiv35B zinE?OIf^KY0G@w9^i1cvTSDU1<Rjqu0}t&^p_!x@rxhR5XyTOSpeQ@e`U@c2ZVShk z*Lk;$_d=GetG4Be8G3iLcEA!HnD|;pW)n+&9@x>va~e3_s`{CEwHcMj%D6F*XgCG( z;Z>on{S2bz)%4_UF#wUB`+3QMIR@Yr#HW)w<{#_e>^IH8uALW>JrNR9N#Iu0|8YWo z$k1T5HJ}TE9-z?S0Nb#ZY`s%gV+hmWcwzuNUvDm5M^F@DT6Hea;%Nuv#t6KL#q9bB zDGz=u?P3cNd1u1Grr`{pBcI7jWZ!d04_t4d1_-ia&om9;4D_-sE3iL6w8}J_Nd<|9 zFTmNC--BfDZftr<w)6979r-vV)dPNH;;VOCxcHK*@YJT;5DYRFJ0i=d0tW>i5qs^n z1!A*k6BG_CXbRwp*%7>Xc9jSx^4mDCK=iFIvr=ST)roQ~3Oh)5661TkD=kKsaipY| z2Xm-C<|4@|FL$CM=?@y@P*K~~kxscd?eMqbzI$%Rr!QrJZ{^YYC=<ZT6tJ*oPaF2& zMB%BD+@f+GK0vl+z#X&eO1D}|cJIw=M)12W2^>ev;9qAkGl(D(ka2ErxJ4;z0*;E? zhg8&KYt+K;x5e?79SM^96r#3d&jn-~NvSNq3WoU!oW?IDJtt7?#&PKEet@1Ikof0j zvx0IAAn!@U<0oJwc|zVKh>H8AAg3g|t!a7cew^alTN5&;;AK*extHCA)5C%pa4E7U zQG+GqDdd%8R9DEL%Fln1)cfCTiHW8hYlyLRj#yIDQEI-S)?bnM1w0l_(Qn3Cik&-- zr{^9Nub8Ih^}Wy8^#(;@9a~mTE`I%6u;}bJBRUXNqrT(^R={^~^Db6}*$2zM8a5C5 zh-lUjA*~s)g-5)Bj)?sOqQ2cJooE3Qf5?>D$<|>T_wP*MhZ{!li;Zz??aPR9WSpbV zz7Q{y#L2tw3KR^~C^5YWZRTdw^gfBr+c+J7a|MJmQ1{*kTlT{jx&O6I^C|RKtE&Fg z8!Av}U^Q3-4IG(QU<7ppC|a<IB<Pn{MDg)ugLt7gEvUvQkrNSJcoY`xB0K-PYe#VH zQ~kJeQ%q=|W|a;-ARBU|RpL&C=!*gpLpXhZ&+bNCc<zz-<)4A(7Wo>_^n}NcnLWF% zMT8IBa8Dafy<!@AcR`K$uD}ElR<_<<m(M&#@$vt7W&nTMmJm{RqH|%qehI9(tRPAM zk>>{S(~ToYq#eN(*wz;lj4KpBalo5jN5sCto{m56XhU2$|15f5FbK&2G?kgoX26W2 z7NNGGMP&|EB!3Bj7|zKBFGTUr_hj&i7l!cjjWLlrt82v%lS!N36<P?VIRAZD5+8eh zko*-%#8NVTZ&rfFr2=yNbu`(6T|<jV!<Q$+<D=m*fNY3Q3!#74A|ztXO8QqAKnZ|X zB*QrcTxqziCyno{i;9lL41A=SB8pjCbrojp*dCQ?|0Cq(XBD4)7=kHH{ytpg0<vPQ zD%gx_eGz(ghQzahKweufPXkED4LZTa(9KqrC{SSlB?6vFz*%(xas;j)wD9>Chwx&b z%<*Q&V6j+$?aDS>eH5|a(%gS`ri99Gs5WU8mA|AwCR(J@twh(0anv!=u1}>zl)z&E z@@FPV9zgdv`aR6Qp~3)44rIq6No6YrGPr3~6faY#P0TGQ0^v!gpN3?{#lw42B1{>J z+d}29)aR5WXb1%@boYcYZQ5ciUlznW-@*e%bqWU(17PDaowP7#5pex4=Ay2p4I=~W z52z?{B?_YD7#*8M#y|JN<E}(J{@WYUP$)Xgcly0ZOy?`BhSAF@yrzaqs#pnwOVK=? zM?ahG=nl<9yoR5(rR3LjIcRYH@pZWH?I$2o8%8R|24^Mpw^Yv)UaBn-9*N!GY>wlv zB#GH6D2B$mh51h5^rL@<$kBHvF`ktamEbi5%t<?RV{(8^9{&hM0ut#E?(I4T+Xq?0 z7m)xx+nZ*vs~tT9$HTUQYP@ho{V(Y=h0MGo+xulAMDB;5$jBi3UR%E$BskgbB_M{A zz#k|SsRgBsuqsA>X#<=3><BdUAX;lk)wf#Z^Q-}Q4nQm2Mr!{O`aP)hxrzo*2H-j5 zULt>hU;<<oa6=eBY0{Ja{GdDTh=QK&<a{&~L#U8{$%7}%gB1Q-f_S1$KFbV%CyAbQ z4e;(;ryxGKSabv8&Y~3uU|E336AI~AKV;!ITjJTA06(R&_zoVsMIX+6`Bo2RD&nEM zK(+}>rwt4Y9fzM1tzUPIm?A9egHN~wIQ^(ONGAfKbEu|Q7(khT=ar`*yl~8M^_@6z zAG?lv%!HMVyU5qj5wiu;so4Ex0~`vp1#PDjQ*hc*GX>4lkun3Y(Y>w(otP(@2ne1~ zvH!~n9OV^Ek)6k(xxR!WigWx@0z6*QPfUgzcvvZ0%toxxf0-eP7+gU#ekbPQzV%h~ ztSuEe-K>Fux<h`G%Jyuf=Z_<DJfC29Le_BkL7@E6?D^*~<D=ZjBUy<Kmo+d_gwT$l z!Bs&j1z6Lk(7!EtC{xh@%Ir)b#+JEQ-k(OdB2qtM^Ikq^KZX9*4QFJ3KhdMFBLB+_ zwCstR!~hIUL;}3Y70duy5AFRaU+|oC{9p_D00vTu0r)_q-X{!@`oEDr+fv@4O5#sB zBMb?97ft+76$7D>t|@tMsb~OY23e;(5o&i*ngD({0zEqKC8qN7fF%lkpjYhwGK9Rz zG(_u6^I5#nbe8_@hw$c<J!A=zh;s*d=?BORFjPk<*M|@0@#kI4SX4q#MFS{nXje3^ z7(g=GN>0ECcVSj<sAvFX3_LZ*n?-oA2kDs+oCDC${rX+m2cSa#Wd~jpMqAK&a#%5d zB^Ls-j%h+H#fD_X#XAXrTZvbhdbZ)FACUGM^t+Y8rezIG<4o(b7BynY#pDnC>|bk; z8m_}YCqxZE1<D>+U5}Hut}b9?XAm3+<o}tGH^!?X{>vD6$nU@&V9^_@apGI)SkpuE z;G}ERpt=fgFH?}=I!zdL>xM0Hd9w%o&;lxmF=;SGgT}=osamA_=9);3Oe4u(RmlLH zJirA(Ngo;o%E3JnC3u{dFHVIDOgu2H+nE|<lJiU$ff+>j)fK&N@&FGF2^{3m0I%l& z8-*NE=t|gG<G+F_Weu8g<Wv*wPbY)GokLI7<X)`6WH@3!!Kw`CoQx15+Mh<QVz(Kb z9bAD)18mIsF*PXb^K&b4|49Viu~yTe&R|?&;;*>>%N()<N^1J1s3k7%xDS+ey}#oI z(q^Upf3gA7e1uyBhf!ewlLs_ew%ea_{P-vV!x;zBOeIBRk^$3vh<gHZ8E|0CnOC5k z!G~lWPorRmF*g9=^kQLKRQdpvJ9wDE%|B{c1IT9p6)02i%62(TcOY(yszASBSKPsF z5eBTthe-s&{IB=`CL=g5Ug*o<AG=bb87#L8-=9%kqEEc*X0?E)dQw>4lg?%XR+<1$ z3gFWe^T7hBw0N8}Ac!-lV?}=k-(NR^?nI9A$4j><`jC*R3HASx-6=e@C&?8?LIJ4g z0Fwq-`>$fcuQ&lG5lH&iU=zXqeRmRf?ucVJ<sxW~|L?sdA|Cwt)t94KGh{)pGK4l! z5&n|~Sn$^p18^%ofJp`!*4;@9NRa3Lb1x3#58L8!9jP7I>dGf%e(b%*Re!ANZymPr zg%!hiyekFQatk_gtO64PEc}IB$oByhUBeUUrkWfn?bnx!NxFp5V-dYj>o?W<{Q^f# z0X|S$TZ|ItNxihLL2?M*v}zdK%j3EQ)!9vEY0lk!_&ZqQ2NVYI`0=#^7QVe^1b^5b zN0P&T^xVPN{iV1^6OEse;kpy)PhsI7U<MGx1o{9RmQ0on*^0!?cAPojoz0z^7+P8I z^%Iv#vxm)g{ph|SL9Jas2*R^fC@@HxKnM8)zOi~(AlzxKA<V2c&_e#-aNhoKzCXA9 zT1V>sZCm2FduI~yv?KOXKM2R4_}lzF0{q!0?|k*bp0UJFwRZO)*Pq4hJp3%aQ^os6 zru}LSKi`ogOyOT9#1FvdS4|rcF|_QIvV#Sd{@lSPQH04Ae2%r`OXb$t2m5W_-E%je z5t6)?PvcqGCy-W&Jg=J;!P)IWoG>MTg$)7Jm^wBLTjVrMV>vO3`*tPK$(?@`Z5_0P za%C1_joKsi)IskP?-3^_75a$zy99nRL-q+jU032J<LCrx01hq0Vg`^>44`OQfIuuq zcCua46vVZMSL6JtA<@Z(H<|m~@9$R2>NWXS9We{P+!VtvH^=4J>|8@+|JKj8G9mQo zBvG$lP=hnuLUMHW0iOn`-<l@Y`b2jMx2_$*BP4~H!{`S&@mJXIsyz^|nF&!=49Y#@ zb+b8;wq-l9>>v4X#!R8-%n0Mdv`1&qUhz8EM{!X5L?6z+iSN=LJxP0I(|70xX{PLL z?R*wT)SGzs{Aye_BZ9^doevHUKbiPPi13-w{%m7Rj9K$&!6_~?5Db6`e*|0@P{e{D zwg=N08@1IY{*w^nEpw_!9rf??+pB^?GVG!d*u6Uw$XF8b{gM`9{Un}i!-gRKE9OLe z-Ji>6M+A~=9kH=(#FEIUA9z8IKt9g-r2m*$V#E|<jBSqM47!%9ATp%N?;eEzMDvKB ze$F8+<K4vI`JVg)Z_if^WH6YrV3L}V_NiitZGKk!t0OwDCE~w^uGWaZ^06&aB^dCh zUKm1@G%h1#$N?|KgA83UCcBs-{tyn%0v|W%GSfuZpyy2u3*sM6yS|w0jMp_m4M!2@ zK8qv{$FMUL2GdPVPSW*r{X{Hhwo1OqHgw21@Eh>F>|AzRN9#YeIf#?!+C|8bAyrrB z(B47ri$HEBaE|dSLiMx*$qS_8^k5~Cm^Vis5+DpeneKt_g~2=HgN-P#meLs3#oi0E zf;9jivDQ0ZR{P&DEi8ziN3Z)eFw+rdtm6VQ$2igwwF~ab$On(cEyVyd<^)Bp^zhnO zG2$haSPsyV4u*iTpY6&oU@qQBjxN1WJ*+j4VC83rlxpn<a(K`}NX{RbasA`Uw(>p~ z5;S;c05pellC#S2Hxj^m?`FTSFi@qW5;Mz)PmA}=EX{KWPE3H6^~wxu0BIDN0eHa2 zmvZtq!!PU;VenB1r}@8l@tLO2`SE#Gy?G_RC_hkZ&Sz+TqdD)rR)7zdpXmzWQKJ}u zpZ2+jliaq=EsoN?H(;7iGkazqKxQIVz_;#s>Up#M+GAH~04$ZY0<D`*k;i7Ujm{A8 zX<ClAUiQw<s4`?7ewnr67SS9>MjsZCDK;gfkGi*m-Fq)nk@sGVF86s-k*A>s4S&b1 zd!OxnCi{8Z38Q~O^CNsR!<YyLpd?(<_E`gfWNl11tiEXl(6GEi<E3+z9H%k(m2%)o zw0g3MX4M$dTkg2f%18~+yfxE<S>))gBVT~yV=*D`HSam^y<LDwMMByu4RX{y`ME!k z!Y{k*;#&bs^HIhxb^`iWJ33whQupk2uhsnie74#0G=M^o4>Otsd5hT=^^MUe#=;KL z_J|>+U76<KnkvVGQ;U7O1*Hw~p7Y-OZM$YeraDyY-~WB_aD~_J=5DLlz%<Vcz)b;J z2Xpb(p|~~=v2Y!Ky`Uaa5dGw&j*p-3sfg@M+mo<GLI*V8=wHO;`2nlXGf9HVR9v?# zbO2tXqjHgX?F$=B@nptveKP_0gLuz*?}bCt=O!hN;xbicp5EnWlmW6loAa%l;+p{8 zR*~<|9p<$ZJqnP&5>|sUj(>ZQML@_5J*cRFuNsE>Kt4Q9pG_2~WiG4EOPhkIAx`F3 zR$#$FlgQ0$=C#)a3X@;Pd(M0B5s>R63vg9W^oXJRuR$seh8bck<4k0;RTlb5KAi+` zP$A}n*$WW`u>Dk_kux#86l3_TMSCU&Bl;E!;tr;r?EUxwhEiL2>2H`8!ZcQ8=sU`x zX@giJt(DizYxm4(!>=@2^^^CU_ugZSeiD)>rlf_l^V0B{>3Ykwl>f`qXeNLUh$uF* zxS~4&vp20a!E#4$j$gos*v1)LhV<C`S<S@~g41VL45ZPc8gRNkr=qeA`nvWI=GPi! z6AADbIj@=5&iCN>XySQ$%+jCtKJ9Z9KvPbDT5`h9q$rG`7VhiTdp-=u^;L7(Pq1kn ztO01f^h+`yw~K@-!qyrhPM&uB)zLjdVJ8&Zp+-RSwP-|S&$6hab#EHZ*8u$a5|xN1 z9<*2KIGYHmg=}fZr((LooTda`Bd?X$%xm|Ynts{;-X0I8dG9Upg}Uw^^OX?{NCrSr z7%#e``OJM;@C{^5n4%^Fd0&)d+GjN00T~HE@m3%)f@{**ku#F<_vXE$VzrY?UxhEg zaeb4Z`F<Ol?6_SqX+ilJGuCn#kE`ZZ;a_G(;3OSYT~~T6z*Nx+UL&uS*X*bNMLFih znX=P(<8X%dJ{Ljq6@wgC;LI$-9mD5DGH;!X^NcrE0m7K$1g7~NI_&gT+R-Qql2f&h zO~{L*caSSIYWZtJd%j!F1>j^F=H`WTbFL>z)G=ZUWbrF%=au4e+9*q+OJ{`9z)hST zS5_UC5D(CmQ;XNeYvi@^ntAO?L-*%gH94l7B|n!i7XmygVCUtGDl^O2{NC;;F@PO} z`?lj2+XtY&kZ7K0Uq`rMJB(mVu+`$NK%6GqK|AA4Rs-<Wj)Qcf@gdflQb+VR5}>|_ z5QH0WuB1!%aU8b?p7ZR)<{&<@pa!*^TW^(CNKmYW*2HV$HJ+%7e+(ZrqHHe?O^rVv zvLt8mIRq%P7+sM9JiEpeIOO=~fAQAJ!&Y{1CZjR|imCuGtuxIN?du3O?SdYP!(}yA zD~<-h|LD@u#gcP4<F6Mm+wz1qc1E=>HGl$T1M+>WBxe*~-k1CNRgB|l!u9E-j=ukh zYMehUEV}&IE=ocR(3K{~YvQ%>8hNd0%is0o7yUfdlNOh5z*qG-yIfmV>$OHS<*@V7 z1aLhc21PMO?5t^8JQILuoN1kDo@igke_!HY)jwiroXWkAin0W+XB|IaE;#JB6HWOS zSnw}u2%wQGgEFqL(fzjN*hv(ngM4|=5=if<i@u(xTJ%&Rtj{f~!x?Qs*11LfgrQAL zbU;&Gt#p~?Bi6)g<2B~5*{{9!J}yIhyn*b0CvIgKjBhn0P&p*zyqsB8sGzG{G$%48 zRrIK+$)1j-30hzEk71^L9V_l7SHP+PREJn37cJDB^*9jn3@8TRm!~z~i(XG^DN7`# zRM#zB&}BWTq>pu_L{gJ!_**>|P+9<MZpTdt;NwTv;*9BGSmZmgRSeZAA`|ewi@%%K zz-!?(@!EKeyw-rv4M2HMGbFekr9Iw0V*5@t9zL?*IIKQ^BkBU9U-Jn(rq!EtvPe>- zqmy68G|sfXV^t5+z9jf?T{o#c2^J`$-dyO_sIC;e8MZfi4*sRodT>OYi79kh1;`2% ztcx^^%~1<~+MdW(H~QJ#g+IyEbF~u}k(2E!OY3oBTL?jNR=M<@b`f(q#e4wzPX2CQ z1FwbGB+FZKYxQl9)n4-6@*Zzw2O#aapSP^#%|d5<IkMi&ZoY3(45c-7li#Z&mg@pi zRQq2eG9#;-Xr9CWiUGJzH~rg*i2&MzP6`EfCLCYY+5DKsQN+#pg5SLdkdscs<k96` zegi4HpohxELF_v@i{k8eoHYe+r*K<<DUOIEAakAyB2oA=`LhGc=;!a`@8&h|T6j%? z0y!nTz2v>+J?6dkTg&o#05DfMiZlSeJioXf_~OX}J&W&lwnOj)qyqKP%?*h4sJkDa zt8XuRUNFdd(KYVfXJZ%HblK*eK76~D_eF;jN9X2_UR>IL;*fd^bM*)Jq{Jj1(IvPr zjfiB(jbLt_fzK?e#Wzo=$Ej08$dI4IPRj~2?uEbvX&hkZY)@M8XM|M8WB%+6U8m4@ zeT%-6znj+p_*d++H^Sk)9HKqty%mxZ{+CB<d0%)W-4iD<WmJ1Kzq0^2^u1GcUM^xd z$IV+q7hOUF@LF;9)76WK075Wsez}zn_M}#SH`-OxZWc6<N=HmU{9;PSm7nUPs7ND; zI70UD&o{-fs4;*OTY@6YX=?sg@^hn&lqH>-%-H7D)L=fv-|whP;Mv|3){{dr6}NNE zK8;rnws2p$U87zTJVuxniV8^OK8nJ7XSRiL#jG%1KQ%0diDYc4q6c;VC7IW9jl+qY z_``e4d(3<7XIrzJ&qza6gnUL-hQ|whBhdUP2Inzw?uh5daEojM5b}4D%GRC709^iM z&uF<>SnxKNzj57AMqEI|w=Wk}fr>bp2w4jdI<o8fo)g6M!3iqdarddt6qfa-1q0wD z63?gMcMgK5Zf8^(*Tpl#BK`I+WF!B2b6oWK=M-z!G+8=3_FhO{%lp8wyUuOHX}`D* ziEAnrH3spX`Bk|3uqyE~GoXwuH4H;54DmDX^0FSEr9I`n<yZXd@T_iCoE?AesjVTj zMa=B;g@E<M%sR<uBvRB-G#`MQ<u*ZdBM{7L03;6W9(t{)K7ec(jdnRso3W_?nO)My zC{K}7f|)>`5Pjq!V#t2lkXe(4KJ?BVNpd0u@cL;X@q*<PE>xGb`CVE4_?9^loJZfg zmG<<x-VC1XPUD5XG-+AZ=<cH0m}Y(Xohb-0=hm1weo7Fhx61Csb88IIWYvQ}fs+tK znZNRB+_gQ4-)%|2tBCTOU|5r4O(zo4a9(>Dvulhj{`iF(x{?G#X=y5QxJU~c#q|Js zjNT-3-wX}%Ey{^N;UnV+V;5ZR5x@l;hFk39M6L<gNv6PzYFU8cSNXe#va_pATtwlj zWkd`yvSSTWBmMN$dv)msE&d<7k|K}%1R@|N%0lm?P?c519d{C%N*=PQq{a#+MD}_= z#hW>FwuzVmd(ycwvWFrsyAx7<;L=_0Ky2!=e45P(CW5ArREMYJb@uf%j$(uz`FOY; z_g{7-@bsQ!wy4YR0UFsh;0Ct=4~jP6JS4^Nv4WAEmfXgS=NNP)ogxSSA+zoRL2?d- zf!n^j6?c6*PS2WB16XzsFzeVom{mg@KnoH(Br{nnO0N<@gmkcdgrv(!ZEX#Q5#$n5 zpAJAYU!c!wRaJH0UaKJ%a|`Av*QA#Ye<y_f%Z@nSb$GRit#Sj4PywZ;q40_C)mC;h z6K+27j-*}HfMxFtAfOlk&sE5W{Ld@~;j`(&jEpt4UvG)yVcJWtFQVT`R-!?^BXMvc zG0b^2QvGL*!1U>6J(H7rU$AM$rOYt2;)+<;F@)M1hz#J#KX#yd8$Aw_24IF<y!b2H ziCx|J)Sau4NgR(%OeaxRlpZu*ZGAT(<V(aIUr#C+XOjEnfbkBPr`~dWmj{M)i7G7r zM_$XR#KcyKm^w)1{_%zwF`Y2x)*8YOQD~0ph3Y(;oF$Iu&=Y;_&0L$SX(ZVfYk};- zy-7fPvGnr>25HDm$Sn@0=FAJ0mba`O!A{a#0%0Q?{qPfn{ZCrPEW(R7&WvQg+whTD zI|`W@4__n((3P-@%>c;W&<r|Mn<VQCXq+k|e&iU+RZ^Q_b_A|~oD(4bs2B(CdJMp( z&B<iv1UNo!kH^S4oOJQ@2xgIr>sW3<>~c4^<>G#BS}}}`LzeKE7c*HWN4PRE$5a6U zEkD;H&-VA87mhdeH(m&_n3=}BN9<7DKzqi-za?rZJShyhh`k_Om`6Bq@r<xA*?3R< zOo{cD&ef66^`sFe1`zOZmf?P&WtvQZ6~ytnyytaN4HN?~yJ3&4qTf@(`%<jZU`Q{s zMH&Eed~a%s>#LVn){rv;c;l>ya0n8o5mK!X$Zf0f)hRLsZrd8iU1Y=ZkW!-n)q>+f za`lt>kE24P>@&!}JlonC^EbuBP|sP$8HIOuByh*JIGG>BsD1YOzXD9D9Ue*HVn+Rp zpB;>l(<XM1<|*udr^tm|n&wEG+9VshaTTiSd(`v905n}jT#Uv+)U>aJ9<bnYNKSK# zw?2uT-3doHs>GT27+2O+MHiRra*F5C4FM6?E>uG%Z+ty8IhOlZn<W!q2B7N&%SU?c zea^ddZS<A@TCu@1Q+R*aS#}38O*WrW>B1GucwTvn&}{)ZYtLvc%xqj&rcj7PrWg7$ z5Vut9Nx&TA3{{gODw@W9x4ncdFLFr5lqP`GtxOD#0Gm^rkg*13BX_rGxF8d0WPgBv z>`sYJDXcQP1t|7lxNuq+CzC_avZUc#2yW~ZBXKPKWm5ZovN47idgLf*M)Gp)^<Nk& zfjDp8o8=U`{NB14Hgu&#t%0V>js1pP>aR=q5W*X#%5-MeEle3RkF5X4?xd_0QElFf z26jeAO(QVe(}nN8y93)+5mzFoieLb?#Uo>Zm;MNR^Mp8tI#;8%jdMzaC=!}FN@Vip z@Ft0BFTnR=4{_e~p%+p(@Pg?fsTLHt-@fNz{wIY7Kk&=|UhK<c@6D|+f$U^r2Hu<Z zKRtkD-6^)$gwwAOTO?b@OQfi$kl$HtL9~-usL;XRVlj0CTgWMVAK?Ixs@L?Q+y4Q& zG427lg1o62wee!xr9x_i<QeRFnH#OK8PKgNA&SNTST*KsHO~0j8ZAsxkQXnH5J8^Q z9KtjT`#>E=p_qX5YRkur*dKj<5RZ4JrNo1jZigZx@Y1xI)$?BPp77oX;)nDL6>3{V z$ds!Y>A~gX6FR0bn8gu4&)tj4a5U!S0Sob@%=;^H3V`%>I~Mu)tQ81Wjq<8W)O1u! zp2is&==Mu+(!J`XqOCLQbtNO|rNImaQ%*L^&F>C749Aim;L5oX;qi9q_6yl)lbuQd zRjT*+&IG=+YB<XT0;;Qxa|khkta&8Tj3x1ZY2~ok8{Q+{t8@W3#84HDbtDMhKCcRg zQ3N1k`>gt_&?}pJoP5TYSMFNmqjrUsAF1v|)AUtp5}0%hX6a5k0*O_n(=h5+zzFv$ z#jJRZO5~!1xO|eNz~fzM;fnCPU6Pj=G>c;MZ<$?%DIr58nG_bhYB@H&{z2aD|M%h$ zmXS|@bLtH}m&h~OK{%XLb5Fka=epDQ-0~s(V|!feO@6gwA%H($M4EW&5;^~lpArzB zf4d+(Bjw{~$p`cdUD^8o;vO_fH_~vTgFV=}ZWU?xs$M-`18@a5FyNZB`?EK|Haekk zI)GNRrFw}!YzjQ>ZJ63bzcar9ZZnb0yh<{T2ym)wq{<Kyr_fBm^^lv8@3GDl{{5+b z+)f_vSjJW1CwEet1AOa(5$ZD3$05?UKGuiF$?wCi@<Q4C`5<VJw9JK#0bF}{6>0-A z@4t|VPK?ic`qMJWsMw62rGN8uTEw4s<EBfx5bb9vXu`_mF#uZ)28vR6@JDY3Rz0*D z_0!{IHx#!+kUAin!hvgsGKi+#Y*L1w3otc#3S8XsiDPQ8xGBJs8pHt=g9*qefQyxc z7&ono;+8d0^w2$r)g;}dYNtI}K(sd(skO3JVSCiZm+8Lw+TNd$=73%t)mY4Kpf#M< z5>%Og(nj|)#aZ!qp=rKIs{gi_GP_aKZq8mpjR7+dCBolC8oqqR2xMP2vhOuR<P9T= z>)Qy-m{)^i&zpz%;2ha{wcuH-Sr9fq?O=#@aDJUBs?toAMdxRK`HU>#7ezDO2^-H2 zTDei>1-?^(AVld7ea`@Shu4nC=|bF#o|BXUs(wG?V@H~aB7D9D;p?CqVuE;{oV?#( zAH&Z##n4Gi-XJE-dyy$H$1}Vr5S{Tk6a~8Os2a>yZNL2Puq^sOsBv^Z*~qmFDU3L7 zvF(3v<cJ0{{2aEd{4<u{zcKe}z6l^sD{sVY^UN0zF<y`vD|;&zFYKzBeR7XIt^$jx zp&@?9O%3H;<gnmd=TzZpas~;Eb&E4}!}AGn-N2r>jc>mc#eYzk@Bs=HanTMFf6$an zs@xz~>MbQ9Gw;5ngFCk;@IDIj{b+4ejD+KR=PgecnE10{KW<z?a_(L8t8os+{@DlN zxG2~F(EgN*zms{>Nle}-P=}~jU53hYKuvfVs;ZXdHY8`->w9_9M0;Bors6q~DI?vP zMH^n`sL8A&L=^Y$Ok&Hht(ND13n(uwcD^bEnO$d!7_DEk?8bvAwpVgR7Y`S?_Nf6} z|J<Oc8uJ#)%)%;@aG~qU+y^U9XMCERx}RJ&g#V;49~XRiU^~S@Dv{SlhZ-hs^xng3 zaHh)o(+i+liFRy+L+saiurn#TMKeO_#rFO)!HB~k`k9L7F?DJeavi|3OEE?-UG59E zzvN)ZuENY?7r`{AQGmW^<-y*;a85vizHth9hPk0<Lr4<{qZNQ#GlEQw7(z{ba8HuL zf(|0&l(LF+Vj^Cw%kzqoFJJ@Nj4S#rkvrZ@D)Ka*QKw5aRgP1af2C;?le#;0|Co`o z+G{K3&FU|&_i6I*e{bCgezq}&hso*LFZ$qVLK=F1TMP(r!w*{A-1-2%y0jh(8gpSk zzdir9%Jk$p5nm;(PA~vfXjRneKiAdC_IJpHe;#-L`gi!_*LR`6Ta2{LUx_h>YjB(j z=-Exwmvr&w4>ur{IT@*V0J>?t;{Am}DwP??$;jKdS738M_yaPI|LU4od{Q0MFoy_j zGdZZ%@!WY!wuma$p^1VF&V?tvnN`ycl9W&MWrS}aZppUaT*_M$l#M$KHCf3)o`a?c z48b!9z3<gktee-w7pwLx<?rrD;+JIS|9VRTJLvZeWPHDvIS;%S%+%B5;B6-%@?S^S z;4;$mG^JIU1=1?{Z0;fL^?PLMFcKSuE@pb=N-WrE1L2w^+S-1NpM3feta~;pXqzRg zyDtWiJ!NuF%{n@Y!%ro`*WXCbR8d5b*>_PG03`j3wGI&jnBNe<Da}D4T?)}-k2MZP z<OrP{H`&}k{)cUYgtDeq^o~uAYK0XDXhH*diM+`7kR8dh@EBj)BeJ&uyGBAPYT#)H z`BlDJ0oJA_p$SIieJ?-942qdE_jLHb9h~SC#ZT77Ncv@D)Wg)W!(fZGpB|ntlVq>| zdylBb4U6g&@%!J>%p-ixs(+rMJ6r&^Rzx_oVoQI%bDKz&X*G)eo}01q!Ijv(QQojK zI>Fx93-NQ=U=X|3+gS1U7?xgi37Th2LwuMU=@qSDOm3PiQ0EqEZG`woQ|#8`vVJme zui%6w88^z{J=#cL%Aq+RSHV|I$Vo{lJ+{+&9_vcuzFjFSC&c2o^;~YBmZuW&YT5pF zl!-8^>QEa^9Qz{j?BhHsFB=5AYTqTZ^gg7E_UM7#DN(@ltu-U~!?uLTdxtmoUdw$> zF~RgS4dRp^SXhHk9aAgj{dxE1w<#$SX_QCphwDf1zhw5f6Jw*11BMt+L#vLS9qaMc zH+>81o{AAohhST;$gwx~zI#ELK+v&v7^&zJbmH^qV;kXLtG@9OfKV@WEbB_)0gBaM zG26ec!LMKfki3u2>>Y<yi56v_T|OimdZGaH{>Hf`UG<F=+7Q{$D=1{iv++2b_UkRO z-TASNa_|XvKCTPx{dl~4<NHawuS_@+Ntl`jHAs0cx}N-8o_VlQw6)G)C8_qT?sHpr zZgd$-+SyuYL#^9&i@$Fo<fuBao;f{&ch0NE3<@W6rz2DIzxvZNh1lP=GtSLe)3CVd zN0nKW<fd0FhpZdA_dz5_o)9!FX<DWPkBb2~wsgI>%(Boj=Y9kuucI&_F@T_|W-cB9 zi0vhv?Rip#SpuHf7R>geH+<Ft_~y6)1t+UqMWI1<;QTMyvD`9>r{AWXV#jfErLb&A z>T13rHy2q=OmQ_iEH%=Mm;o#x2iIY>hL~x`LoJ$Uy)~vT!f?$LZmZ@dsGMIxpJBcV z5BKH`#E1d%$Tn7&xfg#w+4h}rM=&4ulW?Ne%VZ|G3FS=-u+K>o8iMV*MYef!AP7+< zAk1wr#mqu6uG}pg;%2-ahV-4k-kiXy0ZZ(MJuzV$hiFwNn%#z$xpxT~?%BaKz1Ir6 zy)yt=DyShD%b;WZ)8tI(AP%w^MP}yNFd0Pxc#y)6HpFl=9qN>@?C5J0z=^{HF4!qJ zqn0P})(Um@5wgM4wmSi~Tn<F#oXS^cAAwGL;Em>9MJB;2E;eDdO~}Y|5IN7io%W4{ zkQh|Lz5^DD)2d{r->SUf8oZBjdT|$N7`utcSqtFNRotP81R6R?vM;C4@AHOPhyo@} z`U0wqthpd78z(kaDKrjR$TZr6ch9fF`O`x}VDOm+3zXpDed<oqg8sNIjxO$DNKWNU z5nI5GrfOn%BSTw>cApS5EbPI(AB?uoTjD{X+(eK+>_2|^b-e!HK7qcSHrWzIa|C)2 zRG!=xI@DjB-iQmPMGETmcHCS7&RUXmAAV*K50P^#Sil<fgTwlK?1vyySzx4j!a2(< z4R5S>UR+xGRb0hnJcc73dyZl}w%1QA+xi$2AA=l&$eyE;`}%RF-xrtE$qv&_;Zj+> z*^u1Qp1T;`ye5h`X-<J);j<g}f(4ow**s-N91s8I>-gaZZW8Igq9G{ky@@Y#pPyxr z&A@-m*TBw42n|l57tZwV8$~n)grp*@WvARXS4V{eTS5|!)m5_q`TM%Em6-`Fpa{fG z$JL4F{y`2dP+VRxq!LNi_cQ|eSj*b^9QXDleA0185B~6s^HE^~ZFEmCuWwl1V^;C= zZTg9@@Aq|HqR30d;ICUyBUFDTepmH7Gz*};d85nNq+$)}N96pAXH<8q;^T+M<5(|z z1_K>W<>mgn*~jB!06^X>DIGHwJ%q;4ap<wn6kaJ&K3u#T6bHy*G2&tWBro{GGg4U6 z6qFJUh4D;!>NR^qPHPL{v&YtonEdl(d#CApg8{uHm_RODJNJZi9%?xTq3NUOdT*MO z7vCSnC)}L2<ETcWr3N0)Vn0oYm@|(r`v@@rHWQf`d9Z0Ah~Lu^c@WIzA(^(`%Z+SI znGazVA2n3!ugz6%j}py30Vwit_U(~*6)CRe7(j1#8UuKajJ_SJnVNwjwGGeTaE~(o zZ%0xjnlQKbyI;Uq<np|`ubUdiH%@545yW_SF~uk!K5$GxR-Lz032s_loJq*_@X0Y3 zKbOjTpO=2@eNL%nA$xuzcGCXq%m}`GTs=8K4MF^2Ln~PHCcobQmlX5o@Fy2GLDwe2 z0V>P+CAZ&!emqSyn?#nr_g&V%Z+qSwj?SXwg}=JwNlfFU%Q%x_3B?(?i-L_JngQO1 zvu(>sIw3mn%P7R-N$Nrs@OX|tc6jjwog-=kc$u7GUBvZy4Tn-EpHhPS?#6sb*O27@ zCNb!ih_19CtzcD@*>Yb;I$(daK8DR?0<bnPK}wQMjt&a>gklJUe~KS}=pOv}%Of&@ zh1IxyuS$PS?3WXQ3=HqtiS{XfAbVm!#1l2G==Yj6QRx64Csq9STjPTJi?CoJyU1ut z%FqG7VR{%}KcOD4n-xKdJms?ObD7rbmMNHOyV={%g!r+A)%fD#I<!^k;ynE9>%TWh zDQ76#`M0he5q&JV@#}<HNGy!4B$xCLVQ$MG5FgnCZUkxso!8=m<M8N<*iHbEI-6oo zQPee`gi!Sn6l*k#Ss;|R8o_C~ytF4}i;h0r*u!zO!f65CcPmZf@Ol$-YD{b+2C$v% zK6bpCs&=6Q1;lem;<r@HvAx#B`wp+hCy%Mc)M`Tv5@l~kA&H-9KdhQnKDaxDufH5c zl<*)FGA7DL!V=yj>2D($e+bV%`@dLzUj}_U0wN{Yef34XHUnU+4@H2U4j0Sr2i|aP z8m+UB!EkR2X#+)#26(_u7Vcx(Ll;l5J*qw+GT;hPEtrpd`6a}M)yeVMYseJXPVsZc z^R8EzK*9FktCe7!oI(5lz9VYzC9?UsKq}_h`~}{B&m4S)++zRzQWWdR92BX}6PF|6 zAd}S5GV^8h?Y<eGf87T3Y$J|T#Sy&MT#`P{yOxgjU{wmiDSsuuz)Q?rirF(TAG}`s z3DWiW5bot}vOrNXue?b*eA=9W_w&=6a3wbrQCRB5*(=~LWV<#K_dT*Ph#MEz<1-YQ z5oWF$`&LNsBBi{H4vP76FUJRWC1F{PaFb1-FUVDkdl{j?--z%z-p3>V?D72Z_>y`= z1(7S;=WbqZqqe>kGmbbGnRG*5vyh^qy`hSQGQ|10aEG(rj%|{~LOg!SEJ9l^MutWT zH!UGXz?#TT(gga*B;d^mi&Ril;2^;i?Zagv7{lAh+4l)j`7fOj7V{k#H7&RB=dA|% zh%^88nh|`LY=28trA<(VsH8czeQWD>V&&g&!>>NK4Bguy`gb_axMDZPxW6k9BJWBH z=-vVxb8Z(-IkO$Ty(h}N0IjGIf$ZIDToS8e&rpWU0SCtu18AiXkf|5e5#%Mq*{Yot ze<$agbMAedEBA;ISZUe3pm_C@lM7S}ec@l>tBvgaYslXJ*wM8(qdg=_!xNTF2R92$ zfN51j!N>T!EpdEnbrgMsb0MCtHE|(QTQvP}G8$&i_&uI~>gTxk)?twcz_e<QZ@A9> zrS(b`+r)y`51?&P9jy49vKc2i+9)bG3R}3Z-X3zsoYfXWjgr2FcFv0+3H`${^eU1@ zClC`@Lh30e3~i$Ih>5$Ztg&1hdrlO1IsKe)HIM9lCj6Vo-e+dZg<vuiSEMe^O3HHu z=5@~wQW)A2#Gjftz28GBnFTWvx*4mVdJ-=`V0t7m-sG6^GXU=cnc!F4=c2#E!bz7- zAtUTaGK5SO7Mze4mMj6-6xd0Tfm%Wsu86A(%BC5`h|qCfy{2l+o5>sehG}6;C$BVD z%MB%^XVM#WRj~^84c;g%4y)QqgSz^#DiL<&5nkHp%;cg_8HbnI1mSr9r<M<klwWTV z6L^*mNfrZvU>audkNElZci`@C^a|Q^-TfLav3~@c%L~wvOs>P6)*sN5ok+*oHR}IB zzj5z|#GGLwHZI2a`>tdbQHnuya@dH>7-aK<{Q~bgtQtQ&rBO7asOM5*jubF55#|;{ za+MP>F^3dIGvTL*bDu#r{*O*;5-HfMS!v3wD@LfzJ5T<}Wxnk6`{~9Qh5eE;6l`b{ z>)&BoW14fdE<uB7qD7`jrp^6SH4m(^PviyE+lb8W#Eki~C`@<^k|Pn?nW8le8MPe9 zA`rTJ#K{cUm2xnZi0~+K&M{s&YE^|?n5O0Y0!d{OaD$G86ryaRwWMhwgQTUz1tXA1 zq!+(gWXXUh?Y;965}#lJg;xJ{b``E$P>Z+Bji8xSZDy=##XO5)O4%yUpCb%IgiE)q zjo}xYVsdW8#Gjc%4yFL=TVfQIyA4l0`b#`_myQ0NJniE(<NgQF07U9r#6izi;ECV4 zSa`-3G|ya&bYdQ1b<v%H*<Dd8I1d!rLF(G(gd+xka{8{JX3rM`dBoruUFIY(zHoHl zOmbSC(h?HA^L7$Kji{1h*HN=#4n=jqRrl}8W+!3Nl8$c)ilm-T98)J+wWmZ^ddVow zB0EtGMf^O#<j3n{=#JX2sD_*%U?SIv_#el*C%=d<UDS)d4p-3RJ}UlR4Gv5L@WO)J zIOK^t`p`0aDi)l69Foy0(O7>1Q(_!7eR3Ct<5rTh<|I-ddHRp#qNr`Oy_m6QtG199 za5^FQDa|3lAh_FcG9|gSA=+q9ezQQ=@}#~*Wq~G(N$P+4*g6s0=V*#IPTgzPTFiYB zb3=(Lcr4u=+Y<Qls$uLNwxI{LiS+m*OH+=ep`pDWkKXnh-2BeFMBO*jvEv-jlm+v^ zmcohgVV7(Vhz5kA;BPQBG6#M32gL5lu;77xwhy}`>h)<~c-H)XEgQr)$%(X-5Q|eq zgL-j2@}io~kz=sgH*nsx5N6jJxNK$^D@ap$v@3;2J5vy?cNp`Dc?H#+Jg*UFxq|1c z6PcTwqn~l)04n-@R)a}<5yokx868E^ej#aVjjEram1`|nH1IS?Q_Ko<@#pPvLHwOj zTZl<f6*{qJ!C^m>7N-%d-63esQbSfeT08(a@a{e`(Li+3LRIY`j0P7qP3My%q8hn* zo)aR}1Q+KXc#xHYgY?8PgkYR6uB*9##j4-&h`{zH;}VuNM|9C>gj=0+v|t8lDD~W0 zi!i>Qv;sRNOSt9G5}8ZjmVu?<<wxX8c@E{-<eX(}X{|A^h_s;dW<+r1+$y}2Jp6B% z9>OeoK0<#ahoWlPzb`iNd$Sf;@_+5+C^q$G#MEM*T{ywL5FDX#>w>I0u=d4o;^{xH zz}A<7kP(3c)=dtgy_d%_gDy6|=whHdhKoMP8o`OkB*^<_6m5{mz7ADPoh7OI62))3 zNu}eFP&Gk`V8!-UdN~6OtP#j6Moo+;=dj@gbg{pHnNys1SC`dgww-J94WRV7K%Q;S zi;d9!2kE{RkVE$BdDXanK@C21WDQOvM$jbMW_i5?rKT_;g_Vl<(}b}+8S4MNIE=Mj zX@shcZ0*Mc16Q0GWcSC>&~^)c_@R68)SWRwd+x!_ls`B%U4E|^y?~mQ-Kf)liKu%i z?96du+ORwEEo3Z}v&(}id7r*_a)T%vWfLJd0d}|N{m%OS6r<wKz5hlM@y)X%qRlp! zJKxojz(02;Ro09A15?X2LCNp#<reuKM#tnek&vF9^`{myl_dMWP&n^RbWdD2!JUb# zO)b}^LYp8vF%P^HUtaSQWHNqi*$~!otUoMqq$Dgbj)Ahe@3<RKXWT}##&iDI>z_H; z1s=SF7Tkx_lfK;!c6Scq`147hZC-@o-bNS!3!^*DO$ab|=XBByWY29O;^JQVGir?N zXswBwv6q{xCx7Q;p$HKO4<|W-)_4Lr$Ih4<#`GFfw6<cOVKhb>AFI@kbj7%elGt_) z>Y6ecG(nVJ%QP?CsOMeUm`fjX2{l|b6E!t0JNiq^ZB*TVU7r8J6Lxt$^f*kC{zwXY za?gZ!9bO}<^)4k}2Rrs^N!s&0@OmsKCsij%;LBmFkPbf<62IS)z~@QwuVLcny);Uq zmV?!7TWHj+bGFk#eG5PO^dorY&!n!zr4#-jIe<U=AB>RKEg`C9@wOZ4amJNDL3RCG z2}2#xkZyv(le(7bZ2K>Bs_@C9YjJv8P_|HXa<%>wc+xU;*p+?xgL$lZH$@DdCwr7z zly4Zeuq$SX!6kfk5%CSPb1kDfVQ5OiYJ1^qqaNq|lCMIJ=`T1+#gP7H;VG*o)qV;o zc`X#DpF)J+PJRvUk#Jb8iNz%C7dHj6-^Wh947YJtwfYm?KZSiUAyw1Qjb`uMk-)dt zM6r&Yu@p8grKYcf$Teccv7z5l#O-~!{U){$brJSUCw!p|e;^PtkV(mst@nNBDqMd3 zr?GR(A_|`J*GyQN@YtJ`!y+A=Oy2naIldmJk}Vo4aO>y;VFq5WeW><R`D}C~?O-j1 zI9Cs4@M6E5%)^s}cT*(6QTDXuwexnznhWkIx<($KU<aj^$2)YW#+TXl;u_iQnwT*# zr#672$$xQ7gPcJiT5;vwfG6d%8b=B2tGBm;Khi(laT(`l;_oKL8lw9u8MR+J{&b=G z&zQFicYgPO@RN`HS<xCfPg1_v*Z!GcPIl@b#VKokk1DcJtn{s92FRY;axlS!;sGx} zaCSoCXNlXt`^kQM?f3@KOp+xo7xkDW5RcC%KrizwpF44}6B8YmKfh^~l&-wHT%6LK zkOMxrFp4kM5I6ye6YV&YjR%169`K~@q_|%Q4?Ne?b2=_hAP$S)fqL4f=|mLMs!Y*} zo#!*wm|B)81eDnk*b8enN<h-T0!39MhRcXKz4t4tqU7<9W00pC1xv{07nSZRMKY6) zB7$3qrv3~syWR0mJ@M~|q-Tn#M>jBariC|ut`--(_dn6S^9!V^kO5eoB$FUq3cD** zJmr2qoa|F>Bh9({JR;my>S`(V`Fn*HuHjY7j2Ul6$Rvo_lHk1oAKb%UN@h3feb<#^ z(F-@qR0R2$bUIPu%vbPLM1|vw_LOHCSBdPOAbh&#h-w<JtS2pMM(*C3679VBW=*4n z+Ma8A5~+BY)O-u=({IB4Ke+{e{O>6CbeN*i2e;z$sril1v$aIA5PK}csB25&1K*#9 z6EFG=MFn1uXg@diF9}n?V*)~Ql7u{rm;m>azhZV3j%<*a&LyYCsyaIuhTwQAz4~1^ z>y!h}x9`iU^lo;tuH-*j)`3`x(MiwA8c;qFW>oCy{|3eQ@1_U~R2niv2{mtVh<<d` zPGMTQ56ka+4}S2WP7HO0iGGrz&fmw*SN_N8d6y$KBz^{5@>V9X@XRhW&p3)anbV*f zCDS#}tM=j%PQ9cLKhcvB^X=J*)fP6C2fQ>3b+RUc$}KSRy!4)L&vA173!S}O_LysL z?{VGSJO)kW<C`kV;Q0kgnfRIR#gt<DWjO8P9tx>`?D;`FMIlyEjHP<`m)IFQGS@%y z9M(PkWqjpLYmtmPf~L|*-<MjLL>*fMS#&X5@QFJ%qGfgy7M{KY@o1IU^%82I>8jR3 zj0o$<srJzBl;|aJY-2E+!6(#~GD+0WcjE0WythABHcW`}t5@RCo}n6fY#g%iRg(H& zekn>36kFU>3HE02X8UPqZ0pBkzyAepe&?@AdzM<WZ8?QlabeVP4o?P@xzAoqt@g*L zkNgVhn5G8R+b9w6y1a^93(gf7$l!(*!}!FqLA*dQVYUr9R-CZiN{_!12d{w#lZ<HL zMa2J`O>umbr2enS+dniSTUHn)VT6tWrU|AErjh!pUjjrkUUeVSQh}1{3YV(uW@`mP zFsepSKX(`A95J69f`=iK;pPPyOkk?;Si})M=h+!V4zK>Gg=e{&54p|*ghg|zO;O)3 z5{jJi(g+R(@N9iuH4x<}#SS{dUu=xwmNg@IdQVFB^$Q!h*5aiEnwBANe?a)pnrHkS zFTeaXJo1|z*tseMX%ZC7P$?h*W@`l;?0C_@u2o%Fa={j|WzHeJyHRvA)x1%ar2*cI zd-e<P&((byJl>NMVYm6UrdTLX2P#$Hz@ZAl)>m2_&j(mfD*w$y_+MEyj9&8Va2-Ea zsb`#$JU8iCWyuq)+Jd3J>+!?)EXRs_Orjm@U~~On3kolRrRrj!cc+6D5BB1;H(Qu8 z{b)pc8;IjgSObw)U2=B6HAKlQ_$N7ymXSHY8E;3{$qcu&oon`4Q3fUkywD~mFtHie zmvHcd^)X?>Js{e`NhgM=N-W*mu#ribXr9@D;oe*DrAzO|=H(V-Z+`~`o^??i6`bpp zIeanHV`1|PYfwF9D%uZQ3dag4Enq@giM<+#5TLH?%9MjmBM#OKTUgnjK|MJIxKpj6 zik{`9;7aG;Vt_Xdm<d0qMsW|2l)r6D4BuEC#ho2VY#qo5j518Elv}Pz3Bn%#NVSDk z5C0aw_{6ucX<2*}%@i1l!vOe3LRE$s;?7fsPq}a#&OW^!9lMvn2;>K?ONxX%-vGB6 zV^xJG0xu)8U?)kMq^c%t7jp=-Y{Lj|UO|Ny_zRAkE8JqIEbsXUh4vorOyk#E;-YEi zGdoiv0m|f(Z?54l-LdAbOy(goI7#$AfA(+j;&Zp)?(ggpuQIKq6Gcf&Dqc0FtP>ES zcWCK#h~pN7>!#CQoGZ8>L}Z{OoPwiIN~YKfjetx5RyY6Ak-$TpNxX4p1lJu^Bhqp? zMK+*T@0O;mS=L~B1x~DS5vFt{Y!TPz;hbB^Vatx0K*SJ<QI=OkQM%xYao(Elpr-B- z4B}fzCf9<S>u`y$S5s32C?3J(<_b7?@~=QoUl&flauqW1Q;|uut3jhB9dgckkTuyH zaszpq840&UZBZaIvqo;G<L1&zE84(;gGg9XKMjScgJh0z$DS{&9L6sxw8ym%-X@p0 zt)D|9Cj4|#CvWpgOrQ2a{P4r8@cSG1CY}B5>wmCNT#2ix997o|V&ii*hI+ej;>8ph zs9TJo?x|$=q}7^Anr4K@nGueQYm#yb&<kW5Jlm5NUTAJ{B{~o3Q1j|#_uu?R8Wq?( zczOHmV-*n>UGDeGWY_<Ca~$7UJAyxLPl$esnWU4=<1Z79i&cL@l7S#vW-mvm=2Q6b zN1nppzR#}(WmoOu-bwLQZq|>h>e=%dz^3Q9)_Du&E{>t0Z82hlEh0x#(@QcskUK?H zl*4K#`3JblZZ{$5ixeqfX3$AeDVmX)Xj~>M(r5MDz=?{VVDw%>NqW(sLs$72v}fFz zcV)lSvVKd%|JyAIEZ?2NVA2*2KHhs*E2%vGR{>4V@)I8a*{hL?e+7TN<!|`&*ZIW& z(L~0N`u_ceiLtqP$Y>zsh(U&H9;bL`cm)=mHUiB#hc+rCd;)URSV_}}*Th4nI}qOz zGYZMV*`37w<ecIef!qSCmJC=!<<he%%gn&*ntG^%=vbtryrHK5a9Q?_5gT`rNB`Sv zqxjys5xhj&Ror#6`|Q;-l*t~lYHvsnX0Q)N^{4TFH~#^*-xv_DF)gHG6SA<0bGqeH z8(m@oz{tR6ocXpsBx7fhZWn|ZATBZCE#t<2!uiOkF%knW4O;jMsjJILU9}xeG{I~L z>Dl*tbq0r;M&LC&aooI$OLg-+fb%;<@SMB<$L(=!j9Ph>BPAcx-#chpN=W`da0HEQ z|B0Vo|0mq_O*?xl6WBX*V!iHyBZlZyZG+;UNep&v!ikqy<P$i79#@l3fU`L~|8IGm zwJvMx893^hVjlr{tXGq#`tk0xNGR$d6}FDlS8fmPNj_KQ6UZt&EsOKz>@&#kY~*z( z66Lu@&bH^Goo9P9MC=LtXnhQ~ZH?ohJt^#<kZYQ|m}tmW?v)`pg7{-YVKmQ*!VG;4 zKl#WnaQ}~4*EfaacO4Yd={FW8KJ3P3KvkVa9MUBwkf4)Zjk!xgXlP$b&XR~a{gU<x z><#fnZ2{Y<oK{R{+#j>Bg*1WZ`qNlHY@vgE1-oL7h+B&$O7y;<vVA?`$oCm|pIfTk z!Lw_0M|<N<buV7Ivas#xo;MJIKi88H{rH&pZ`+!{(-dCaNfJNFsy^3Vn7VYfmXE5R z15w=L8Y;^#j>O3Kao4xMgS&1X60cX)k(wBv@Y^blxH}U+_c`Nf7^@$TQ$Y76EI6IH z<4KG|$|q1VCB)+ePt6xiN!g<vlq21_@4yS4DdF6Do|pn_1blPcjw>5NRDJS2X25oG zDc9e7-G_Azqt?v#&olnG@eVunwvSkNfP5r8Z|@dT_3x#S-g?rG5{|U*byI$br!ADJ zpTrdoKj|Fe{{7z~;=dJt_)@QUm2o{4FNyv`rGraevwIIN`amoG;|JGZpz}uBEH(#H z^m?dd)_ZX1k(U>tWqb1R{J=#`K`d@G#bDFLjX}(*Ge-U0sD>S0a50Z5XnEUtAP2rL zg7cQ^zTy^SE<UeP*GGRZYd)Mh%^|y&h{#vb&vnBY45uB@qcH7tEJc|%9oRQ6Cn?S! zMzAV|rq+++hab8f_x*TqpSV7eOD&~+Qyeqb@${k(G~wM}e;b(rpGMcVnW(N$i}`3} zWDe|W(>;^c_DT?ys$hl<v=Sp|CLzHLVQR#{yjoMt3E+yvxwZ6q#CT0A-rL}iQC)%a zq-%aBag6B<Jl09KFW{*<yGhJ%B=cqyN%@UK8Id5>ljQd0HoECZIcFcru7{HJUS(wo zOx^VZ*ygt=oE=2#yq$DMU%}5m_B$f}sCbnnzm;}Mh4?*OEIp_qu@@f}iFdg2a|SNG z?mgrf{5bmd96?4kginA~tVtj<bj?$rrQ<JSyQ6z~5d^CZET{{Jc4f=}rbbLO5})L* zz3fcnP$QcUwE<nEB=hfL2*+zQ4;=?Oi)C=(4L3w#f5nK!KONC<G)9kEnh%m{&oc_R z8!>zBH_^3?7yuG7Q3q-okS00^dp-Eva#r!jg3Rsb^j?dCR}C}PBRTRd+<WWKaQjVi zngZMW@!^tbgj3oKfPtd}oG-wrbLHo3y!lgCAU^U<xb_@1&9Ur!0^>c9T%UgVjO~?# zJ9(m94GiF{LuLqVq%Cmk?&(!JrjdrgjDeks+}W3lmU5SzK;*UlW=LAH;}K^prW_fK z;8?u;DPQYP@!SD&T$1U!liQ8cwTlRxo2STJU3C<?T(~z?XzUz<Nt*lM%8uB=0kQ$% zrcdHeU%Lx`_yX@R$N8n7t3>gwL@8m6opkXBfa`wndi3u3Hj;@&2uAE|uYp4W^4;v- z?^=%7bWL^xHniLzkFhiSM*p5GUv`y0A@_K+o5CAa?u|OP)Z<a@b;dd$v~2CpWCxp6 z8{(7+6A^M=w@&*2ZvEg>xaWua#^q8Xvyxm@{>HIuIFn)`w{Y=)0Ppzj*)XloqI>Q6 z2sLo4aZ90E*(41e$RTNC!hdoOo1(u_eZnE17!^CrgHfZu@>>4pf7#eC&tJqC2Z5=6 z&u12sSkmWjjLcB7GA5Gb-<y8aKWI0|=Ks$}arY1S4IJmU$>w)UmG~J-UwX<s0Y}sh zY+Od@9o&wYCv3yCIn@+spNe#%MuZ7<gL@243ctYKz#VhtXAlZMf;SkH(~jvf)lVZJ zFO#oe?h52RHu4^e_vQVa_jx*BhWs8azx_ByTPBBq#CL_GkDJ*rzSTANp=tKr7)*Qv z_uTxr%Iyyl&SofjRq{7e9_n+hc0j}0M}mmV*ovu3pF;1;LDV$PBTTJ@oiRi_>JWr{ zrm(NR|6?yJ@3O~nWy6m+WC(p<z+HR{(WzHA_MmIauVA-*5%>RmHE#bz5Ypzi%Ypdi z&6LfyXZ1`CHO(%0R7veRtQI%ke+C-cK9BA#rwUEM$<81w>ri0@N)9CNV+TuYSf?=G z(-`Rb625rhli0Oo7*(~vNUwBzl(5Y|7Rt+kCcLbqd8I~7iUv3s?oDIE^INd+logn9 zjD@Y+7Ler?7CE@k%c_{D0ws-jgiCG!$)t|n;StO`=6|tk%~x^Dd!E3S<w?Rt3Z2AF z+0@1@8{%guKMy*4{&mwqxQ1h{26{UvF139(PFS)W=N)UoZmh>}tesB86z?mcDMS@0 zJ8(p}*-i(9k9o$d6*#^9SJ<-pTe$U88?gFeeh+#7>)2OilV70hZm>K<Xv_qxlq-4$ zM5;C7#v$lihH%Xl|HQMK_8@9cLqo%CWYT&zSGK|kDzG0ICUJ$!G98U@%*8<TG1xu- zgHvmNgs)yZf`8s0qUUWfvWsK<Zb_u}?>Ce`L3m@yBOw=cWQPqz1Gw&2({SFE@5lCa zA0yXxh*UEftDVH5!V35bmcS`?EL-UmW*>Dk9=zkn_}(?U(O8?oa1=<SG(X35PZUg! zBpOZ+PLZ^a#p%#U6<h!05JGh;aM}f%QQg>%*vL#|5*+)o#K6+YReDkZe}F}}MR87t zLdyXW8=X4)S+q3Ygungt7x?X`_h4kuAsi#q)8;yFG7U;Dvv<E?axehS6);G`hr_Pu z4IS+ZqT}T#LX9utrN?^EG|fWWyn6E5HWAl0M2`VJ><S~OfJ$@}v|y3MPbCes&EAgw z-G9TQcl;FF*8d)V{Bi<49i;NtayJt>tIsMwdw*{*Ig#I_NP%s09|75R>8&?Z<BCsQ z1uOmm@*o~bHd_rGr_!Rg0uoq_=X`226ock&Kq&k@{P`QV;rCyX^TjmXfMHl-()A>R z$(ctla#7t}zRK!H>Ex0x;w^8wABjj0hWieOn`u<D!7cT^O5VVs1!Cj?Iq`Hj8P0av zN}A#~a76VD_~B<B#T{R>Mj=$0+xq*0$twayj;yH(bw5LlyrJ2_$rk~=y;E@cr;o!~ zXI+Hu#1$CmoGs@Sg;Sz8VHwONsK5b(RQI{<d?qEE%QUv{Kzrm*c=XYG@t3cy#FXY< zJa->3*sF_dKkib+10X64po}3DAtzxXpnl8Xb=Lrk&z%A*aV5^W@?zrtXJTMa9l}+d z-kGxrD~w>WK<-RAo!m|^;Sa*rp1|XG+)sr5d#rk>9}oYU-y2XklOdd$^c!>NAh>AP zE24nhm4zRqg|FboyQkskGe3gZ@Z0FQR<iTLg4<X81CtB9Gc^NAWVAh~s{I`{KK4C) z@v<&u+XpFR%xb?QhS`>BTz|jG;*hw@?A>My;PXn=i7|ZhfgmnCZxNRFya(x#_t4>o zpa)zvs>!P>sBnbx0#zTyoqBAZOwBEcQ;5|30(Q&K@b?E-;Pwk_(W1<w1=(b#tWtRo znj{XHI~{e`I_C~(Vn8FShR2)=G|!}mp}DyB+b3cAlylM9doiND(}g9#9bI%It=f=P zOoP$|W#emHIU1B5rHF^uHt#}v^S#*J_Yi*m(dW^X+JfE=pzCSL+yh}p*6kk}QhyXF z9CCL&>h5*fdMqvc1Gc!{@!y0n4Rg>q<1(Ch*%{F6g&6K$h-6$BCWJ2NKVLJbz{G=; z^l%N46T&KdsLDZo>soqhHJ1JD2@LGK8$*Lz@w?CR`=zrt7|E1#8m})TaLC?yJ}^;p z<9-nmvSpIc!t;O+{yGS^|5Aj5??m;KQ%H@hCrJ^>cH*c&>42*SFqpvvnQudg^*xJZ z`Zv&<{)Qj?TN-N~<ae3E$;(AzHhcEVKa=lZp@PNPofuQYZIap_s^&7!Ag=#W2p3;- zG?@igArZX_j?*GF0b&%=u~_jF6c=($k!(xMT@l2r>AeWo{+`tR+i>5nR^z)LNFi92 z7K1mf)V|O9P)7U87K{N;8_1;eERr3z6liJ%YT9SxUB6g}cASPp>Jqs6ap>D6k;~)` zF=mD|Q7@^;yDD(-;AAhCsF&MuSxL#Hr_3NMcAiBfct1MvEPnCsHHdX?M}If4dAWz< zy67myQs1da{d}k}fPL<a@((cbq!TRWIYeaRZ9fL4wbh|#)dgsneilx<d_L+LXJV*# z4pM{FaEO7pYL1tt+j;w3sXG`yjBYXL(54C%pL;>jmWJwMsBhVh;lU0({g-tZ*!>7v z7X1UeJL9<h{rnfKo|$Ch%dp-dZs)%$npd`993Yz92e>?xd<0ImAurjRz>W8`V(Q^% zVkCMo8mFI12-;3sK!hYsh~mqdH`clW2Lh_ws3}6SDU$w4Vz7HK(D4jv>PX^mc^qH3 zXb<^i#3_kO*Im(>hetCz6{3GFs9@%}cWNJYV|_a?(iy@DA2xB#cN;LpJ|5c8>yUCT zKyr9tuAjH=kcr?$55``HGK^_>%yE0m5S^aA0Vt8$H3*sifK&fZ^y$yzSJw|>*{v38 z+fx|q9RFEW;FVid*@FE9ovi_vYYcRiF(%dgKr^uLUw~=~7Y=Njg;TGXfh#|L7&17C zbcK_M87#%X9vzw?%?nmZxk-r;OiL!=dOm~69A5NVv^hebXCk%JLD6-G_k<-jZ)anB z237ShkRty)0(b$pe{&0|`W<MT-GNw@jWvG*GCc}|xl+&Mzf(y+lcP+xSWsaA2fKY@ zkbO``YQ(Fo6#6LI=K@!Ljz{T`f1vwh%sX)@7N36<xe{98q^FRY%4x?<7$HQqY?WW2 zR9@Y1L^8{04PorhQU&*wKe=;`!y#5ZYZ5V`n{>~$Ep)$uep1<c5D4~?q~C+*?q7$E z%U?ia>+|GG*@Zj40(5TmK0he_4b|AhJRI7?Lt+d`0Wr7&{_Ldg5wWU3OnFjVilhbS z0@wZ4fIV;wtk@EIW)U%g#b{_hl9)&>9G+{SbA?(!<fb!$OqN^&mh^@pJ32Fibe$9t zJri$~RQUBo{HutDUqV&&i>Rwzfp1&`ta#Y_YuUz4&V^7Wf_=#3>K7bsD_c;AUEPZf z%BDjtnF*}@nt>4dcLgwgVGy5rxE^!bj>2HiaTL~COibW7#D@>3$U{ym$Rj230YXDi z%x28+E}zcZ9mnfqB)knF;YZ~|c(oVwT9Cq|;kvc-?iFy7tI*K00$aP*<EyV9!mc%G zG)>PCLr9avcQM?HSG3!z*!6`$)yftWYG*Y`z+8C5eF?0TSAaBHbS=4z9Epu27o%-N z04?OvZo}KY*pAaqnT<irA^A6z-qlWj*+!(rk4+2=0I@-cD8xh)1>Yxo;j8H$8XNc- zi|%j_VOAGC?xe@NQHw2ja`|@r;nQ8j<hl?Dkh)*ngCV+)6@MH1iIRZ?LavD0Yo5ff z5Pw0Aud)Tj+G$<-3tV9UYhu`*o#rN{jM<}mO`Y^c;Dk#+zJnPs^;Qz}E%f&-WG1xI z`&+T-yeXJ<bS)A?H6$@>>BH$l4P8}`Dzhhr4UA4o%D=qV7?>&9$WOT0_r+`FxmQuT zM#ym&MOEDhcC3kF<%0vH>UWWP-%Tod4=DycM7-UonYk0o?ggIz!`NL3(EHhk!p=KK zc5dc!+zcuqyy8HmO?I(>ZB{uWUWu}d)N$D^=9z|azC7m*=y>if(8aIsRM%*znnDqW z)7lX2pND`kkN%E4j-bn(M$Dp$2rnRr%O!`IrUkQ)dAg0pk2QWhOpm2Q%@stQqQA4~ zF^O|6L$9R;vAeGPDK3p77DV(ecG2Ul^!}~HkhY?(VKX+r(2Lt{+}GVpW@Cn2)n3b0 lEwwX(*zL*Rc%xL|{{w1DE|<;&%Ao)N002ovPDHLkV1gBHI+*|f literal 0 HcmV?d00001 diff --git a/front/tauri/icons/icon.png b/front/tauri/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bfcd60336af89091249137ff263727d0c6e7dce3 GIT binary patch literal 95368 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%0D@z;{EKYIZm<u z{-##!xb0>_v019>??QC7x5iv|yv<C09+NO05Erx<JcQ~YCM{o41^exSqzkT!GZ-&j z#%SrcSUb8w@@rAbEb;-!k2n-#^yuK0^;Q9R)G)K!?kVS7&`C$Dvwj@G+H3Ucdvq(# z(R+sA7B$sx?AY1+XvBR}nGM%XO`khlR6}TJL(Tj5^XAwa<IQ#k9o&S4JG;3gY(`1I zoFc1}I}b9K09Oipz7fi#LGH1BlQ}?qot2(&(rVpShX=Cs>yfEmH~@-3R_GdKGpSA$ z%FUlx{b6Pd3#qlwHT;~^cc`ied{_~f)NOTZg{?QvwCIidNTrfFu+P_gmfqWd*F3L% zKihr~b_adD5#`lPGKZ~t&h&Q+Lo|NpY2v<%pb?={{{_A0o8%)b{8^?6C(awGc#aeR zJp;o4Xl;m|wu-}(Weg3UCMDo4)a$R)fFG9XtXC4UOptF#Y}x)EK5gT4tJM$O@W-^& z9WLr$iD%G(EXUZ+8a46e{?)2lzfx?urhfM6ja)i-d@ay@-MOI*Bn5F(w<P9p0*^oE z3;Nl5^+6}H@8@C03p!{lOrt2;GXq!6SRV636x+W<R{o3Q>R=_{a8(KYq|7r;o9Fc3 z*F4wgKMy#fH{qApJg@y=Kn!e8Fxc!KMAA`~6@WrXO{{kNFhc)z68-^(Mm9)hEuy}x zJOJzs;A*x=6|$L8&I9tJ0C<Xi89_JJ!e5OPclx{V_BbxQaT2xR%V@2iC(FMk{ezCn znVBA};D3_o+v5RXA=RMGfOA!ocBM#p{Nn@SBJGE9M@M>tloZ4RvZe|y_gD9l#!8%l zex8KW9a0KbnQGYQrbMyqRCvD?rJezX`94#QAo{u|#@XrxeO@^qw}FB;b3HO1Z(=Xz z2Xj%nO(c7xIQeo+S77k-!&Oga_8%W|rS;Es{guMjtXBTJVaCXEAP%hX&*nKK_eLv8 zyykiB_jmy8F8YMiT*mf8S^M9rPa*6UP#f9ArT4xdBlR=<_V4cE`iJU`hN((67vh`X z=i);0qX3A6;zM@91h3uM;{tE~$p~Kg{Zp7edIoWL41T93Yr9zOXP1iL2%pXTe<XV7 zcGXY^83lk@@2Vm#jf>-h&7tfF)4I4XJABZf(9hg+fP2BSi<&zSF6lPKOf~$qOdJg4 zw7$=oz<zJty7_XauhC4L?WVMs7~1-TfA)GDE$t)Ip3V>_2<7Hy@}A?vt|VnTLu1LI zmP0ZbQz-;I#$3l=bO+CIS^w(@OWK$YNiv`1xW}p`uu%Yl#3&W%`>g}u@n*P8s&FFd z5$Lu!$!`?n^QSOz=qwJO{}f|0O*A()aQ_CsJ5Zl7J4-%BdG{3nQy&?0g&G{Fy2;6- zAzu2?5MKQLX`Fib3X0A-tgTI=-BejUUQsCkcD6q4^p)<vX2`BUMSIH@tZUV%{$WZW zbJC&=>z|%`Z2hzMgxklCkpMdk7wy24l>@h%fn=ZKI5n4}ebbD{GY}?R0_{L0V#<W9 zNP8UOzV3B>-3qhF!|d;`*H1zx@c^!7?eQow8BalZO_+_5sd^_%O3-s6A1eTSoE~;% z?7!64wvG*|Zl>j`$h4rg#_aa@Dbxx8uX$ekgF*lnkBvByK^(f~v8<M-FgA7pBU87~ zX|=F)_cQ$bKQyp>OMN2r9Ze3D3vPhjRRH8_<?@I?)%?dHsrhpuPQC_Qd=EJP#sq0n zS82fBLCe2HgFLJ#8520Lc+8oa{%aOH3mr}dT9qB~BFU2GIikn?Z1;ujr>+yHZu|a$ z;{Nb+j-ndoI(05hyE>to5H0KD0eJ{Gf$&}{l<b4cq!>s$!PL1Mmw@EAGF=c;OD&G$ zo)E$F+)A>}3n#;d$O=rLo**GVFs^=GR#DRJcUiD6=&pMlI+@EP^i67oiQWGNcW`1K zk40Y&o5jF&k3@N7@+w~Is$wNdt0R&mK$`*ZgbP78|8bN@EA&Uu?p!3f*1+M5Exh;N zE@I|P1E2gY@by0fYxfLQa3p0P!d+DYc3A=7ey&{eAEd8UM?qFU@b13@=BEy!9leB= zJJ%3)j#KR4ftx+$*t-6o1lg2eIyxk1*j>Fyf@h=aVY-x=5ta~S>vTn5EIFGvwM{>G zE*)fcI*wa&$ra0ZZb8h6gWPZ6^Nj#s((!eJNrr?}47j=g+49T`sSsOi*;}()xdCba zg{?_r^8B)-{kk15JNUSSk2}$w((Zkg(a%kKJj|9=5~ZQu)wKRw87xf-g|HUDV^3WD z$X=$6ZY<Y4ul-IK_qt8&nt!s9RSAJe<dWZ}MZ7_>suW^$VG&o~{seR9Zpq)@`-~NU zbc9*<No9Zc2!e8;0MLr}Wx1bn{kIyV1PlYSQ`4BlN!)i%qun@)phLUE2%T|>Gb>%% zarxZs`hQHsz0+2L-Oyad#*B7s5%_Ux^Jl})R>gYs*vfSrrNU6?MnqmlMJ>>iGR@l2 zlIk;W+R$>0`xGey_u49Kz{fh>56;rw@Rh~JiG-n14AdV;Ghc*A8ejs?#v9Pzmp+M9 z7(V$ZBb8}M50TPSbJNzk+>KFjC@5>6ulYz-CH2V|f7KZ{u%WD1Pm?iCnd(8R;eYCR z8K<o)40w(6T4#?Ful-io?*Xtnz!NSDy<s}icSmxnL^8~Q=O4u+$*xJ9Ks5Cw$+Sf& z+l=+kVA&T%ruX=+V3!pDlee49yO4x^0gc58G#ZyMJamy>J_N5&OjwvK(a%#uHO-N} zYdLLMz}%sYfXQsmj)Y_l6#CxZQ#@#~?KDo427$*Tm|>yFb?ie0)u@IOvN$fgsoNCa z*I@ysAHJ?z7T@R1Ixyh@^jL0Oq2Oq5B<CjVWLLtZjvT4GKjgB;q?|7{t-9pFrFlnc zo)q-#>gSC8qjZhjfsb47vQogYe@^BbVR9c&Z2N~zZ_lWYr@@?;#iQ1IZy=97P+XC6 zgVy|=rkZaF$?Y~xk1QT<q}AeQqqfN003}+dhtUz2NS56rnf5Wswq=-PKr@pwxtF_v z-Bkd>kO`GFBe%x%p)y2x8mqToMd{>a1l=h~wjea$zj3)(JlXWjlmnS3QURbC^v$x$ zSoiy4QFb$Ud<-fzOUm3cd;-}h4Ce>Tx?)Sa;s#m!oELC=Gr|`n_-Dvlz@db%3IUcn zieJD8_)zzGSAFZBO+r_;)p5_PU}K+zw?pT~u6kB#*ve<&e?klVBQ;05_u1Xg4SAf* zwZ@ro3Bum-$xPEk!LoR|dzXbD#d58)V#%edn?c5-WIkgT{!<LJG)!H&n3)@Z`Dr?h zDJ&N+lPudHnbslM*2Jy#dh(f|%e`&}_GEfq*c}Bx5~fR^sh~k{X}|(Z&I3m-0H>~2 zaP-0%+HPJ$W92dp=#)wx^2{W)TftM$Q8jw5wpJrr{EIaIZkJfFkOB~HeZTd$Jmpwt z#}K_#!)&R$+awP%n9BBq=aJhylB|OZ<S95m>dCx;<u>PR=rTj;DNqT8e$tc(@&-F3 zjJZ0&C<srw!(<tZrGamn@PsKfZ?UA}`Ru}<*U5a7T*FU~)0#4wA7^xe-<D=nPKIwH zMh`8mYy_k)=b&;??AV&mpraK4ZfLdGQXwUtE0RAUw!;5AAnj4@Xj#>1PLbRHG7WN< zWZDC~^~Yag_E;Uae+w+%C2g$Z!c+sug%&;climddz-0c1>GWic>C7vj0U`z9+AJz# z=ivJ<qQl*m62Wil{l5dU;e1yM21B*VuI8n-ss!k1jbb<6?=s8PV;`S@`Q4+&l@$bb zmsjWscej(}Tcoh9`>Jw)69+$|<G1TRzOIwEfL-#P^iCTAz8&%4<6eUbEA;g>fNIyl z9r&(Hs3trwj1{D%&$aqx&EUsx<%T?^ht-y*I!n(O0e0@~$UN*DM6UnmwJu4iI+3EN z)`^!{CDr1omWu-SrD65f_X`MvqbQGbaPG~|NeTEFj$OQufB1g_8~=$FfOG{2r3*Z7 zXTbAU0F*VaTmYd|c{*s3SEM!u9DivJXU?BR7pHOm{sKDd`YgRrwp5H!fZZ2%<QAkv z^okIK6NA{23`o*=dc!_QeF2{7cn^53hf@G)NuL>aO@EJKQS|NNuB?-vEvrOAE|;6H z1h}#3;%-wlCE_ZBknU+{q^l#ID8W0aI0(&|D*lq;vLfQ)ss^_Bx&1CH0Njc15-9+a z<!y3uHTzts+ae3}Ci9s&Y3J9@pr_a;+y93v0DM(tB5A6lG%k3MX_9vcDaWr60sTu_ zd*G6Xo3!B3dCbh7LUHa4y>=hJ{_6))<|WO7Wd9o>o8QIzT>;>WEzqvzIBJ)YLq-p+ z%|kRHU#4MvlXi#G^lGhFBND<!rFRBNmbf-Wd1L0x^Bavox^(&QoYYO7ul5!D2mSVL zRu~%h`yi<}OiIDYVbzp~<LzA1#TFgkzmL}f{L4}ocgZ^--3G3rEO#^EfQO!w4iRx= zQu3AP?-(P2e~H2nXGaUNY>%mVSqWI6xxy}fRzx0lp~@S<Zv8m<JCD<@+2Xs+FZQYg zx<vIsOL0!H0uc5Q09n`nPLF(?IWR;r?IgYY3c2~4Xm9?C2K-*~cDJM&1_i#*Btg#& z&tCyxqn}y-!fZ06Q=sD{>T7Rd)qkCogCkO1<vK}~HRR|SYPX7=xCO|RZ0Qm*PA>bD z+{sM7LIxgf>>dgx8la5@%M!SA=r60oR$6;C<>LX#h4k7GS>nTVqYl>;xeF(AaW%)G zYBy=}w9!hFI%Gx1V{9!61+>ulAM`hdX--@u;s5q*39nBTrM1u5{haj2t5c>1M5+>D z(Dxa52fZWDb3&5q<EVlkRsfdUp-d?Kk`Au_XT=~?ttoBk-_F8t12|H4u?%CO-V6_u z?0XIMb+Y=Mb&_|>^tx&Y5Ru>ym<aFrCjmUajCxLt-~ow3A?Xk!owhtW4P1I}4Cmi` z4KpWxK;D6?2*XKw5ARqZnJ<nks<sTDJ2*o#8?&RFGRo~NQ1Mj47AJO@y*ko$*jdIm zi)V+FYFHgC;C<amFwlLnSUHmwM~-Sp#BFfLb^P7L-9x%xP5Pp42vu&Z8yXGrrS<fH zh*bG!wW!?uuaeMzd!~dpri;?u&#&?K8!v^U`$}~6c?OZG49o}@>*9ZIb0>^d@vfsY zruZJ+*bJp-=wFt*_+lfZFp>5KnQ~I}b_=xlP7vvg7ol{)MNtjydJUU(AAa{+dhHfk z>upJGAB7IdJ0XKKGJ()h@tWs==cfR07bHQuMie9=Dh!Q9c<av!c=unQCI#Rv3{Sj6 z7k*SL2Rw%Z-5<aT|DBwjS+kS7RMH)x@Ug5B<`^%>n0b>orB|V*s&K6W@O<tMQun`d zl`G}UHHR}eJitwGxUT*%g$0h(T&War(${iV<#zCg3eMoo-cakBYQhRx{ujnP{BXXE ze|4xV6#(YupDeq{cVti4xSM;Agmlu*o9761t3~3G;r0FN)c}8aw}YQ9b|nKPmjjwI z6f>8s7hp%1uxb{>OG*e&3i!YuLS;C>^zl2GIrc3Ig(WP1#jS*m9FA0v8;+MfA9A4Q z7Xk<aN4xVC;SXm$o`1WHYyav9uKdmms1BV*eRT@;6?O4aVX#Dh&jQ&T08d+QTt;@A zUb?v%NRE0=65?31ew*FEcL5KJksIbg15@h9LcdmUWeq;F?{z}eXy}WLK!ydn8Rj=P ztKdaQk_Or3&s`1QA))`ng|hSjm;^sg4D7GjPkRC!h}*KK<_?3`GAD>K?etgmkmOJ# zZ$77D2e2IgpCMGUpjfy6<pn!DF^jolXGj6KM0cr)`*-eO^*?kIHbCx&qZamaaREGA z4}kO!x~9<AB{ztJ%1DGm7lD_5A9&>_lQ{Rrs~DetmuBoWbXrGLZKVDjY^&dAiNxwt zB=b^;u;q7>JOJFh#%%hkyxevQ%nN!#1iE@aE|iSb$GSE*Au4M=0Pg(8iXBJR<ePOD zK36A+LDLME$b-Oceir;cAnX6-$%3rwPnNX)TiJv{p<MuWdhGtZP~kn1<Nz=@H{>4| zJNSnOJ{B86lF;MX`2TabC9)2~RTe$h#g+@GR%q~x5u$1f-O&e##+&G}7S7>-mPhwT zlV3i22mLcv031c&qud#)ui5mm5O4g~zz6@HWB+GR9sV6`u6}^cwez$)mE~s~CrkQc z4bW$Gdvxt}m~gq1i<kt)6bXKgCs%Yl*^#c}Ohtg*?05IRA$6@Ace@G?^m+@p<?f-1 zD;w~z_0O)~^>&m90RBC{-!~*bbb}9*<^N-H`Tz0J3SOs}{}^ZYXKFyrVpPgT#?^mt zZ$~a*ltR}@X{p)!!%Uwat@`-qB_F?8^U-K)!_rmvZ&zvP4$yK{$yT!ap9{Y+f^Me* zG1Wx%;w{upJ&=i3^&3EI*?8q6$$<NeRkUXt0&sM*pP*}u6mFLYOdkc#yjaB)j$#St zu(W&zL8nUI0cIHKLN)tQnUogK42Cye-7BH{14Q_2-Iq1yMS86=>0qXsZtoegIg4F} z7;r!RP;LBte<~CLDADp`i(Zuo`Z6D&(NXS3b`2-rLGK+dxiZ`T+N7%OuV{|`PN;bQ z3y$b%L12*|L~)w^&-aHncIJfm&02t;E_Lxat?4GadL-YB&I7T;KhGMe@#?s|=qUcu zEuy_qBUivVRHkm=2>s{0_$eOz%*Q9PC?M6z*m#y?A<r%v@N5+T&O}j3d~tGNn=2HU zT(6NNIZMC4K*MvC-ZRo0@3&Q{&js2WoR#QxauM^UA>+v;0J!FRCex{n`vs`>^iM`E zWAXf8GV={s5jZzmkTHE0<R6no$UN|D`pZP{A`|;~vb>Mqb8e&{KVu-PKXe;nEBJGE zuhH8RqL{fuOz-`R<u3lq{SH2%HO*@~nHb-ZCDP(aAsdFP(T=2-djutteHAi*>$m}L z{VTLrm>4MS7RcpULOjzu^lTLXSw9wJ_ly|jS`D50X{_A1hSG@_;kReN&HfziB8ej# z^M77bGWkajKRpH{A=b!M{2{%*Q1NkXq9}W|8+JfR4z$}XtSkn?=y63y^e6zl47sfH z?U|zF1K<pB_5^gAnu)tCWQPBHvnBZ+elLH<H13hCgpSPt$s>|#UeT+LbJfSKhI0RZ zxJtsG%X}Qwyh-JbJe#)B7Tew_N4Z{@+olZZ-gny5h|4cP+*m@X4h#)l$I5yu`A8HR zZh&WYo1RS$fU)LTn1_KU-5(`#@6VnE&b>W^6PK@HZ0bFlwJ(!P<PgHJsLYnc(zM3L zbB5>We1J%`obA%?P@)$(AAn=X+}MR<hLRyr_i`H0NX#M!5E*tiKU99<VcPhaIEe4r z-ByIJDJ0NpM)FNVRS&OGy#M=iWpe))W%!5RCria*VN3aP3X=%R3L39pPlxeBlJ#8c z{|}2~{Xgj92D$&`4Rx76LeZ*NcF$dc&@Hf}#YIX%v{^uBl{*Knk&f^!f~bvdhYe>Y z%=08iIC~DHOx^jL_G}aYC!vs2EfUMaA<n!Fy#D8${XdJN7v4ps{C&E}7w7^jDQ`j# zFPhzNo+BK6w<42s!U;kd$zE}}vs>EEHPQmYCV}M-X7LySQPM4ktK`<_GC)oSyiN)L z$B22&%?!JEW2%IA=Sny+;w2@5eyl=0_WtJY{xVE8hFpW%Z_1=kpRETf>z@<=&ikl$ z)5JgaD#yAfgT=1gx(x9`P)5)hCvN~*S%)8B_S{z(TUe9*1J>`60?_f~ZRS$KXG9LP z^C199ChjWYaZ{nh7c_kgc;WlN*%xL=+8o8ky<_OC7o`f~aI+tW%@Nz|XP01-`{eyA zs5#1==RPDCA`1hqFK5f}$dFR*T*)Djx|*#)kx%sB7xw1Nlof~nt%{2_-FPk+<kyEi zXUm6eJLvr0Q)LtOhGw{3G`s!(o-BWUT<>ZQZ(TYP+Vra3LZ%(4<I9jh;B&K}3d*A= zurPNF3uk6f8NY!$zXd+|OLME^M5e}JywmA%&qe`oJVp7dn~G7KpUg?$L9IHEQJg}E z!)S;x6=+Pf8WZcVTh1;Z$p^>~#B^loSRmbt-0Pj21aWELR7H8QirUc=M2XYD-n^Wl z|9<fO<K{h_+__8!1}BEi(a)n~gp{5iFQ~;+!j$_N;-xGjq#vsF`q5e!zg+Pp??1PY zmLWS=q?G~|yL$_TEWT1VB$Qsbag=cgMI1-9`VGSFJ(8J<Fi$A}LQw?!$iD(0&rc@u zMVVJTgw1)hmtI8s<YoGKK@tNA*W?Qbl_X)YyE9Wk=$Xe8lqnocEiqe;tQ=e(FG`_- zjP-AN1z6+@{fml~x#^N46Fb@ZU+<~}!7=gx^xr?L(B%`^{-{E~z$Kkr>d78EuJ`BX zZLay3JF6<+v^D>Exq-3b#1V!YfMlVMIXW((xwwiz<^eu{B5E`r5_kqxn>(lg=-C)Y z6lm<2jD=WU;Nf!-rWfWAw_iei`3k(^yzDsQ$o>HO!<O+c4=`>Ufz<uWo6A>ZP1JPv zHzo(Fx<!nX)Eii+gi&u<puLefxR<(*K-||+kcB<>dtd{EUBny$7%Oh=^B{DmNQ-<R zZK9IU_)9c>wLZDo56AvLUk_yXF6&U0bHQf)=K-m#lYP1ikeU9Q^;rrBynvv+iplv! z9KCoC-+rbtIwO{;ZAZ#XE(_d2?&h6y`pM)*NApmUM&r2TTRait3dQ|j`8^lsU%!fp z`5%zLf0fM21-dAy`beGtOF5sf87h!=U)Db~ND1Igg%iV=V}6{h$T4yod;0dJ^~mZw zto4{5B(CCE_Yi;z^KfD($Np!@n{%k<Ne_=9|A{jd9`-)&KBA29Htm}EzB2LC?adJX zwAjUey3>}4f7ctKYAY{9Pq#lS{Bs4Ny4(s?84v~)_?;3Qr;Xw9n<Oi*qc#@PYry6P z$NyPgMwtZr9XW}e^8gt7Uem>h%NQmWfU7?QuKb{e(V024n<vp~9F}npz7WR=^f_2g znH(X?Z2qon7Nj}`Ej45O#_=&lmcMiv(|g#G94e?Rb2nC>6+1dbEuI#JOj`;JeKVNf zhsy!yDv+&%+o7uQpDH=BTEHUTaCPL3*IApi@w+V*o@2q!$L)<kX?d)iyQ#t#+QpbB zWEcXSP=>?1?J{X?$4E|oi`nDzIC`Om;fW2b-UIG_m44FEHQ3?KR0Qmx0wCl0x_C$@ zFN73e9GwB?PtK!4asLPL6zXfL#}8+a33?LC+6EWa(8wKRvmi$obO===$Q#bjmwhQT z0&QfR8TL^0lrqab1B|s|T+jB#<^yr8xE{E-k01q(6@Vbp-T>V+$Y^cG%Cz@x7w=bc zBeodxa&0a*Bm8>BmrQ@`{=eM_)%L4{sh)1$5m@1$H>8!ELMR0w3^)`}LZLE;si8xt z4b9{FM;o$&PC?03hZZWkcfw#tPQ=@>>yfVfgpP_&)<Ju-j81zNeslpv=NSEFIAIl0 zliRxea}3tZf=Gv)TrC`EH{lp#D~x3m8O|!Nxg1k=dos?#SS1E}y6n}ucy<TLPLm1E z6dlzHw(5z*)$fXw;Hm$!7SI2l8R4I$>&>z|vh~kd{!H}qm-jmO?Yg%7y;N%pY`uT} zk<I8-H*TDy=SkXJFQU`xkPIak09XqM_4|w}xFZ=I-i}>G&~<wF{2e#K#NiRzdCp^P z=_<mB6ZD>v_7s@U*~Gs*&&@dLQjG$W$<TjYHW|ASxf)~qGwnzdWJy*f?Lz_cRaXiX z_EHsPyjj?AKn~#;I%lypTx0Lk?jtJ`RNoEtGs}0*3FFR=U&^FEUpD&rgoJ<4QLY^J z#IfSdR)1inf8LQ+zeyT=4z+eG*a%LdzH*hcw<gKZCT{)qK@wUId?6F<5r;c*0^cnO zP|i?SlS;>~r2egrML2qyV*kGny!ibE96tLN%9VHM0xlp5#^n1P%lfz1U`T%g(>j>` zU!xtVr4N3YUCJC^E@<KrlL*M3f>1V-5!S7o1DJNgW*M5p3jf_lW_hU)T&5v9*ZJRR zMflZ97k_iFi@$x)!LL_+Y<8j~v$LQ-U}OG!3aY(|Or#esX>%pA{<%zk1GUMU7@1p< z?`qX)60|+-rpqJ*K0Usp2S6(TN;^?AZ*-RFeu3Bi1XwsVL1%mx?bS<Y*AJ@(2$K27 zNx#6#gS~*jbPnOWRZza-n6v>-Kw2XS-=HJX&Bjg-d$J9!L8J><EzeAj&_}st31W5^ zSx-!)`}(?>7n#DD`8YV{|5p_AXQsa|HUexg&95Vp9kpvo{`VTxol`9WB7}Yco#tWs zImF?MH*omM1WvsH{L}vpXe<MZjday=yWsG<kpq1<1%Q3Md=e^AL7hd=0VWRvXI^wM zgK4bb5L(L%q`9b?f7c6@Jcw=L-yT9w3|X>@Q8<7%AF@7f(=Y#7Cz7#t$Gic@hCEEl z214W+@RWHelS88Pdn|SbrrksGB<&Duu}jEW{k*=i{0oh4jBmI@=c>x||65W3Sn&?K zD&enCP~kc5&0*#Lo<fEmSg;jM3P9*cSy?F0V`TIYCP<3bNS5CEb%=6}-<d4m9vaA} z#CKBw6q8Xl@y|tL323i7<byg!Z#YKhH$$%%GAEi|fW@AK+N^Z8F&|`|+@KB0C97n$ z6XRQYer2MF%i{%{7;%%S&S@)bq3}%b9NT0j7qB;A*P$A4D&cJsG!2-_mm4?zR11Et z!1<yckl`06{!`_7vs>z(Ml4g}wP2T_0PfvAODe%JI*!v_zD~xoVRusTf5o};oo@Vh zQvjInKMWk05(TC%tc(=VZ7g8r#)~MOIEzkuTv`4_Llk5a|MoCs7r<Co25{j=QDu@x zv{8Mr9$={*;XWO!WSwvvlJf%QYkEh^<ONvazq_zwpQC%BlQMb#&kBEL_+#P!^W`r7 z>RtzbLkhsRB>bhD%~MqyktTPtG5@^|N%gA|={Z!+kKNWd)+%SQeB&Fe-wn}i-hrwJ zF!;_4&rhcSnBK&!0CZc9bYE0Pfti!Qsh10wIerYC%_~@6yg+XpQy1l##6KJN-|JJ= zOdg>~WZ3l>sG32n(oXc7ICb-I^52z-f+P$oxH=r5!M&ieE=!vrXmOC%k4dZHlp5Ex zMA7Sl<NaTg@Ml*)*ZBX8lz?yPXVs$_vaN4Xa&f3~T#G%A3}>^pk)vQ7-S!1ES65J9 zT*LZ<MPwBKhhp%N6XQDsex6(b5ZS~(%@^yDb${+1mH2o1l`6)@PeFuN(QaIX<4r2T z?`AL5?(_Qqyzj8^4-;-u^<upf;nQ^=Em8<pIw5%kLcBd)!b_wGI2jAakBsL_an@&v zPAn|;BMd<nuN_IS6(gb3Hu#o=|35D&!T*aDPWJO9-LJ9yjoV+w{15bK?kl7m+_5&F z9Cw0b>jij)O?vGn{O-r}i_P>Sl79C)O@XKL07yE*C{<<IWpU^naOFq9nZu(L2snZV z_s@{#atI!4ti?z+F|dh$`wCH<wtRG5CB#jc;2J3boD8@@7E7HTP4XXip=0XcNVh5X zoL=sE>&dj(&oJRHnHL+Ya=mPJ6bt{KEh%<C=J)@E6zO_L3x8ea7n?eNyIA()^pI7Y z^4~b-lE1_7N^2OMIfA*9!?^YFQu1!D0EoU@@aM@Zvy=xwC<Q=!07|t8=idZgc&~`r z%0-&U@1W6qg<=*}*~gekfrK#Sf7S!A58(<$Gplr0Wuk<1Y(|Q>gi8fiyXs)er9kgB zJp_<xR+D%XkY+;L$zrjWVUqlmuvfABgx=Rtl`;2PA%3x}1V7jJbKIZH{MPAp^+81n zP}FSzZMOfugK>niQ#6n<9>FgDK#}Y@&TUj`U!hd}27wP*DZsC@AQqa5_bJRL_o>d4 zV-LzzA?-aBD*}hlR&nU`2~_8<z{l%o)z2afJf#3gzpt!vf!)vdC9(u2YMP`S$hear zTQ=OKjC%=i^&m3_GHFn?kWPm<MiS4It!QEM0xb6ax=@>B+KZtl)J4CzO>2X*{Qu*f zHvaS7w#@Wrmw(;Qv~JW{vodr5>nYp6keXpEg?|_d_$|(#b1-@60T#~O!^l(}t&JuY zZ;>U{(e%JvQl(u(Pl%_;0pS05HfCH8o2vrr_olIS=RE31FQQPMRg8ZwGC^OvkMCn7 z^rbMI7HX>S|3MJZ5#vTP!V-lB0v-Ej#o)w{hpDn7y9;uXU^Pn+5T}V!+3&Zo*b8gH z%vVnGD`b*e*m+v-QfQ2{-FvMFpRD<k*yryTJNTU9{he+~x*=R4!(_Z(!U)##KL{|^ zJiGXrW2ZXeVtQ^4b8{EzwPpO~Z@OsK@1*Z%?+}x-gil-*_>@V2?3xhSeVH5o%+m?H zNJ5{F1^L}6dt8Rl(&8Y%OpZ94qC)eb(GKzJ)h=4Jn|)3$PG$`}KU$Cpf@ep!PDja( zVUh*=tS38}Eb=zzqu4O{DM*Xo>3tuE#5hUzleGXJlkn$8KA-7Czm9KuYG*xTv9<UQ z4l=URBm@eNeD#M(qP|2gZJ^Uyq+i?zm)*-x@Fa5`$t3uMQ{~AO0GYxXiQcwhbb__< zSrlvM;1tf%3)4vU=Qw*|7W*6~%ee=V-b~+q66OzDoC}~fK4uJjnKnL-{c~r*BSUFa zD(GPi%v8x7v_ZAl6G-_j((sp52I6$mcDS47h9dT1tN&jp)_;rVKgYgwdR1h?xoHDV zivxvNZ+4E#uIA=Ht#F3q?gebFFVpM4p@VzxC<Q=vZ41TIZ~{Gk4uGjo<kZzDaHU%6 z6=RIg0~g*Y<HFn5aOA=VsEk}f9J-PcIEsAfEf9%1YxnL023Y{A=}nn4K+af-9!0d_ zwaD68q1~-RKXYC{n;skVS}Rb`c^@?01(O3A??Sv)y|fd|;&~uD{}M)Jq3Zd~T$Rsh zMzY1f+>Y>dJ;cvfeEcH`f9~S<ON#Y>NuGeHoz3!h(y~B1nGZ5Fcd7_TD^!j4T8&|} z);G{?eNL0>Gx(h@x^3D|1D46E2;0P89}|zS0GN2b^69EScIaG;*Zv52^G~O6_O;hA zH2x0l>@zY;F_tN>0j&yWM@Wk;_B4_t!ECQnp<MjDK|Y`jk}V-l6l5krRsdLG7^MKJ z=k_KF8s;<hcSUBcn18K@z~ULtV<2_)t9pLpwbvQ`88DmQ*YyDZOalKu-|gUkrh^p# z_5yJHKL|5THk_2!Ez*C?8vh3p#@!jKl0fpXhXEw(Zn@gT^pVdod;AMjhBnYx1vZw_ zlu}n$+CQc@;PFEMoS2{tdBa7ltpAJe2weT$Db&gn*jTHgzN|KPPgDO|9C#>3Ks}9E zKxfzh`59aN4GIY`?dcT7M9+;DC`?cw#UPSh(2mqxj24w;B#BcDSr&Q~1M{~mES?q2 zjPp$8Rc8KWg*JP&Ho7rx(478o)t60t*y_Jd%0Mf_<IhQcj$RL@ipJ9VTBH+B`#k-w zGQNi=t5`TOf%%iuH0kc)#zz5e|2EMX({jMan?+BW17I5eMDls5T0m`V7Q^M^C}9?x zURikv^xK3ZY@bn!o(ZH01BEX94~;K1Q0{@HK)uF-e~~-^Uy<AN#E>hi1rC!UFjICg zT5<+{FHgNN?yE@1{2s900gFe&bV|%-Imem#<cO`djhxps|CT$Etm)_Oecv#hFA03E z=l^&uz~}Tl=tM~RW_yYU!xd@YUn~4A`X-i=p|Q^Jcil27n1M5Vj6CkkB!lnKyU699 zaIzU0{aAPc1t1oEM6EPi{ZWcZoJ6B_9&zOmxhP7=di>+q?za{_NVo#Bna$E;gk+ax z(xBf`Y?M0;{)()pqa^rW953MIi2^Q;c{omQ=CVQb&PKTcOs7I&z888$=)~$w_gf2# zZP6qA^_(&VO_I=Lz(it&m4*F><i+CFz5JXr`&UTluang;-TmyL&2+*t&9y8n22aFH zLZB=S49jTY5Sq<%Xx3K{1Wo$IQsxsP)9m|^c+wC+@071E)#x~m=IVJAyhEg=6w_t~ z5|;SKV(Xmlovqpma^&++Gp04V5$Tl?7MlWh$f8>BGPQ7o6?$Y+p_#HP^8=Vnh@PTC z))aRhbUpK}TmN7`r$F``EbM$VaFF(688k~Gov_M@t4w#zp{i99@+|B*w$DoIZ%7GX zcmJle`1O}Elb=o!F!=+qjq_V<59x4H&vc`eIP}m77SLEfOX2oAB!6!rs{jb&V|_e) zHwB<oA0{urar)gkIPPJ3Q+dDzSXev~rq(&ird7*~KVX9_tIt8PQ`&Uds$$}x$&xFT z0QL^>agss=oGakEgO^d-fF=D~hOEex7TPeu0hw#)6}*w255`O6(LdfpCIOeM-X$fJ zJyc(^l~2#Pv~{@?N-qGr{y7Y=*^SarY^)43{#(WqWd*;*W1z2`-YH9-9mhFK*8g?# z0u1%O`^hMQA726BTEzZdZME@Xia{KrUH2IMZd||0!HO*BzuiwQwx3qWBv56iydw+& zfCPsH8tXBI1{AXzTmG}80Gu81@WNO@HXZ8H#ynqDUIC<G)t>KHxr4n^(hB~Ag`R2= zoxLAtUxN<Q_k4i8uaNA0OlNH@eQw;t&mXiy=@p2zOJ6FoJbyD(*OC>}N`8wcoT?ef zVo{o~lcWS3CE2@xA(Fva#L*K`0zX;-5W4g)=*G%dTVQHJVE(j&i*Ju%d|?_<IE7AA zwFnkYq<7S(=rdqpXS`0R5=b0Q92Q`=s~;+hij%0DZiFSWwi@Jq-Jnf*k*u#94Ht*1 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�>5@!xJx6z8UQi~jC%)tlt{JX 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/front/tauri/src/lib.rs b/front/tauri/src/lib.rs new file mode 100644 index 000000000..cfef8d12b --- /dev/null +++ b/front/tauri/src/lib.rs @@ -0,0 +1,6 @@ +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/front/tauri/src/main.rs b/front/tauri/src/main.rs new file mode 100644 index 000000000..a406808a5 --- /dev/null +++ b/front/tauri/src/main.rs @@ -0,0 +1,6 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + funkwhale_lib::run(); +} diff --git a/front/tauri/tauri.conf.json b/front/tauri/tauri.conf.json new file mode 100644 index 000000000..128b2a769 --- /dev/null +++ b/front/tauri/tauri.conf.json @@ -0,0 +1,68 @@ +{ + "$schema": "../node_modules/@tauri-apps/cli/schema.json", + "build": { + "beforeBuildCommand": "yarn build", + "beforeDevCommand": "yarn dev", + "devPath": "http://localhost:8080", + "distDir": "../dist" + }, + "package": { + "productName": "Funkwhale", + "version": "0.1.0" + }, + "plugins": { + "updater": { + "endpoints": [] + } + }, + "tauri": { + "bundle": { + "active": true, + "category": "DeveloperTool", + "copyright": "", + "deb": { + "depends": [] + }, + "externalBin": [], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "identifier": "audio.funkwhale.desktop", + "longDescription": "", + "macOS": { + "entitlements": null, + "exceptionDomain": "", + "frameworks": [], + "providerShortName": null, + "signingIdentity": null + }, + "resources": [], + "shortDescription": "", + "targets": "all", + "updater": { + "active": false + }, + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } + }, + "security": { + "csp": null + }, + "windows": [ + { + "fullscreen": false, + "height": 600, + "resizable": true, + "title": "Funkwhale", + "width": 800 + } + ] + } +} \ No newline at end of file diff --git a/front/vite.config.ts b/front/vite.config.ts index e9dc4e23a..715ff32c8 100644 --- a/front/vite.config.ts +++ b/front/vite.config.ts @@ -13,7 +13,7 @@ const port = +(process.env.VUE_PORT ?? 8080) // https://vitejs.dev/config/ export default defineConfig(({ mode }) => ({ - envPrefix: ['VUE_', 'FUNKWHALE_SENTRY_'], + envPrefix: ['VUE_', 'TAURI_', 'FUNKWHALE_SENTRY_'], plugins: [ // https://vue-macros.sxzz.moe/ VueMacros({ diff --git a/front/yarn.lock b/front/yarn.lock deleted file mode 100644 index 1c8dfd5ea..000000000 --- a/front/yarn.lock +++ /dev/null @@ -1,8229 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@antfu/utils@^0.7.5": - version "0.7.6" - resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.6.tgz#30a046419b9e1ecd276e53d41ab68fb6c558c04d" - integrity sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w== - -"@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - -"@apidevtools/json-schema-ref-parser@9.0.6": - version "9.0.6" - resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" - integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== - dependencies: - "@jsdevtools/ono" "^7.1.3" - call-me-maybe "^1.0.1" - js-yaml "^3.13.1" - -"@apidevtools/openapi-schemas@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" - integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== - -"@apidevtools/swagger-methods@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" - integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== - -"@apidevtools/swagger-parser@^10.1.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" - integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== - dependencies: - "@apidevtools/json-schema-ref-parser" "9.0.6" - "@apidevtools/openapi-schemas" "^2.1.0" - "@apidevtools/swagger-methods" "^3.0.2" - "@jsdevtools/ono" "^7.1.3" - ajv "^8.6.3" - ajv-draft-04 "^1.0.0" - call-me-maybe "^1.0.1" - -"@assemblyscript/loader@^0.17.11": - version "0.17.14" - resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" - integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" - integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" - integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== - -"@babel/core@^7.11.1": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" - integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.3" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.3" - "@babel/types" "^7.23.3" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.3", "@babel/generator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" - integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== - dependencies: - "@babel/types" "^7.23.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" - integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.4" - "@babel/types" "^7.23.4" - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" - integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== - -"@babel/parser@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== - -"@babel/parser@^7.23.6": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" - integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" - -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== - dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" - -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - -"@babel/plugin-transform-optional-catch-binding@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.11.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.3.tgz#d299e0140a7650684b95c62be2db0ef8c975143e" - integrity sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q== - dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.3" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.3" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.3" - "@babel/plugin-transform-classes" "^7.23.3" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.3" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.3" - "@babel/plugin-transform-for-of" "^7.23.3" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.3" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" - "@babel/plugin-transform-numeric-separator" "^7.23.3" - "@babel/plugin-transform-object-rest-spread" "^7.23.3" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.3" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.3" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" - integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" - integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" - integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== - dependencies: - "@babel/code-frame" "^7.23.4" - "@babel/generator" "^7.23.4" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.4" - "@babel/types" "^7.23.4" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.4.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" - integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.6": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@bundled-es-modules/cookie@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz#c3b82703969a61cf6a46e959a012b2c257f6b164" - integrity sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw== - dependencies: - cookie "^0.5.0" - -"@bundled-es-modules/statuses@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" - integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== - dependencies: - statuses "^2.0.1" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@cypress/request@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" - integrity sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - http-signature "~1.3.6" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "6.10.4" - safe-buffer "^5.1.2" - tough-cookie "^4.1.3" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^1.2.0", "@eslint/eslintrc@^1.4.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@exodus/schemasafe@^1.0.0-rc.2": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" - integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== - -"@faker-js/faker@8.4.1": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.4.1.tgz#5d5e8aee8fce48f5e189bf730ebd1f758f491451" - integrity sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg== - -"@funkwhale/ui@0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@funkwhale/ui/-/ui-0.2.2.tgz#09a5f8e6b30d7a898b50f5fdcfce9b09b3071c5b" - integrity sha512-+rmChC/06XVSEwzSN7ldVjtdKJknqk2FUBTBuhN41+BrinRpySjM5PQoUfVN5IiQkL8Nff5sIjt2k8gluHZ85g== - dependencies: - dompurify "^2.4.3 || ^3.0.0" - showdown "^2.1.0" - transliteration "^2.3.5" - -"@humanwhocodes/config-array@^0.11.8": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== - dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== - -"@inquirer/confirm@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.0.0.tgz#6e1e35d18675fe659752d11021f9fddf547950b7" - integrity sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg== - dependencies: - "@inquirer/core" "^7.0.0" - "@inquirer/type" "^1.2.0" - -"@inquirer/core@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-7.0.0.tgz#18d2d2bb5cc6858765b4dcf3dce544ad15898e81" - integrity sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA== - dependencies: - "@inquirer/type" "^1.2.0" - "@types/mute-stream" "^0.0.4" - "@types/node" "^20.11.16" - "@types/wrap-ansi" "^3.0.0" - ansi-escapes "^4.3.2" - chalk "^4.1.2" - cli-spinners "^2.9.2" - cli-width "^4.1.0" - figures "^3.2.0" - mute-stream "^1.0.0" - run-async "^3.0.0" - signal-exit "^4.1.0" - strip-ansi "^6.0.1" - wrap-ansi "^6.2.0" - -"@inquirer/type@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.2.0.tgz#a569613628a881c2104289ca868a7def54e5c49d" - integrity sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA== - -"@intlify/bundle-utils@^7.4.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.5.0.tgz#fb50947c4e9997228a8abd5775e57a1202f71b09" - integrity sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q== - dependencies: - "@intlify/message-compiler" "^9.4.0" - "@intlify/shared" "^9.4.0" - acorn "^8.8.2" - escodegen "^2.0.0" - estree-walker "^2.0.2" - jsonc-eslint-parser "^2.3.0" - magic-string "^0.30.0" - mlly "^1.2.0" - source-map-js "^1.0.1" - yaml-eslint-parser "^1.2.2" - -"@intlify/core-base@9.9.1": - version "9.9.1" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.9.1.tgz#97ff0a98bf416c3f895e2a4fbcb0da353326b71a" - integrity sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA== - dependencies: - "@intlify/message-compiler" "9.9.1" - "@intlify/shared" "9.9.1" - -"@intlify/core-base@^9.1.9": - version "9.7.1" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.7.1.tgz#d31315a8e9cf027678b65a4155287143ab91b8fd" - integrity sha512-jPJTeECEhqQ7g//8g3Fb79j5SzSSRqlFCWD6pcX94uMLXU+L1m07gVZnnvzoJBnaMyJHiiwxOqZVfvu6rQfLvw== - dependencies: - "@intlify/message-compiler" "9.7.1" - "@intlify/shared" "9.7.1" - -"@intlify/eslint-plugin-vue-i18n@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-2.0.0.tgz#7308327452742c07e4aef8735f6a4b17cefd58f5" - integrity sha512-ECBD0TvQNa56XKyuM6FPIGAAl7MP6ODcgjBQJrzucNxcTb8fYTWmZ+xgBuvmvAtA0iE0D4Wp18UMild2N0bGyw== - dependencies: - "@eslint/eslintrc" "^1.2.0" - "@intlify/core-base" "^9.1.9" - "@intlify/message-compiler" "^9.1.9" - debug "^4.3.1" - glob "^8.0.0" - ignore "^5.0.5" - is-language-code "^3.1.0" - js-yaml "^4.0.0" - json5 "^2.1.3" - jsonc-eslint-parser "^2.0.0" - lodash "^4.17.11" - parse5 "^7.0.0" - semver "^7.3.4" - vue-eslint-parser "^9.0.0" - yaml-eslint-parser "^1.0.0" - -"@intlify/message-compiler@9.7.1", "@intlify/message-compiler@^9.1.9": - version "9.7.1" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.7.1.tgz#2cd5f26c6b9f19afffd62e69d192cc4e9e51ba9a" - integrity sha512-HfIr2Hn/K7b0Zv4kGqkxAxwtipyxAwhI9a3krN5cuhH/G9gkaik7of1PdzjR3Mix43t2onBiKYQyaU7mo7e0aA== - dependencies: - "@intlify/shared" "9.7.1" - source-map-js "^1.0.2" - -"@intlify/message-compiler@9.9.1", "@intlify/message-compiler@^9.4.0": - version "9.9.1" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz#4cd9c5a408be27784928e4cd57a77ea6ddb17e56" - integrity sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA== - dependencies: - "@intlify/shared" "9.9.1" - source-map-js "^1.0.2" - -"@intlify/shared@9.7.1": - version "9.7.1" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.7.1.tgz#a4902421aacda2d716981eb9528aef0163c7bb0a" - integrity sha512-CBKnHzlUYGrk5QII9q4nElAQKO5cX1rRx8VmSWXltyOZjbkGHXYQTHULn6KwRi+CypuBCfmPkyPBHMzosypIeg== - -"@intlify/shared@9.9.1", "@intlify/shared@^9.4.0": - version "9.9.1" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.9.1.tgz#b602d012b35f6c336b29a8098296dfac96a005f5" - integrity sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA== - -"@intlify/unplugin-vue-i18n@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-2.0.0.tgz#5b087e17b4eb4381d0a111cd89df4037880e932f" - integrity sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg== - dependencies: - "@intlify/bundle-utils" "^7.4.0" - "@intlify/shared" "^9.4.0" - "@rollup/pluginutils" "^5.0.2" - "@vue/compiler-sfc" "^3.2.47" - debug "^4.3.3" - fast-glob "^3.2.12" - js-yaml "^4.1.0" - json5 "^2.2.3" - pathe "^1.0.0" - picocolors "^1.0.0" - source-map-js "^1.0.2" - unplugin "^1.1.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@mswjs/cookies@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b" - integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw== - -"@mswjs/interceptors@^0.25.16": - version "0.25.16" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.25.16.tgz#7955fbb8da479bc691df117dd4c8d889e507ecc2" - integrity sha512-8QC8JyKztvoGAdPgyZy49c9vSHHAZjHagwl4RY9E8carULk8ym3iTaiawrT1YoLF/qb449h48f71XDPgkUSOUg== - dependencies: - "@open-draft/deferred-promise" "^2.2.0" - "@open-draft/logger" "^0.3.0" - "@open-draft/until" "^2.0.0" - is-node-process "^1.2.0" - outvariant "^1.2.1" - strict-event-emitter "^0.5.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@open-draft/deferred-promise@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" - integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== - -"@open-draft/logger@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" - integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== - dependencies: - is-node-process "^1.2.0" - outvariant "^1.4.0" - -"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" - integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.23" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" - integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== - -"@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/plugin-replace@^5.0.1": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" - integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - magic-string "^0.30.3" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.5.tgz#bbb4c175e19ebfeeb8c132c2eea0ecb89941a66c" - integrity sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - -"@rollup/rollup-android-arm-eabi@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" - integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== - -"@rollup/rollup-android-arm64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" - integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== - -"@rollup/rollup-darwin-arm64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" - integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== - -"@rollup/rollup-darwin-x64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" - integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== - -"@rollup/rollup-linux-arm-gnueabihf@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" - integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== - -"@rollup/rollup-linux-arm64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" - integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== - -"@rollup/rollup-linux-arm64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" - integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== - -"@rollup/rollup-linux-riscv64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" - integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== - -"@rollup/rollup-linux-x64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" - integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== - -"@rollup/rollup-linux-x64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" - integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== - -"@rollup/rollup-win32-arm64-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" - integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== - -"@rollup/rollup-win32-ia32-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" - integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== - -"@rollup/rollup-win32-x64-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" - integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== - -"@sentry-internal/tracing@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.47.0.tgz#45e92eb4c8d049d93bd4fab961eaa38a4fb680f3" - integrity sha512-udpHnCzF8DQsWf0gQwd0XFGp6Y8MOiwnl8vGt2ohqZGS3m1+IxoRLXsSkD8qmvN6KKDnwbaAvYnK0z0L+AW95g== - dependencies: - "@sentry/core" "7.47.0" - "@sentry/types" "7.47.0" - "@sentry/utils" "7.47.0" - tslib "^1.9.3" - -"@sentry/browser@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.47.0.tgz#c0d10f348d1fb9336c3ef8fa2f6638f26d4c17a8" - integrity sha512-L0t07kS/G1UGVZ9fpD6HLuaX8vVBqAGWgu+1uweXthYozu/N7ZAsakjU/Ozu6FSXj1mO3NOJZhOn/goIZLSj5A== - dependencies: - "@sentry-internal/tracing" "7.47.0" - "@sentry/core" "7.47.0" - "@sentry/replay" "7.47.0" - "@sentry/types" "7.47.0" - "@sentry/utils" "7.47.0" - tslib "^1.9.3" - -"@sentry/core@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.47.0.tgz#6a723d96f64009a9c1b9bc44e259956b7eca0a3f" - integrity sha512-EFhZhKdMu7wKmWYZwbgTi8FNZ7Fq+HdlXiZWNz51Bqe3pHmfAkdHtAEs0Buo0v623MKA0CA4EjXIazGUM34XTg== - dependencies: - "@sentry/types" "7.47.0" - "@sentry/utils" "7.47.0" - tslib "^1.9.3" - -"@sentry/replay@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.47.0.tgz#d2fc8fd3be2360950497426035d1ba0bd8a97b8f" - integrity sha512-BFpVZVmwlezZ83y0L43TCTJY142Fxh+z+qZSwTag5HlhmIpBKw/WKg06ajOhrYJbCBkhHmeOvyKkxX0jnc39ZA== - dependencies: - "@sentry/core" "7.47.0" - "@sentry/types" "7.47.0" - "@sentry/utils" "7.47.0" - -"@sentry/tracing@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.47.0.tgz#5f665cec7ab1703e3d0250da9284a9d8dc2eb604" - integrity sha512-hJCpKdekwaFNbCVXxfCz5IxfSEJIKnkPmRSVHITOm5VhKwq2e5kmy4Rn6bzSETwJFSDE8LGbR/3eSfGTqw37XA== - dependencies: - "@sentry-internal/tracing" "7.47.0" - -"@sentry/types@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.47.0.tgz#fd07dbec11a26ae861532a9abe75bd31663ca09b" - integrity sha512-GxXocplN0j1+uczovHrfkykl9wvkamDtWxlPUQgyGlbLGZn+UH1Y79D4D58COaFWGEZdSNKr62gZAjfEYu9nQA== - -"@sentry/utils@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.47.0.tgz#e62fdede15e45387b40c9fa135feba48f0960826" - integrity sha512-A89SaOLp6XeZfByeYo2C8Ecye/YAtk/gENuyOUhQEdMulI6mZdjqtHAp7pTMVgkBc/YNARVuoa+kR/IdRrTPkQ== - dependencies: - "@sentry/types" "7.47.0" - tslib "^1.9.3" - -"@sentry/vue@7.47.0": - version "7.47.0" - resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-7.47.0.tgz#2a930280e1f594260f33be5c41ac69ade5e004b5" - integrity sha512-ZaiddqyjMH5PAhe3JMw5Xy4vO3wvc97JzmvLnZ3qHkA69hQ1yFDtVhncscWeVtn5r0N9D4+VxUOHMCpDFNyATw== - dependencies: - "@sentry/browser" "7.47.0" - "@sentry/core" "7.47.0" - "@sentry/types" "7.47.0" - "@sentry/utils" "7.47.0" - tslib "^1.9.3" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" - integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== - dependencies: - type-detect "4.0.8" - -"@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@sinonjs/samsam@^7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" - integrity sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw== - dependencies: - "@sinonjs/commons" "^2.0.0" - lodash.get "^4.4.2" - type-detect "^4.0.8" - -"@sinonjs/samsam@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" - integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== - dependencies: - "@sinonjs/commons" "^2.0.0" - lodash.get "^4.4.2" - type-detect "^4.0.8" - -"@sinonjs/text-encoding@^0.7.1": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" - integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== - -"@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - -"@types/cookie@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" - integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== - -"@types/cookie@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" - integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== - -"@types/diff@5.0.9": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" - integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ== - -"@types/dompurify@3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-3.0.5.tgz#02069a2fcb89a163bacf1a788f73cb415dd75cb7" - integrity sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg== - dependencies: - "@types/trusted-types" "*" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/estree@1.0.5", "@types/estree@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/glob@5 - 7": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/jquery@*", "@types/jquery@3.5.29": - version "3.5.29" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" - integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== - dependencies: - "@types/sizzle" "*" - -"@types/json-schema@^7.0.12": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/lodash-es@4.17.12": - version "4.17.12" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" - integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.202" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" - integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/moxios@0.4.17": - version "0.4.17" - resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.17.tgz#3a2084b9b11713dde0da8c681db642936d3edf40" - integrity sha512-Ef7VE+vfISBbxWMOl40doJpHGpy5lTYJQwWHAy9ah1lrRnsVd+eNt6NjJ2QTAotHpQ7krVrZ3lp8hnxUxvdGuw== - dependencies: - axios ">=0.13.0" - -"@types/mute-stream@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" - integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "20.9.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.4.tgz#cc8f970e869c26834bdb7ed480b30ede622d74c7" - integrity sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA== - dependencies: - undici-types "~5.26.4" - -"@types/node@^20.11.16": - version "20.11.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" - integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== - dependencies: - undici-types "~5.26.4" - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/parse5@^5": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" - integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== - -"@types/qs@6.9.10": - version "6.9.10" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" - integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/semantic-ui-accordion@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.5.tgz#09591490950492705853410f00bf7d8af66e11f9" - integrity sha512-wDm0lvxFIW3TPolsj3gxoHwi6cQpQvaQJq2Tp7aIt5e2USE10ARrDMPWpNTF2WVkBKd6WoUoNb/Nyj8eblOnsA== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-api@*": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-api/-/semantic-ui-api-2.2.7.tgz#fc6e1ceac911f76682bdbfd659bfb6cbaf5f264d" - integrity sha512-QO11dj4pWs3Wph1z8cL80t1u9qpZB45geUKsCsMTovdJRFV3yosOjsHqHhsEzLFVdt6rt3ZmGhXsZRDIECi0SA== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-checkbox@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.6.tgz#b971561563a4bc264b039a0b4e7b5358a006986a" - integrity sha512-N6lHQfr3wsSXATiKW0dx6sQkd8i7BZDkehbMva9wo6XxBPBN13PoeUKzwBjrFNXjVjy8sMTbXgsWvM30cAf+Dg== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-dimmer@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dimmer/-/semantic-ui-dimmer-2.2.5.tgz#3be07a65857398a0ec8e4dd127c8b3bac393be06" - integrity sha512-0p0EMwJ1G/Vi7Vti9U+HdMk6aXhInQ6K84KHj7gSM1YI4qvFwed0nsm4CGR8IXUa6SkS8Da0mSVcCLlPduv/lg== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-dropdown@*": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.9.tgz#146b97d8bf690ddc0633ab67ad12e17e1952bc04" - integrity sha512-xexijVzkwUNPNfuTLuQETcKqGwKjJFb9ymvpVu/UFy+PNHJRz08rV3SZFdb73Gh+pEJC+8aN9op5ZWiHrB/6NA== - dependencies: - "@types/jquery" "*" - "@types/semantic-ui-api" "*" - -"@types/semantic-ui-embed@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-embed/-/semantic-ui-embed-2.2.5.tgz#ff7d9ede0cb5d182de555212051e4519a7f62a6b" - integrity sha512-4Cb+191etZwFqG9aV91v7zFQ32P7hzwwmFRP5DchQV+j4b6MJRFSzm3QQuuAez0YtuTKhThjvS/rEnh6DJa1wg== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-form@*": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-form/-/semantic-ui-form-2.2.9.tgz#22ac6bae981300a11e8c65a273953f7e7d89068d" - integrity sha512-EcURdJbpd/f1zcIVoeH+lI+W3fDKChksF7KE7jirGlg77uiMDbOFSlxJaXwIEYxU+vwZRXlSib8Hqegkxk/mCg== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-modal@*": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.7.tgz#12a7a502876109daa0a2638d9f2923a16da30772" - integrity sha512-vkazvqzPrutKH1jFt+xtpEmcdkLTZojb0RmW/zpS4MsLl7lgvFywfAjewdQgsFW5AEOku4KwrWoBTl7brh35/g== - dependencies: - "@types/jquery" "*" - "@types/semantic-ui-dimmer" "*" - -"@types/semantic-ui-nag@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-nag/-/semantic-ui-nag-2.2.5.tgz#aacd88ee78eb51477e2818490eccfd5fe4a025c4" - integrity sha512-ScjA2OrsPyxssg+1UpYpBoYQf1ruk5gExU08DEjJcrbEWYCOYa4+NbA/cUpsNogf6l0lgePdlBH3nJVezIY89Q== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-popup@*": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.7.tgz#3b28849e09b815283f0fd765dc6480a31f4c3857" - integrity sha512-QeiyPFa5bHYHBGIVI4dDombm/dgLL2uJSBru8tq6DXasohxlBeZxUe08a9viAOWCyi91+FGi3KR6elPbd0u2Ag== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-progress@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-progress/-/semantic-ui-progress-2.2.6.tgz#bbb573577f27a0ecbf8457eb5bdd20134f7bdd88" - integrity sha512-HfWyQM6B4CmQFj4Oabh+Sah4HbePM71pKZ0eplXyv/0a8pQlQaX+gW3RSz8lG32IXEl0Lz0G4IUn97qzOPjJxQ== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-rating@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-rating/-/semantic-ui-rating-2.2.5.tgz#d1c1de73bebf3ba829e82f77f2dd68409a236912" - integrity sha512-Oy1Wt6qKxq1WczW37NymYtne2gWRhxbRKKDrCl+va7fG6HAR+0hjzv7EddfSCOWwn/o7srQxjLKFj7FZxdi1JQ== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-search@*": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.7.tgz#87388e5e6a33845f6983a9f4315449bd1be3eafa" - integrity sha512-Qay8/dFM5Z+7TM1nZzDnpkv1ZvxtY+vpdrqG5kjnX3XtZ69jm9y44kHDUr+reDEZAMrOCR7gxWuDuhxwRDuA0g== - dependencies: - "@types/jquery" "*" - "@types/semantic-ui-api" "*" - -"@types/semantic-ui-shape@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-shape/-/semantic-ui-shape-2.2.5.tgz#3749a32c1e958dc32cd8f9ea712e5ae332a3ad34" - integrity sha512-4FWI3qjh2X3uDwST2NCww7w0P7dtjnak33G9ENdIepAa7JXqrmephg6BVB5MBGYzw11DUCtEL7x7ka9iToZ2WA== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-sidebar@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-sidebar/-/semantic-ui-sidebar-2.2.5.tgz#e0d8092fdbc7a6d8fa8caa50a18db1ea70c9e475" - integrity sha512-9oniXmN/rLTc2b2RO/2unsc0nHwvj6P9m6bEjxFgveMS8NnuiljF7skypJW0fSN37zHkb9yGxcP3jJyqsRNunQ== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-site@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-site/-/semantic-ui-site-2.2.5.tgz#1973945cf5f9f891e5e42dd0a401dc30dfde15f6" - integrity sha512-hyL79qPrZM6bL7etQUE8SZYhgpXdlZth87yFYEhMHDENhGx5LiR5vRH+C78YDmf3ZemIUUKvY1US52VlfYaDhg== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-sticky@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-sticky/-/semantic-ui-sticky-2.2.6.tgz#97f71371688c24bbc3f9b0057537c5252fb580b6" - integrity sha512-k/In4CD6xhVK/VeZCaIdKBR35BaB5VKSl9Vw7fRGTnr5VK9gjRDs0pBJyH2IDzbUcJ2DitzMpMcIwX4Varyp2g== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-tab@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-tab/-/semantic-ui-tab-2.2.5.tgz#a9d518e76f0557a10af81661a2cce677a0ca6793" - integrity sha512-r8NHOqSrny5fTE6MsSrTcZp1eN2lpxYgWMfZXczH1FDsSaFfO1MF7FNJbB6XHlJO6hnYCfx58KxhxerPyPkDqg== - dependencies: - "@types/jquery" "*" - "@types/semantic-ui-api" "*" - -"@types/semantic-ui-transition@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-transition/-/semantic-ui-transition-2.2.5.tgz#86cf536ed06754b4cd04544672d92154edef7ca7" - integrity sha512-MId2N23h6Jki2hkVw1m/JHHQFHoYrOJlsLsfQW5ZE0Pdcq0RETzcM7UWwaBjHX79EtjohGsewDKAvlVP92DbAg== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui-visibility@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-visibility/-/semantic-ui-visibility-2.2.6.tgz#a216881692d75d72f158a88163bf4a8b0490c8e9" - integrity sha512-b4dxITsys3mMwXyPzI6b21XwS7gHeTnB2ztdBvtbSBIO1SRxhHy0qW0sh+U4pK8xsXcqzFbTLr3/gO9A/kDdDA== - dependencies: - "@types/jquery" "*" - -"@types/semantic-ui@2.2.9": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.9.tgz#9616e7a4e05c1eac421d7bbe464467b2611047b9" - integrity sha512-VS7BTgdQEzv1D+E/b9Y795b/i0AZ4bSgzZhSASVtvzudxU8sufXdFHazPGtBgVH8IoLkPoYNoNkgQ1Q3aFEi6g== - dependencies: - "@types/jquery" "*" - "@types/semantic-ui-accordion" "*" - "@types/semantic-ui-api" "*" - "@types/semantic-ui-checkbox" "*" - "@types/semantic-ui-dimmer" "*" - "@types/semantic-ui-dropdown" "*" - "@types/semantic-ui-embed" "*" - "@types/semantic-ui-form" "*" - "@types/semantic-ui-modal" "*" - "@types/semantic-ui-nag" "*" - "@types/semantic-ui-popup" "*" - "@types/semantic-ui-progress" "*" - "@types/semantic-ui-rating" "*" - "@types/semantic-ui-search" "*" - "@types/semantic-ui-shape" "*" - "@types/semantic-ui-sidebar" "*" - "@types/semantic-ui-site" "*" - "@types/semantic-ui-sticky" "*" - "@types/semantic-ui-tab" "*" - "@types/semantic-ui-transition" "*" - "@types/semantic-ui-visibility" "*" - -"@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== - -"@types/showdown@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.6.tgz#3d7affd5f971b4a17783ec2b23b4ad3b97477b7e" - integrity sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ== - -"@types/sinonjs__fake-timers@8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== - -"@types/sizzle@*", "@types/sizzle@^2.3.2": - version "2.3.8" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" - integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== - -"@types/statuses@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315" - integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== - -"@types/trusted-types@*", "@types/trusted-types@^2.0.2": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" - integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== - -"@types/vue-virtual-scroller@npm:@earltp/vue-virtual-scroller": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@earltp/vue-virtual-scroller/-/vue-virtual-scroller-1.0.1.tgz#75116ef9b091457a654d92ff0688e991b3cd9e8a" - integrity sha512-7UsmP2JALnkfWlheuWRDywuBUTLJcVPE86X5ogA3djUmYFybE6qximgQ7OgyJnrKLteWR7+1Cp0GUXHhdDKaDQ== - -"@types/web-bluetooth@^0.0.17": - version "0.0.17" - resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" - integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== - -"@types/wrap-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" - integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== - -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@6.20.0", "@typescript-eslint/eslint-plugin@^6.7.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" - integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/type-utils" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.7.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.20.0.tgz#17e314177304bdf498527e3c4b112e41287b7416" - integrity sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w== - dependencies: - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" - integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== - dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - -"@typescript-eslint/type-utils@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" - integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== - dependencies: - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" - integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== - -"@typescript-eslint/typescript-estree@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" - integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== - dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" - integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" - integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== - dependencies: - "@typescript-eslint/types" "6.20.0" - eslint-visitor-keys "^3.4.1" - -"@vitejs/plugin-vue@5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" - integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== - -"@vitest/coverage-v8@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz#cf5ed8eb5bff6658cea126d0f8fcd2872de0b59f" - integrity sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@bcoe/v8-coverage" "^0.2.3" - debug "^4.3.4" - istanbul-lib-coverage "^3.2.2" - istanbul-lib-report "^3.0.1" - istanbul-lib-source-maps "^4.0.1" - istanbul-reports "^3.1.6" - magic-string "^0.30.5" - magicast "^0.3.3" - picocolors "^1.0.0" - std-env "^3.5.0" - test-exclude "^6.0.0" - v8-to-istanbul "^9.2.0" - -"@vitest/expect@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.1.tgz#d4c14b89c43a25fd400a6b941f51ba27fe0cb918" - integrity sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw== - dependencies: - "@vitest/spy" "1.3.1" - "@vitest/utils" "1.3.1" - chai "^4.3.10" - -"@vitest/runner@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.1.tgz#e7f96cdf74842934782bfd310eef4b8695bbfa30" - integrity sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg== - dependencies: - "@vitest/utils" "1.3.1" - p-limit "^5.0.0" - pathe "^1.1.1" - -"@vitest/snapshot@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.1.tgz#193a5d7febf6ec5d22b3f8c5a093f9e4322e7a88" - integrity sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ== - dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" - -"@vitest/spy@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.1.tgz#814245d46d011b99edd1c7528f5725c64e85a88b" - integrity sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig== - dependencies: - tinyspy "^2.2.0" - -"@vitest/utils@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.1.tgz#7b05838654557544f694a372de767fcc9594d61a" - integrity sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ== - dependencies: - diff-sequences "^29.6.3" - estree-walker "^3.0.3" - loupe "^2.3.7" - pretty-format "^29.7.0" - -"@volar/language-core@1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.0.tgz#fb6b3ad22e75c53a1ae4d644c4a788b47d411b9d" - integrity sha512-ddyWwSYqcbEZNFHm+Z3NZd6M7Ihjcwl/9B5cZd8kECdimVXUFdFi60XHWD27nrWtUQIsUYIG7Ca1WBwV2u2LSQ== - dependencies: - "@volar/source-map" "1.10.0" - -"@volar/language-core@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" - integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== - dependencies: - "@volar/source-map" "1.4.1" - -"@volar/language-core@~1.10.0": - version "1.10.10" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.10.tgz#9c240a36dd4007b9c4f00739f6cecb81da54a49e" - integrity sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw== - dependencies: - "@volar/source-map" "1.10.10" - -"@volar/source-map@1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.0.tgz#2413eb190ce69fc1a382f58524a3f82306668024" - integrity sha512-/ibWdcOzDGiq/GM1JU2eX8fH1bvAhl66hfe8yEgLEzg9txgr6qb5sQ/DEz5PcDL75tF5H5sCRRwn8Eu8ezi9mw== - dependencies: - muggle-string "^0.3.1" - -"@volar/source-map@1.10.10", "@volar/source-map@~1.10.0": - version "1.10.10" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.10.tgz#ec807fe60b8afe29e19bf6d1c90d2e76502df541" - integrity sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg== - dependencies: - muggle-string "^0.3.1" - -"@volar/source-map@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" - integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== - dependencies: - muggle-string "^0.2.2" - -"@volar/typescript@1.4.1-patch.2": - version "1.4.1-patch.2" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" - integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== - dependencies: - "@volar/language-core" "1.4.1" - -"@volar/vue-language-core@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" - integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== - dependencies: - "@volar/language-core" "1.4.1" - "@volar/source-map" "1.4.1" - "@vue/compiler-dom" "^3.3.0" - "@vue/compiler-sfc" "^3.3.0" - "@vue/reactivity" "^3.3.0" - "@vue/shared" "^3.3.0" - minimatch "^9.0.0" - muggle-string "^0.2.2" - vue-template-compiler "^2.7.14" - -"@volar/vue-typescript@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" - integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== - dependencies: - "@volar/typescript" "1.4.1-patch.2" - "@volar/vue-language-core" "1.6.5" - -"@vue-macros/api@0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@vue-macros/api/-/api-0.8.3.tgz#16b9c907ddac65d226f958af5c7d82109846a723" - integrity sha512-qpKB+2YnhRBMoz/FaDEJZfH2x7t3M72lHFdfrjIVeGvQzhOO5wMNY3fNjmRRB9tGJM8SSGd1gUYPZHK0ZSOVIw== - dependencies: - "@babel/types" "^7.22.5" - "@vue-macros/common" "1.7.0" - resolve.exports "^2.0.2" - -"@vue-macros/api@0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@vue-macros/api/-/api-0.8.6.tgz#5e40f50c1ac6d258bc6171fc2e08b1530bdd8492" - integrity sha512-g9ZO/z+LvSo4c0cIsLEJ+U4ZbCKYo1o6uJ87fry/+NZ6DeebOXuh5yJ0xkrpz+FCvLK3LsLtG/set467EstEuQ== - dependencies: - "@babel/types" "^7.22.17" - "@vue-macros/common" "1.8.0" - resolve.exports "^2.0.2" - -"@vue-macros/better-define@1.6.9": - version "1.6.9" - resolved "https://registry.yarnpkg.com/@vue-macros/better-define/-/better-define-1.6.9.tgz#27aca6f97a184c76c59b676ed2aa2150f97f2762" - integrity sha512-3D4P+J7BX0UKckMC1Fbz+JmgTTJ/hKC0RrhHZIMqfjgjVQI1UDxLMb8a02gBSVyI+4OyX1KotHnahYAtwj7plw== - dependencies: - "@vue-macros/api" "0.8.3" - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/chain-call@^0.1.3": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@vue-macros/chain-call/-/chain-call-0.1.6.tgz#b6ffe0562aec50b95e7a57e74672cbb81aef36c3" - integrity sha512-ACUnx9TbPvjjn3aCxpqN2yPC/1wyZTdJnEfh+KLn2rgl5mQUFvi/oOs4rKz/koPSU76fYhPnhbVK4oDv/wQMwg== - dependencies: - "@vue-macros/common" "1.8.0" - unplugin "^1.4.0" - -"@vue-macros/common@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.7.0.tgz#67e4ee8831ad70383c9496cebeb23850e6a6e3c5" - integrity sha512-177tzAjvEiFxAsOM+zd8EWCfAdneePoZroGg6R5QhMcycC28r+2k4wyzrjupjkDBgx7KAZkJ/KzkSfuEi31U0A== - dependencies: - "@babel/types" "^7.22.5" - "@rollup/pluginutils" "^5.0.2" - "@vue/compiler-sfc" "^3.3.4" - ast-kit "^0.9.5" - local-pkg "^0.4.3" - magic-string-ast "^0.3.0" - -"@vue-macros/common@1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.8.0.tgz#885f1e7095b3b4e32773a35fd8f768f82a6c0e5c" - integrity sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA== - dependencies: - "@babel/types" "^7.22.17" - "@rollup/pluginutils" "^5.0.4" - "@vue/compiler-sfc" "^3.3.4" - ast-kit "^0.11.2" - local-pkg "^0.4.3" - magic-string-ast "^0.3.0" - -"@vue-macros/common@~1.7.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.7.2.tgz#e160b5d7f8089c97053284c283a7fbe33706e6a7" - integrity sha512-0/2A4kWLTCNEx+DDQKLvs7zXpfjgAbGBZ58SIvDN1DjGXhG4WaIUZtgMqzA6bvc5dNN7RaOatZYubkVumwmjWA== - dependencies: - "@babel/types" "^7.22.10" - "@rollup/pluginutils" "^5.0.3" - "@vue/compiler-sfc" "^3.3.4" - ast-kit "^0.10.0" - local-pkg "^0.4.3" - magic-string-ast "^0.3.0" - -"@vue-macros/define-emit@^0.1.13": - version "0.1.16" - resolved "https://registry.yarnpkg.com/@vue-macros/define-emit/-/define-emit-0.1.16.tgz#67c44b37085bb529f72045c7bc5438f33826065a" - integrity sha512-8UWGYzopmV+fHFBesqHBPkL76Utzd+br1kjWhx655VLE4IbgnCJNRSBXAsMmbsVGqVFSS3jvFVcpz7J8O0N5rw== - dependencies: - "@vue-macros/api" "0.8.6" - "@vue-macros/common" "1.8.0" - rollup "^3.29.1" - unplugin "^1.4.0" - -"@vue-macros/define-models@1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@vue-macros/define-models/-/define-models-1.0.13.tgz#c7af107e92b78366223a635253be4f3e9851ab09" - integrity sha512-1GphMtJsR5+Dqcarm3f8pKYMHSigEiqGqijPp4njQT6O+H+i5Ja6kcqtqre5N1/fNRRgxe4l2KGKyk44IstmMA== - dependencies: - "@vue-macros/common" "1.7.0" - ast-walker-scope "^0.5.0" - unplugin "^1.4.0" - -"@vue-macros/define-prop@^0.2.4": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@vue-macros/define-prop/-/define-prop-0.2.8.tgz#e73c95dff60a41992aa157b98fe666e0e56c4f2d" - integrity sha512-ML0bHlOQ2NvxGTgHnGyWlCisb97WmTHKzcKYKYuK+YBTi5h7kimTft4W1Gnw38P1sKIdnknj393qSVHEg7MASw== - dependencies: - "@vue-macros/api" "0.8.6" - "@vue-macros/common" "1.8.0" - rollup "^3.29.1" - unplugin "^1.4.0" - -"@vue-macros/define-props-refs@1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@vue-macros/define-props-refs/-/define-props-refs-1.1.7.tgz#989d5418f738eb78d1736999c3c646421f97506c" - integrity sha512-EO0V/mJa38KySRKB9k1zVcCplSim/wSNZlBJEkSSO+s1LATPmb26NFGLa5vIOzfUdYbGZ3gqTFINa+lWorPf6g== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/define-props@1.0.17": - version "1.0.17" - resolved "https://registry.yarnpkg.com/@vue-macros/define-props/-/define-props-1.0.17.tgz#7aff839a643394f7a3511256a8b92e1a6bbb6341" - integrity sha512-vHan0LXzl+igYLEQKntvaXH7bfGMZTFp3kTgRpj40nohcYIgDWw53s9wwsTJebo49eFHNXWSZDR4UXdye+Akeg== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/define-render@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@vue-macros/define-render/-/define-render-1.4.0.tgz#8936c2eb1021205f9e7aff7cf211fa450f72b90d" - integrity sha512-RLETg7Lu8BQx0ArYTLF14nS1UB/a1dGwbe/yyJLVmmwW1On/TbGzfR2ibSJNe7B6kNWfxN8cPxqLID8IehTP2w== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/define-slots@1.0.12": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@vue-macros/define-slots/-/define-slots-1.0.12.tgz#a4a0a863c774e7071497e48323eee991899ba39d" - integrity sha512-q7zW5hj3QxFbAzl7as5CjPzILAjM9nKk7dpirgF18YT/gWVnIEwapx9HFyvw/L6CxIA5ErBcMWRKTyYL68mDgg== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/devtools@^0.1.3": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@vue-macros/devtools/-/devtools-0.1.4.tgz#c27432a090a524fecd13e0a38e2b9c0f27b74061" - integrity sha512-md5WzjC4qgOOjnYKaqEfZknSeiEeGX13k/Hqi+aqvb+kIF0F6/5oxroqaPQemuNN/gUNMn8ZfA/JmcOYxGVFcQ== - dependencies: - sirv "^2.0.3" - vue "^3.3.7" - -"@vue-macros/export-expose@0.0.10": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@vue-macros/export-expose/-/export-expose-0.0.10.tgz#98fbe9e99b2d817970d2215d3156e1f7fdd3c520" - integrity sha512-ZlFwS6gWxtbmmOA1Lb3+9ehCxDRwcBL+2XjXaeD8gjct8dvsnWXMO5TRU0sKYO09unj3bkQd3mSF050/R27DYw== - dependencies: - "@vue-macros/common" "1.7.0" - "@vue/compiler-sfc" "^3.3.4" - unplugin "^1.4.0" - -"@vue-macros/export-props@0.3.15": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@vue-macros/export-props/-/export-props-0.3.15.tgz#750c1e9416acd9032ba5d51b13b7d329bc0e3110" - integrity sha512-a0bhLt0lhmshuEsiPpaCn1kw6Qv/f7iQsEFTSnMgNvFXRrziv/YcEHoz9PZ79f4HAKwLgsj9AQfRyABJl3B9wg== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/hoist-static@1.4.9": - version "1.4.9" - resolved "https://registry.yarnpkg.com/@vue-macros/hoist-static/-/hoist-static-1.4.9.tgz#a8d13d9d0166cd057c819cf0b2546c68891a76e5" - integrity sha512-STxtEXmGFoERW/jvDw/uS7Ds5tR9U8dlTsTu1m3LTQKiWANzu33WICRFifVI39cUL5TVFujN3yEcdIGvtfbRqw== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/jsx-directive@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@vue-macros/jsx-directive/-/jsx-directive-0.5.0.tgz#d3cafddd74370935244d4bff833b52a2287190df" - integrity sha512-mrajG1U5zpi3yvUVvu2fw70DMc91qw3Vura8n4Ktoqk35bEAnus7r4+HijYH7Wsc421M5BmbQlPNu3U1S3sLuQ== - dependencies: - "@vue-macros/common" "~1.7.0" - unplugin "^1.4.0" - -"@vue-macros/named-template@0.3.16": - version "0.3.16" - resolved "https://registry.yarnpkg.com/@vue-macros/named-template/-/named-template-0.3.16.tgz#3840c1151ff921c6831c42f3f63242c71dc1ec81" - integrity sha512-/VCHjs6teUa7YntAEY7Iz1f+EvrVcG2KkzlUPS8EB/g8lM8Z2inyFEB3ohD8c4gGM6hKg3LtwUsWaWGaFHEmDg== - dependencies: - "@vue-macros/common" "1.7.0" - "@vue/compiler-dom" "^3.3.4" - unplugin "^1.4.0" - -"@vue-macros/reactivity-transform@0.3.19": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@vue-macros/reactivity-transform/-/reactivity-transform-0.3.19.tgz#466b4001c200d885778ef87de820bd32226c7c0e" - integrity sha512-HUqMu8GyGJG89K3a64OxZJknT/Jii8sTcA1fB6ommTU2T7eSGkBalipsSRvbJAhAkl4SYcVLJk0HX18hv+GA+g== - dependencies: - "@babel/parser" "^7.22.7" - "@vue-macros/common" "1.7.0" - "@vue/compiler-core" "^3.3.4" - "@vue/shared" "^3.3.4" - magic-string "^0.30.2" - unplugin "^1.4.0" - -"@vue-macros/setup-block@0.2.15": - version "0.2.15" - resolved "https://registry.yarnpkg.com/@vue-macros/setup-block/-/setup-block-0.2.15.tgz#98251a5ac6b85e281134129a0e93ebadedd19528" - integrity sha512-rhbJrxXFJ+GRqrR5NnqU8pMELLbAz80xc/+USGu4KzsuVyiklyQpy7jVEKRXDrm9rqlL09ia/sLrn375eCQDtA== - dependencies: - "@vue-macros/common" "1.7.0" - "@vue/compiler-dom" "^3.3.4" - unplugin "^1.4.0" - -"@vue-macros/setup-component@0.16.16": - version "0.16.16" - resolved "https://registry.yarnpkg.com/@vue-macros/setup-component/-/setup-component-0.16.16.tgz#191c798942403d61b17944b6993d379c6203f7e1" - integrity sha512-oscrS6MlCAbvmtXxhgQdKRPNoa+5cCaNM43XUjvMb84OGtzFRB3rvRlDOVh+ylW3EdGkuqAIlpS0ZBHdntlw5Q== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/setup-sfc@0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@vue-macros/setup-sfc/-/setup-sfc-0.16.0.tgz#e41db3e68d07dd45c798990af0d1d74d31a2734e" - integrity sha512-H/bOmDXYGA4sFQRQmCAw8oCkgthdc8i6/VjLgQGngwAFGNUYf8Fin3mQs6r8L1N3jXsnu7nfnUFDsc8JYyOllg== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/short-emits@1.4.7": - version "1.4.7" - resolved "https://registry.yarnpkg.com/@vue-macros/short-emits/-/short-emits-1.4.7.tgz#4bbdeed1dd5616e5509f2b862f3c0cdbf1f0cd70" - integrity sha512-yWrQO2g+VTrWXeaG7bcwQh+T5AvirFAyAyDS3fzzfa17HRI2Oj9d8t584xqBpr4u+m3rjs/wLgR4S3U0EZd1Mg== - dependencies: - "@vue-macros/common" "1.7.0" - unplugin "^1.4.0" - -"@vue-macros/short-vmodel@1.2.15": - version "1.2.15" - resolved "https://registry.yarnpkg.com/@vue-macros/short-vmodel/-/short-vmodel-1.2.15.tgz#094c6dfe3dc762a7e340d55c80d74810bc2e0d9f" - integrity sha512-mcTaoRUgiM9exCvzxkOJC7JQgfiDs2kcWxF4XoI9d24GBCcldpIoLNmJ71OPihGg9LvJUR7Lgr2F6c4ewaxkiQ== - dependencies: - "@vue-macros/common" "1.7.0" - "@vue/compiler-core" "^3.3.4" - -"@vue-macros/volar@0.13.3": - version "0.13.3" - resolved "https://registry.yarnpkg.com/@vue-macros/volar/-/volar-0.13.3.tgz#4cb1e08cbf3aa056bb2ea6588bf96b5f302a8ddb" - integrity sha512-gvM3UVnV1I0MIMJoY8o0c3ZWjfbX7n3ilEXUdy5kgASwu57yREjUTVWgihKBDqEuBszy2H49SYJgFziuhZ1r1Q== - dependencies: - "@rollup/pluginutils" "^5.0.2" - "@volar/language-core" "1.10.0" - "@vue-macros/common" "1.7.0" - "@vue-macros/define-props" "1.0.17" - "@vue-macros/short-vmodel" "1.2.15" - "@vue/language-core" "1.8.8" - -"@vue/compiler-core@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz#9fa26f8c81b9b34365f94ce1ed4d0e6e6f94a2ac" - integrity sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w== - dependencies: - "@babel/parser" "^7.23.5" - "@vue/shared" "3.3.11" - estree-walker "^2.0.2" - source-map-js "^1.0.2" - -"@vue/compiler-core@3.3.8", "@vue/compiler-core@^3.3.4": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz#301bb60d0245265a88ed5b30e200fbf223acb313" - integrity sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g== - dependencies: - "@babel/parser" "^7.23.0" - "@vue/shared" "3.3.8" - estree-walker "^2.0.2" - source-map-js "^1.0.2" - -"@vue/compiler-core@3.4.15": - version "3.4.15" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.15.tgz#be20d1bbe19626052500b48969302cb6f396d36e" - integrity sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw== - dependencies: - "@babel/parser" "^7.23.6" - "@vue/shared" "3.4.15" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.0.2" - -"@vue/compiler-dom@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz#36a76ea3a296d41bad133a6912cb0a847d969e4f" - integrity sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw== - dependencies: - "@vue/compiler-core" "3.3.11" - "@vue/shared" "3.3.11" - -"@vue/compiler-dom@3.3.8", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b" - integrity sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ== - dependencies: - "@vue/compiler-core" "3.3.8" - "@vue/shared" "3.3.8" - -"@vue/compiler-dom@3.4.15": - version "3.4.15" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz#753f5ed55f78d33dff04701fad4d76ff0cf81ee5" - integrity sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ== - dependencies: - "@vue/compiler-core" "3.4.15" - "@vue/shared" "3.4.15" - -"@vue/compiler-sfc@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz#acfae240c875d067e0e2c9a4e2d910074408c73b" - integrity sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA== - dependencies: - "@babel/parser" "^7.23.5" - "@vue/compiler-core" "3.3.11" - "@vue/compiler-dom" "3.3.11" - "@vue/compiler-ssr" "3.3.11" - "@vue/reactivity-transform" "3.3.11" - "@vue/shared" "3.3.11" - estree-walker "^2.0.2" - magic-string "^0.30.5" - postcss "^8.4.32" - source-map-js "^1.0.2" - -"@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" - integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA== - dependencies: - "@babel/parser" "^7.23.0" - "@vue/compiler-core" "3.3.8" - "@vue/compiler-dom" "3.3.8" - "@vue/compiler-ssr" "3.3.8" - "@vue/reactivity-transform" "3.3.8" - "@vue/shared" "3.3.8" - estree-walker "^2.0.2" - magic-string "^0.30.5" - postcss "^8.4.31" - source-map-js "^1.0.2" - -"@vue/compiler-sfc@^3.2.47": - version "3.4.15" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz#4e5811e681955fcec886cebbec483f6ae463a64b" - integrity sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA== - dependencies: - "@babel/parser" "^7.23.6" - "@vue/compiler-core" "3.4.15" - "@vue/compiler-dom" "3.4.15" - "@vue/compiler-ssr" "3.4.15" - "@vue/shared" "3.4.15" - estree-walker "^2.0.2" - magic-string "^0.30.5" - postcss "^8.4.33" - source-map-js "^1.0.2" - -"@vue/compiler-ssr@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz#598942a73b64f2bd3f95908b104a7fbb55fc41a2" - integrity sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg== - dependencies: - "@vue/compiler-dom" "3.3.11" - "@vue/shared" "3.3.11" - -"@vue/compiler-ssr@3.3.8": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz#136eed54411e4694815d961048a237191063fbce" - integrity sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w== - dependencies: - "@vue/compiler-dom" "3.3.8" - "@vue/shared" "3.3.8" - -"@vue/compiler-ssr@3.4.15": - version "3.4.15" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz#a910a5b89ba4f0a776e40b63d69bdae2f50616cf" - integrity sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw== - dependencies: - "@vue/compiler-dom" "3.4.15" - "@vue/shared" "3.4.15" - -"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" - integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== - -"@vue/eslint-config-standard@8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-8.0.1.tgz#d6e5f87bf99d142fc7adaaa5c32bc8d6af626ae3" - integrity sha512-+FsTb8kOf2GSbXXTwbigRBRRur/byMbwL6Ijii2JoXW4hsLB4arl9lbgV54OUOV5o20INLHDmBVONO16rP/a1g== - dependencies: - eslint-config-standard "^17.0.0" - eslint-import-resolver-custom-alias "^1.3.0" - eslint-import-resolver-node "^0.3.6" - eslint-plugin-import "^2.26.0" - eslint-plugin-n "^15.2.4" - eslint-plugin-promise "^6.0.0" - -"@vue/eslint-config-typescript@12.0.0": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz#0ce22d97af5e4155f3f2e7b21a48cfde8a6f3365" - integrity sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg== - dependencies: - "@typescript-eslint/eslint-plugin" "^6.7.0" - "@typescript-eslint/parser" "^6.7.0" - vue-eslint-parser "^9.3.1" - -"@vue/language-core@1.8.8": - version "1.8.8" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.8.tgz#5a8aa8363f4dfacdfcd7808a9926744d7c310ae6" - integrity sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw== - dependencies: - "@volar/language-core" "~1.10.0" - "@volar/source-map" "~1.10.0" - "@vue/compiler-dom" "^3.3.0" - "@vue/reactivity" "^3.3.0" - "@vue/shared" "^3.3.0" - minimatch "^9.0.0" - muggle-string "^0.3.1" - vue-template-compiler "^2.7.14" - -"@vue/reactivity-transform@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz#2bd486f4eff60c8724309925618891e722fcfadc" - integrity sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg== - dependencies: - "@babel/parser" "^7.23.5" - "@vue/compiler-core" "3.3.11" - "@vue/shared" "3.3.11" - estree-walker "^2.0.2" - magic-string "^0.30.5" - -"@vue/reactivity-transform@3.3.8": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz#6d07649013b0be5c670f0ab6cc7ddd3150ad03f2" - integrity sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw== - dependencies: - "@babel/parser" "^7.23.0" - "@vue/compiler-core" "3.3.8" - "@vue/shared" "3.3.8" - estree-walker "^2.0.2" - magic-string "^0.30.5" - -"@vue/reactivity@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.11.tgz#91f8e6c9ac60a595a5278c836b197628fd947a0d" - integrity sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g== - dependencies: - "@vue/shared" "3.3.11" - -"@vue/reactivity@3.3.8", "@vue/reactivity@^3.3.0": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.8.tgz#cce8a03a3fd3539c3eeda53e277ba365d160dd4d" - integrity sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw== - dependencies: - "@vue/shared" "3.3.8" - -"@vue/runtime-core@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz#63defba57bc54c1dac68a95b56c2633b1419193d" - integrity sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw== - dependencies: - "@vue/reactivity" "3.3.11" - "@vue/shared" "3.3.11" - -"@vue/runtime-core@3.3.8": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz#fba5a632cbf2b5d29e171489570149cb6975dcdb" - integrity sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw== - dependencies: - "@vue/reactivity" "3.3.8" - "@vue/shared" "3.3.8" - -"@vue/runtime-dom@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz#1146d8d280b0fec4d2e18c4a4c8f8121d0cecc09" - integrity sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ== - dependencies: - "@vue/runtime-core" "3.3.11" - "@vue/shared" "3.3.11" - csstype "^3.1.2" - -"@vue/runtime-dom@3.3.8": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz#e2d7aa795cf50914dda9a951887765a594b38af4" - integrity sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA== - dependencies: - "@vue/runtime-core" "3.3.8" - "@vue/shared" "3.3.8" - csstype "^3.1.2" - -"@vue/server-renderer@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz#409aed8031a125791e2143552975ecd1958ad601" - integrity sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A== - dependencies: - "@vue/compiler-ssr" "3.3.11" - "@vue/shared" "3.3.11" - -"@vue/server-renderer@3.3.8": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz#9b1779010e75783edeed8fcfb97d9c95fc3ac5d2" - integrity sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg== - dependencies: - "@vue/compiler-ssr" "3.3.8" - "@vue/shared" "3.3.8" - -"@vue/shared@3.3.11": - version "3.3.11" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.11.tgz#f6a038e15237edefcc90dbfe7edb806dd355c7bd" - integrity sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw== - -"@vue/shared@3.3.8", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": - version "3.3.8" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" - integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== - -"@vue/shared@3.4.15": - version "3.4.15" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.15.tgz#e7d2ea050c667480cb5e1a6df2ac13bcd03a8f30" - integrity sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g== - -"@vue/test-utils@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702" - integrity sha512-BMuoruUFTEqhLoOgsMcgNVMiByYbfHCKGr2C4CPdGtz/affUtDVX5zr1RnPuq0tYSiaqq+Enw5voUpG6JY8Q7g== - -"@vue/tsconfig@0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz#4a61dbd29783d01ddab504276dcf0c2b6988654f" - integrity sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg== - -"@vueuse/core@10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.3.0.tgz#b2dab7821ef206811b925fc935163c38056fd82b" - integrity sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q== - dependencies: - "@types/web-bluetooth" "^0.0.17" - "@vueuse/metadata" "10.3.0" - "@vueuse/shared" "10.3.0" - vue-demi ">=0.14.5" - -"@vueuse/integrations@10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.3.0.tgz#765e9505358590f21531998194c6e60a8b23655c" - integrity sha512-Jgiv7oFyIgC6BxmDtiyG/fxyGysIds00YaY7sefwbhCZ2/tjEx1W/1WcsISSJPNI30in28+HC2J4uuU8184ekg== - dependencies: - "@vueuse/core" "10.3.0" - "@vueuse/shared" "10.3.0" - vue-demi ">=0.14.5" - -"@vueuse/math@10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/math/-/math-10.3.0.tgz#5f7243498164403b1ad88cc0733f9dcb8710faed" - integrity sha512-egJN5b7Ks1s92XS/DuP/irxC2GyR59BfLm19aeWDHbAXhDgK9L+X/z9fZGobI9U7dZ/2A9nlqf0FeMDgh+oWEA== - dependencies: - "@vueuse/shared" "10.3.0" - vue-demi ">=0.14.5" - -"@vueuse/metadata@10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.3.0.tgz#14fe6cc909573785f73a56e4d9351edf3830b796" - integrity sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw== - -"@vueuse/router@10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/router/-/router-10.3.0.tgz#f0cd64fddba1b2a5af261e933c53808f0faa78f8" - integrity sha512-WCx/BAxO0eInuOcyNRBxDLS16tnNqzdaR6/babg6AUgAIL0TCfmHBh46wJa6hhg+NMGjd6HzCaktxBasp+0c0A== - dependencies: - "@vueuse/shared" "10.3.0" - vue-demi ">=0.14.5" - -"@vueuse/shared@10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.3.0.tgz#ce6b4b6860e14aaa293025dcf0cbe1036a25869f" - integrity sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg== - dependencies: - vue-demi ">=0.14.5" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -acorn@^8.11.3: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-draft-04@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" - integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.6.0, ajv@^8.6.3: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-includes@^3.1.4, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -ast-kit@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.10.0.tgz#07096d370d29f86d868a7504875e3a6294b388da" - integrity sha512-8y01XClpURgvxTJmM4AY2oHa1B/6iysALB9yJM1j4ak3Z2ZsnU0ewjDZzqOHdbNdit6hC0DGZNrBqNuCrv51fQ== - dependencies: - "@babel/parser" "^7.22.10" - "@rollup/pluginutils" "^5.0.3" - pathe "^1.1.1" - -ast-kit@^0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.11.2.tgz#5951329c7fd311304cd30729619639323974893f" - integrity sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ== - dependencies: - "@babel/parser" "^7.22.14" - "@rollup/pluginutils" "^5.0.4" - pathe "^1.1.1" - -ast-kit@^0.9.4, ast-kit@^0.9.5: - version "0.9.5" - resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.9.5.tgz#88c0ba76b6f7f24c04ccf9ae778e33afc187dc80" - integrity sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg== - dependencies: - "@babel/parser" "^7.22.7" - "@rollup/pluginutils" "^5.0.2" - pathe "^1.1.1" - -ast-walker-scope@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/ast-walker-scope/-/ast-walker-scope-0.5.0.tgz#87e0ca4f34394d11ec4dea5925b8bda80b811819" - integrity sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q== - dependencies: - "@babel/parser" "^7.22.7" - ast-kit "^0.9.4" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.2.0, async@^3.2.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -automation-events@^6.0.13: - version "6.0.13" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.13.tgz#dcaba831b959a45f05401dec374dba71618564d5" - integrity sha512-V1D19taPDEB7LUph6FpJv9m2i+UpLR096sAbPKt92sRChCOA6Jt2bcofU/YAwG8F8/qZp3GrrscJ1FzaEHd68w== - dependencies: - "@babel/runtime" "^7.23.5" - tslib "^2.6.2" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axios-auth-refresh@3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/axios-auth-refresh/-/axios-auth-refresh-3.3.6.tgz#a879f6296a889d6616e51069c2a8135b697966e7" - integrity sha512-2CeBUce/SxIfFxow5/n8vApJ97yYF6qoV4gh1UrswT7aEOnlOdBLxxyhOI4IaxGs6BY0l8YujU2jlc4aCmK17Q== - -axios@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff" - integrity sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@>=0.13.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" - integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" - -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -builtin-modules@^3.1.0, builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -butterchurn-presets@3.0.0-beta.4: - version "3.0.0-beta.4" - resolved "https://registry.yarnpkg.com/butterchurn-presets/-/butterchurn-presets-3.0.0-beta.4.tgz#393d3f7863d546bdef2c52aec90da76bdbcacd3b" - integrity sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ== - dependencies: - "@babel/runtime" "^7.12.5" - -butterchurn@3.0.0-beta.4: - version "3.0.0-beta.4" - resolved "https://registry.yarnpkg.com/butterchurn/-/butterchurn-3.0.0-beta.4.tgz#f459d8b81decd4f28f4c90b5c0fc40611ad3d86f" - integrity sha512-hiY1ktHYHQ8MT65nnZi7GjrgZZ6sl/ipT5rBqEfaYJd90L4SvOtB6lVxtKadtzAyJo2TQJc4gJfEca4cpZo0DA== - dependencies: - "@assemblyscript/loader" "^0.17.11" - "@babel/runtime" "^7.11.2" - ecma-proposal-math-extensions "0.0.2" - eel-wasm "^0.0.15" - -cac@^6.7.12, cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -cachedir@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" - integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -caniuse-lite@^1.0.30001541: - version "1.0.30001564" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz#eaa8bbc58c0cbccdcb7b41186df39dd2ba591889" - integrity sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chai@^4.3.10: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-table3@~0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cli-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" - integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.16: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-line-args@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^9.0.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" - integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== - dependencies: - browserslist "^4.22.1" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-selector-parser@^1.3: - version "1.4.1" - resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" - integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssstyle@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.0.1.tgz#ef29c598a1e90125c870525490ea4f354db0660a" - integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== - dependencies: - rrweb-cssom "^0.6.0" - -csstype@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -cypress@13.6.4: - version "13.6.4" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.6.4.tgz#42c88d3ee0342f1681abfacabf9c1f082676bc53" - integrity sha512-pYJjCfDYB+hoOoZuhysbbYhEmNW7DEDsqn+ToCLwuVowxUXppIWRr7qk4TVRIU471ksfzyZcH+mkoF0CQUKnpw== - dependencies: - "@cypress/request" "^3.0.0" - "@cypress/xvfb" "^1.2.4" - "@types/sinonjs__fake-timers" "8.1.1" - "@types/sizzle" "^2.3.2" - arch "^2.2.0" - blob-util "^2.0.2" - bluebird "^3.7.2" - buffer "^5.6.0" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-cursor "^3.1.0" - cli-table3 "~0.6.1" - commander "^6.2.1" - common-tags "^1.8.0" - dayjs "^1.10.4" - debug "^4.3.4" - enquirer "^2.3.6" - eventemitter2 "6.4.7" - execa "4.1.0" - executable "^4.1.1" - extract-zip "2.0.1" - figures "^3.2.0" - fs-extra "^9.1.0" - getos "^3.2.1" - is-ci "^3.0.0" - is-installed-globally "~0.4.0" - lazy-ass "^1.6.0" - listr2 "^3.8.3" - lodash "^4.17.21" - log-symbols "^4.0.0" - minimist "^1.2.8" - ospath "^1.2.2" - pretty-bytes "^5.6.0" - process "^0.11.10" - proxy-from-env "1.0.0" - request-progress "^3.0.0" - semver "^7.5.3" - supports-color "^8.1.1" - tmp "~0.2.1" - untildify "^4.0.0" - yauzl "^2.10.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -data-urls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" - integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== - dependencies: - whatwg-mimetype "^4.0.0" - whatwg-url "^14.0.0" - -dayjs@^1.10.4: - version "1.11.10" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" - integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@5.1.0, diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -dompurify@3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" - integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== - -"dompurify@^2.4.3 || ^3.0.0": - version "3.0.6" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.6.tgz#925ebd576d54a9531b5d76f0a5bef32548351dae" - integrity sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w== - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecma-proposal-math-extensions@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz#a6a3d64819db70cee0d2e1976b6315d00e4714a0" - integrity sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q== - -eel-wasm@^0.0.15: - version "0.0.15" - resolved "https://registry.yarnpkg.com/eel-wasm/-/eel-wasm-0.0.15.tgz#d7767081e16591ca02a223c2a62cc84d304021c5" - integrity sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA== - -ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.535: - version "1.4.592" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.592.tgz#1ffd49ba3da3da3077ea20014b066c910d50c913" - integrity sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.6: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== - -esbuild@^0.19.3: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-compat-utils@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" - integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== - -eslint-config-standard@17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" - integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== - -eslint-config-standard@^17.0.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" - integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== - -eslint-import-resolver-custom-alias@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-custom-alias/-/eslint-import-resolver-custom-alias-1.3.2.tgz#e509097e87de7a10b8c205c24644c3eb3fdf03c4" - integrity sha512-wBPcZA2k6/IXaT8FsLMyiyVSG6WVEuaYIAbeKLXeGwr523BmeB9lKAAoLJWSqp3txsnU4gpkgD2x1q6K8k0uDQ== - dependencies: - glob-parent "^6.0.2" - resolve "^1.22.2" - -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.7.3, eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-es-x@^7.5.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92" - integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ== - dependencies: - "@eslint-community/eslint-utils" "^4.1.2" - "@eslint-community/regexpp" "^4.6.0" - eslint-compat-utils "^0.1.2" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-es@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" - integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-html@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz#aec2a3772b40ccf51a5be4f972f07600539d3b3e" - integrity sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg== - dependencies: - htmlparser2 "^8.0.1" - -eslint-plugin-import@2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-import@^2.26.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" - integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - -eslint-plugin-n@16.6.2: - version "16.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" - integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - builtins "^5.0.1" - eslint-plugin-es-x "^7.5.0" - get-tsconfig "^4.7.0" - globals "^13.24.0" - ignore "^5.2.4" - is-builtin-module "^3.2.1" - is-core-module "^2.12.1" - minimatch "^3.1.2" - resolve "^1.22.2" - semver "^7.5.3" - -eslint-plugin-n@^15.2.4: - version "15.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" - integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== - dependencies: - builtins "^5.0.1" - eslint-plugin-es "^4.1.0" - eslint-utils "^3.0.0" - ignore "^5.1.1" - is-core-module "^2.11.0" - minimatch "^3.1.2" - resolve "^1.22.1" - semver "^7.3.8" - -eslint-plugin-node@11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" - integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-promise@6.1.1, eslint-plugin-promise@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== - -eslint-plugin-vue@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.8.0.tgz#91de2aabbee8cdbef078ccd4f650a9ecfa445f4f" - integrity sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA== - dependencies: - eslint-utils "^3.0.0" - natural-compare "^1.4.0" - nth-check "^2.0.1" - postcss-selector-parser "^6.0.9" - semver "^7.3.5" - vue-eslint-parser "^9.0.1" - xml-name-validator "^4.0.0" - -eslint-scope@^7.1.1: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@8.30.0: - version "8.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.30.0.tgz#83a506125d089eef7c5b5910eeea824273a33f50" - integrity sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ== - dependencies: - "@eslint/eslintrc" "^1.4.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter2@6.4.7: - version "6.4.7" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" - integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== - -execa@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" - -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.12, fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-safe-stringify@^2.0.7: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -focus-trap@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.2.0.tgz#25af61b5635d3c18cd2fd176087db7b60be72c6b" - integrity sha512-v4wY6HDDYvzkBy4735kW5BUEuw6Yz9ABqMYLuTNbzAFPcBOGiGHwwcNVMvUz4G0kgSYh13wa/7TG3XwTeT4O/A== - dependencies: - tabbable "^6.0.1" - -follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== - -fomantic-ui-css@2.9.3: - version "2.9.3" - resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.9.3.tgz#5ee927654be50b77abfaff77bc0b6735e1d7a09c" - integrity sha512-7bM6p3QRpfZFofg7Fd3crzox2E/nBsPyyWDN+N4lnTjNMxgKltSaXJTfhLoK5xBA+wEoNtcmm6w6FQ5Drj+27A== - dependencies: - jquery "^3.4.0" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fs-extra@^9.0.1, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-tsconfig@^4.7.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" - integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== - dependencies: - resolve-pkg-maps "^1.0.0" - -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -gettext-extractor@^3.5.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/gettext-extractor/-/gettext-extractor-3.8.0.tgz#b2e8497a5952b039e5f488dca3d2e3aea2cb54b4" - integrity sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw== - dependencies: - "@types/glob" "5 - 7" - "@types/parse5" "^5" - css-selector-parser "^1.3" - glob "5 - 7" - parse5 "5 - 6" - pofile "1.0.x" - typescript "4 - 5" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -"glob@5 - 7", glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== - dependencies: - type-fest "^0.20.2" - -globals@^13.24.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -graphql@^16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -headers-polyfill@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a" - integrity sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw== - -html-encoding-sniffer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" - integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== - dependencies: - whatwg-encoding "^3.1.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -http-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" - integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - -http2-client@^1.2.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" - integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== - -https-proxy-agent@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -iconv-lite@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idb-keyval@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" - integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== - -idb@^7.0.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== - -ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -immutable@^4.0.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-language-code@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-3.1.0.tgz#b2386b49227e7010636f16d0c2c681ca40136ab5" - integrity sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA== - dependencies: - "@babel/runtime" "^7.14.0" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-node-process@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" - integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jquery@^3.4.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" - integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== - -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" - integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.0.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsdom@24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" - integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== - dependencies: - cssstyle "^4.0.1" - data-urls "^5.0.0" - decimal.js "^10.4.3" - form-data "^4.0.0" - html-encoding-sniffer "^4.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.2" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.7" - parse5 "^7.1.2" - rrweb-cssom "^0.6.0" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.3" - w3c-xmlserializer "^5.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^3.1.1" - whatwg-mimetype "^4.0.0" - whatwg-url "^14.0.0" - ws "^8.16.0" - xml-name-validator "^5.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.4.0, json-schema@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.3, json5@^2.2.0, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-eslint-parser@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2" - integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g== - dependencies: - acorn "^8.5.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" - semver "^7.3.5" - -jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" - integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== - dependencies: - acorn "^8.5.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" - semver "^7.3.5" - -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -just-extend@^4.0.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" - integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -listr2@^3.8.3: - version "3.14.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.1" - through "^2.3.8" - wrap-ansi "^7.0.0" - -local-pkg@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" - integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== - -local-pkg@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" - integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== - dependencies: - mlly "^1.4.2" - pkg-types "^1.0.3" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -loupe@^2.3.6, loupe@^2.3.7: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lru-cache@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string-ast@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/magic-string-ast/-/magic-string-ast-0.3.0.tgz#8fc83ac6d084c5a342645a30354184a6e0ab4382" - integrity sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA== - dependencies: - magic-string "^0.30.2" - -magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -magic-string@^0.30.0: - version "0.30.6" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.6.tgz#996e21b42f944e45591a68f0905d6a740a12506c" - integrity sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -magicast@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" - integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== - dependencies: - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" - source-map-js "^1.0.2" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -minimatch@9.0.3, minimatch@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mitt@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230" - integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== - -mlly@^1.2.0, mlly@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== - dependencies: - acorn "^8.11.3" - pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" - -moment@2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -msw-auto-mock@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/msw-auto-mock/-/msw-auto-mock-0.18.0.tgz#2d67d01aa1d2454a55e4efa53caea51b0c055136" - integrity sha512-mFpsq+EM2W05Vb07VMRbJJarahUtxzq4hapwUYhoLM5MtU6tM2D5tRK9xEP7hBRZc6rWT+tfCwvjB0KhxoNEPQ== - dependencies: - "@apidevtools/swagger-parser" "^10.1.0" - cac "^6.7.12" - lodash "^4.17.21" - oazapfts "^4.5.2" - prettier "3.1.0" - swagger2openapi "^7.0.8" - -msw@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/msw/-/msw-2.2.1.tgz#5ece7ee81331aabe632fe331f07e71e8a3949499" - integrity sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w== - dependencies: - "@bundled-es-modules/cookie" "^2.0.0" - "@bundled-es-modules/statuses" "^1.0.1" - "@inquirer/confirm" "^3.0.0" - "@mswjs/cookies" "^1.1.0" - "@mswjs/interceptors" "^0.25.16" - "@open-draft/until" "^2.1.0" - "@types/cookie" "^0.6.0" - "@types/statuses" "^2.0.4" - chalk "^4.1.2" - graphql "^16.8.1" - headers-polyfill "^4.0.2" - is-node-process "^1.2.0" - outvariant "^1.4.2" - path-to-regexp "^6.2.0" - strict-event-emitter "^0.5.1" - type-fest "^4.9.0" - yargs "^17.7.2" - -muggle-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" - integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== - -muggle-string@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" - integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== - -mute-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -nanoid@^3.3.6, nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -nise@^5.1.4: - version "5.1.5" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.5.tgz#f2aef9536280b6c18940e32ba1fbdc770b8964ee" - integrity sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw== - dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers" "^10.0.2" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - path-to-regexp "^1.7.0" - -node-fetch-h2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" - integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== - dependencies: - http2-client "^1.2.5" - -node-fetch@^2.6.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-readfiles@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" - integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== - dependencies: - es6-promise "^3.2.1" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" - integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== - dependencies: - path-key "^4.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -nwsapi@^2.2.7: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - -oas-kit-common@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" - integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== - dependencies: - fast-safe-stringify "^2.0.7" - -oas-linter@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" - integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== - dependencies: - "@exodus/schemasafe" "^1.0.0-rc.2" - should "^13.2.1" - yaml "^1.10.0" - -oas-resolver@^2.5.6: - version "2.5.6" - resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" - integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== - dependencies: - node-fetch-h2 "^2.3.0" - oas-kit-common "^1.0.8" - reftools "^1.1.9" - yaml "^1.10.0" - yargs "^17.0.1" - -oas-schema-walker@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" - integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== - -oas-validator@^5.0.8: - version "5.0.8" - resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" - integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== - dependencies: - call-me-maybe "^1.0.1" - oas-kit-common "^1.0.8" - oas-linter "^3.2.2" - oas-resolver "^2.5.6" - oas-schema-walker "^1.1.5" - reftools "^1.1.9" - should "^13.2.1" - yaml "^1.10.0" - -oazapfts@^4.5.2: - version "4.12.0" - resolved "https://registry.yarnpkg.com/oazapfts/-/oazapfts-4.12.0.tgz#8a86c5fe5a1237b16b05d06d05815cffa2a2b949" - integrity sha512-hNKRG4eLYceuJuqDDx7Uqsi8p3j5k83gNKSo2qnUOTiiU03sCQOjXxOqCXDbzRcuDFyK94+1PBIpotK4NoxIjw== - dependencies: - "@apidevtools/swagger-parser" "^10.1.0" - lodash "^4.17.21" - minimist "^1.2.8" - swagger2openapi "^7.0.8" - typescript "^5.2.2" - -object-inspect@^1.13.1, object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.values@^1.1.5, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== - -outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" - integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" - integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -"parse5@5 - 6", parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^7.0.0, parse5@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-to-regexp@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" - integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.0.0, pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== - -pathe@^1.1.0, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - -pofile@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" - integrity sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg== - -pofile@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.4.tgz#eab7e29f5017589b2a61b2259dff608c0cad76a2" - integrity sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g== - -postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss@^8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.32: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.33: - version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.35: - version "8.4.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" - integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== - -pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-bytes@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" - integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== - -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs@6.10.4: - version "6.10.4" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.4.tgz#6a3003755add91c0ec9eacdc5f878b034e73f9e7" - integrity sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g== - dependencies: - side-channel "^1.0.4" - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -reftools@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" - integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -regexpp@^3.0.0, regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== - dependencies: - throttleit "^1.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve.exports@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-terser@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup-plugin-visualizer@5.9.0: - version "5.9.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz#013ac54fb6a9d7c9019e7eb77eced673399e5a0b" - integrity sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - source-map "^0.7.4" - yargs "^17.5.1" - -rollup@^2.43.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -rollup@^3.29.1, rollup@^3.7.2: - version "3.29.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" - integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== - optionalDependencies: - fsevents "~2.3.2" - -rollup@^4.2.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" - integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.12.0" - "@rollup/rollup-android-arm64" "4.12.0" - "@rollup/rollup-darwin-arm64" "4.12.0" - "@rollup/rollup-darwin-x64" "4.12.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" - "@rollup/rollup-linux-arm64-gnu" "4.12.0" - "@rollup/rollup-linux-arm64-musl" "4.12.0" - "@rollup/rollup-linux-riscv64-gnu" "4.12.0" - "@rollup/rollup-linux-x64-gnu" "4.12.0" - "@rollup/rollup-linux-x64-musl" "4.12.0" - "@rollup/rollup-win32-arm64-msvc" "4.12.0" - "@rollup/rollup-win32-ia32-msvc" "4.12.0" - "@rollup/rollup-win32-x64-msvc" "4.12.0" - fsevents "~2.3.2" - -rrweb-cssom@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" - integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== - -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass@1.57.1: - version "1.57.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" - integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - dependencies: - xmlchars "^2.2.0" - -semver@^6.1.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -should-equal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" - integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== - dependencies: - should-type "^1.4.0" - -should-format@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" - integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== - dependencies: - should-type "^1.3.0" - should-type-adaptors "^1.0.1" - -should-type-adaptors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" - integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== - dependencies: - should-type "^1.3.0" - should-util "^1.0.0" - -should-type@^1.3.0, should-type@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" - integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== - -should-util@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" - integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== - -should@^13.2.1: - version "13.2.3" - resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" - integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== - dependencies: - should-equal "^2.0.0" - should-format "^3.0.3" - should-type "^1.4.0" - should-type-adaptors "^1.0.1" - should-util "^1.0.0" - -showdown@2.1.0, showdown@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" - integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== - dependencies: - commander "^9.0.0" - -shvl@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/shvl/-/shvl-2.0.3.tgz#eb4bd37644f5684bba1fc52c3010c96fb5e6afd1" - integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -sinon@15.0.2: - version "15.0.2" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.2.tgz#f3e3aacb990bbaa8a7bb976e86118c5dc0154e66" - integrity sha512-PCVP63XZkg0/LOqQH5rEU4LILuvTFMb5tNxTHfs6VUMNnZz2XrnGSTZbAGITjzwQWbl/Bl/8hi4G3zZWjyBwHg== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers" "^10.0.2" - "@sinonjs/samsam" "^7.0.1" - diff "^5.1.0" - nise "^5.1.4" - supports-color "^7.2.0" - -sinon@^16.0.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.1.3.tgz#b760ddafe785356e2847502657b4a0da5501fba8" - integrity sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers" "^10.3.0" - "@sinonjs/samsam" "^8.0.0" - diff "^5.1.0" - nise "^5.1.4" - supports-color "^7.2.0" - -sirv@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^3.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -sortablejs@1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" - integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.14.1: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-generator@^2.0.5: - version "2.0.10" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" - integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== - dependencies: - stackframe "^1.3.4" - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -stacktrace-gps@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" - integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== - dependencies: - source-map "0.5.6" - stackframe "^1.3.4" - -stacktrace-js@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== - dependencies: - error-stack-parser "^2.0.6" - stack-generator "^2.0.5" - stacktrace-gps "^3.0.4" - -standardized-audio-context-mock@9.6.32: - version "9.6.32" - resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.32.tgz#ede90e8f0620c86d7b7d042e16f2a44b1ec864aa" - integrity sha512-x9/SWuzcTZ4WT9gk4bdww+/9FmK/jbRgoKcPHg2VieKx/wZVaPUcgwDWm7rISDJCuVaNUGcNcMf3lzvLid8kMA== - dependencies: - "@babel/runtime" "^7.23.5" - automation-events "^6.0.13" - sinon "^16.0.0" - standardized-audio-context "^25.3.60" - tslib "^2.6.2" - vehicles "^9.0.14" - -standardized-audio-context@25.3.60, standardized-audio-context@^25.3.60: - version "25.3.60" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.60.tgz#f37a0e35bac7ca230dd44fc66efb28949f6bb864" - integrity sha512-h4ntLsHqnRESxyuU4C5/gvZTBqjBw1SoAR5lsQbqXPI4R3KKZTJWnMMpnRdiySr7cXokbEcepaPGGQ1V+UwlLw== - dependencies: - "@babel/runtime" "^7.23.5" - automation-events "^6.0.13" - tslib "^2.6.2" - -statuses@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -std-env@^3.5.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -strict-event-emitter@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" - integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.6: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" - integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== - dependencies: - js-tokens "^8.0.2" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swagger2openapi@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" - integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== - dependencies: - call-me-maybe "^1.0.1" - node-fetch "^2.6.1" - node-fetch-h2 "^2.3.0" - node-readfiles "^0.2.0" - oas-kit-common "^1.0.8" - oas-resolver "^2.5.6" - oas-schema-walker "^1.1.5" - oas-validator "^5.0.8" - reftools "^1.1.9" - yaml "^1.10.0" - yargs "^17.0.1" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -tabbable@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terser@^5.0.0: - version "5.24.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" - integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-clipper@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/text-clipper/-/text-clipper-2.2.0.tgz#4b81a4d01ffcc51096ceab84b26856f88643990a" - integrity sha512-tfHW2GUfXLGto6gx9JB3CFL9qgX8+SbX6db0oM1kqkbPsemAX5whdXf4da6r1V/7lij34J1oOODj+0j3crl0UA== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -throttleit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" - integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tinybench@^2.5.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" - integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== - -tinypool@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" - integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== - -tinyspy@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" - integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - -tr46@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" - integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== - dependencies: - punycode "^2.3.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -transliteration@2.3.5, transliteration@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.3.5.tgz#8f92309575f69e4a8a525dab4ff705ebcf961c45" - integrity sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw== - dependencies: - yargs "^17.5.1" - -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - -tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^4.9.0: - version "4.10.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.10.2.tgz#3abdb144d93c5750432aac0d73d3e85fcab45738" - integrity sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw== - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -"typescript@4 - 5": - version "5.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" - integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== - -typescript@4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typescript@^5.2.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -ufo@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" - integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-cookie@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" - integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== - dependencies: - "@types/cookie" "^0.3.3" - cookie "^0.4.0" - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unplugin-combine@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/unplugin-combine/-/unplugin-combine-0.7.0.tgz#d76fa67c18070016dd6c43e72757957fb2ce862a" - integrity sha512-Pxa8ovANAUN/bz/pzGN8xnTqFfSJndIJAttXS4/BdVq7mxtKB65RVa2UxAnLmEzgwvtefXAjZgyx9fk5Bv0vEA== - dependencies: - "@antfu/utils" "^0.7.5" - unplugin "^1.3.2" - -unplugin-vue-define-options@1.3.15: - version "1.3.15" - resolved "https://registry.yarnpkg.com/unplugin-vue-define-options/-/unplugin-vue-define-options-1.3.15.tgz#ad592f132dcce82792e731b8a2eadda4928f8a3b" - integrity sha512-SrNVpWtQXHxnLEpkCvEdhLdVepBIVFuj5Y8qY2bq45NdgBA4Obsq+8NtEP2lzdr0AlQlhgqUE8dxhuqu1mYEzw== - dependencies: - "@vue-macros/common" "1.7.0" - ast-walker-scope "^0.5.0" - unplugin "^1.4.0" - -unplugin-vue-macros@2.4.6: - version "2.4.6" - resolved "https://registry.yarnpkg.com/unplugin-vue-macros/-/unplugin-vue-macros-2.4.6.tgz#42c1cf1193d306eec47f7e041aa066478570419e" - integrity sha512-df8ZxlrFK+rcoDEdNyjdmw14qR7soeeIvnodBXyZg2GauVf8zRBV7nY6NLfMmrdLHiMNpgUPL1WhQMJDxobNAg== - dependencies: - "@vue-macros/better-define" "1.6.9" - "@vue-macros/chain-call" "^0.1.3" - "@vue-macros/common" "1.7.0" - "@vue-macros/define-emit" "^0.1.13" - "@vue-macros/define-models" "1.0.13" - "@vue-macros/define-prop" "^0.2.4" - "@vue-macros/define-props" "1.0.17" - "@vue-macros/define-props-refs" "1.1.7" - "@vue-macros/define-render" "1.4.0" - "@vue-macros/define-slots" "1.0.12" - "@vue-macros/devtools" "^0.1.3" - "@vue-macros/export-expose" "0.0.10" - "@vue-macros/export-props" "0.3.15" - "@vue-macros/hoist-static" "1.4.9" - "@vue-macros/jsx-directive" "0.5.0" - "@vue-macros/named-template" "0.3.16" - "@vue-macros/reactivity-transform" "0.3.19" - "@vue-macros/setup-block" "0.2.15" - "@vue-macros/setup-component" "0.16.16" - "@vue-macros/setup-sfc" "0.16.0" - "@vue-macros/short-emits" "1.4.7" - unplugin "^1.4.0" - unplugin-combine "^0.7.0" - unplugin-vue-define-options "1.3.15" - -unplugin@^1.1.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.6.0.tgz#0bd7c344182c73e685c864f4f7161531f024b942" - integrity sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ== - dependencies: - acorn "^8.11.2" - chokidar "^3.5.3" - webpack-sources "^3.2.3" - webpack-virtual-modules "^0.6.1" - -unplugin@^1.3.2, unplugin@^1.4.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.1.tgz#806688376fa3dcca4d2fa2c5d27cf6cd0370fbef" - integrity sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew== - dependencies: - acorn "^8.11.2" - chokidar "^3.5.3" - webpack-sources "^3.2.3" - webpack-virtual-modules "^0.6.0" - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utility-types@3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-to-istanbul@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -vehicles@^9.0.14: - version "9.0.14" - resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.14.tgz#a3a4488a9fd8c852993ac49f61b76052db662958" - integrity sha512-XIt5kTDoqtjxelMaO2SRQLg7tYW7bnuYBEIpW0DioMjDKrVHTDOcfJftEHq1hD4oGZYAjXCNU9h65ce04wEPhQ== - dependencies: - "@babel/runtime" "^7.23.5" - decimal.js "^10.4.3" - tslib "^2.6.2" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vite-node@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.1.tgz#a93f7372212f5d5df38e945046b945ac3f4855d2" - integrity sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0" - -vite-plugin-pwa@0.14.4: - version "0.14.4" - resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" - integrity sha512-M7Ct0so8OlouMkTWgXnl8W1xU95glITSKIe7qswZf1tniAstO2idElGCnsrTJ5NPNSx1XqfTCOUj8j94S6FD7Q== - dependencies: - "@rollup/plugin-replace" "^5.0.1" - debug "^4.3.4" - fast-glob "^3.2.12" - pretty-bytes "^6.0.0" - rollup "^3.7.2" - workbox-build "^6.5.4" - workbox-window "^6.5.4" - -vite@5.1.3, vite@^5.0.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" - integrity sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew== - dependencies: - esbuild "^0.19.3" - postcss "^8.4.35" - rollup "^4.2.0" - optionalDependencies: - fsevents "~2.3.3" - -vitest@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" - integrity sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ== - dependencies: - "@vitest/expect" "1.3.1" - "@vitest/runner" "1.3.1" - "@vitest/snapshot" "1.3.1" - "@vitest/spy" "1.3.1" - "@vitest/utils" "1.3.1" - acorn-walk "^8.3.2" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^2.0.0" - tinybench "^2.5.1" - tinypool "^0.8.2" - vite "^5.0.0" - vite-node "1.3.1" - why-is-node-running "^2.2.2" - -vue-demi@>=0.14.5: - version "0.14.6" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92" - integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== - -vue-demi@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" - integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== - -vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: - version "9.3.2" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" - integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== - dependencies: - debug "^4.3.4" - eslint-scope "^7.1.1" - eslint-visitor-keys "^3.3.0" - espree "^9.3.1" - esquery "^1.4.0" - lodash "^4.17.21" - semver "^7.3.6" - -vue-eslint-parser@^9.3.1: - version "9.4.2" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d" - integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ== - dependencies: - debug "^4.3.4" - eslint-scope "^7.1.1" - eslint-visitor-keys "^3.3.0" - espree "^9.3.1" - esquery "^1.4.0" - lodash "^4.17.21" - semver "^7.3.6" - -vue-gettext@2.1.12: - version "2.1.12" - resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33" - integrity sha512-7Kw36xtKvARp8ZafQGPK9WR6EM+dhFUikR5f0+etSkiHuvUM3yf1HsRDLYoLLdJ0AMaXxKwgekumzvCk6KX8rA== - -vue-i18n@9.9.1: - version "9.9.1" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.9.1.tgz#3c2fdf3c9db430572a1246439d541d01e2795c06" - integrity sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw== - dependencies: - "@intlify/core-base" "9.9.1" - "@intlify/shared" "9.9.1" - "@vue/devtools-api" "^6.5.0" - -vue-observe-visibility@^2.0.0-alpha.1: - version "2.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz#1e4eda7b12562161d58984b7e0dea676d83bdb13" - integrity sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g== - -vue-resize@^2.0.0-alpha.1: - version "2.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz#43eeb79e74febe932b9b20c5c57e0ebc14e2df3a" - integrity sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg== - -vue-router@4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" - integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== - dependencies: - "@vue/devtools-api" "^6.5.0" - -vue-template-compiler@^2.7.14: - version "2.7.15" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz#ec88ba8ceafe0f17a528b89c57e01e02da92b0de" - integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -vue-tsc@1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" - integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== - dependencies: - "@volar/vue-language-core" "1.6.5" - "@volar/vue-typescript" "1.6.5" - semver "^7.3.8" - -vue-upload-component@3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/vue-upload-component/-/vue-upload-component-3.1.8.tgz#6c79aaf3c34c596ec40bbdde0f625d4855fb275a" - integrity sha512-8LHCrgmEZPg+1hbkKjQgMce2uasmGLEnIsLE8YG+vNyfNDuaQA71T+5t6kdDSG/szeh+E8mjb26uEd9WkVSFtg== - -vue-virtual-scroller@2.0.0-beta.8: - version "2.0.0-beta.8" - resolved "https://registry.yarnpkg.com/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz#eeceda57e4faa5ba1763994c873923e2a956898b" - integrity sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ== - dependencies: - mitt "^2.1.0" - vue-observe-visibility "^2.0.0-alpha.1" - vue-resize "^2.0.0-alpha.1" - -vue3-gettext@2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue3-gettext/-/vue3-gettext-2.3.4.tgz#f7c64604a20638f49910b9616bdb6269423e0a2b" - integrity sha512-X+dibsUhiSRz2LW5de6NkDl+GNZoo9JMGmlJ+wuzez/UJYvJ6GKofOeoUxbtwOk2vPY+/wesmyyzhkMoR3Z/AA== - dependencies: - chalk "^4.1.2" - command-line-args "^5.2.1" - cosmiconfig "^7.0.1" - gettext-extractor "^3.5.4" - glob "^7.2.0" - parse5 "^6.0.1" - parse5-htmlparser2-tree-adapter "^6.0.1" - pofile "^1.1.3" - tslib "^2.4.0" - -vue3-lazyload@0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/vue3-lazyload/-/vue3-lazyload-0.3.8.tgz#82749a6b89a4d475c9a7fa409d0cff6c4abbd59d" - integrity sha512-UiJHRT7mzry102WbhtrRgJh+f8Z8u4Z+H1RU4dvPmQeq7wFSDFxZB9iJOWGihH2FscXN/8rMGLDOQJAmjwqpCg== - dependencies: - vue-demi "^0.12.5" - -vue@3.3.11: - version "3.3.11" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.11.tgz#898d97025f73cdb5fc4e3ae3fd07a54615232140" - integrity sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w== - dependencies: - "@vue/compiler-dom" "3.3.11" - "@vue/compiler-sfc" "3.3.11" - "@vue/runtime-dom" "3.3.11" - "@vue/server-renderer" "3.3.11" - "@vue/shared" "3.3.11" - -vue@^3.3.7: - version "3.3.8" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc" - integrity sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w== - dependencies: - "@vue/compiler-dom" "3.3.8" - "@vue/compiler-sfc" "3.3.8" - "@vue/runtime-dom" "3.3.8" - "@vue/server-renderer" "3.3.8" - "@vue/shared" "3.3.8" - -vuedraggable@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270" - integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww== - dependencies: - sortablejs "1.14.0" - -vuex-persistedstate@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz#127165f85f5b4534fb3170a5d3a8be9811bd2a53" - integrity sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ== - dependencies: - deepmerge "^4.2.2" - shvl "^2.0.3" - -vuex-router-sync@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz#1a225c17a1dd9e2f74af0a1b2c62072e9492b305" - integrity sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w== - -vuex@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c" - integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== - dependencies: - "@vue/devtools-api" "^6.0.0-beta.11" - -w3c-xmlserializer@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" - integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== - dependencies: - xml-name-validator "^5.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-virtual-modules@^0.6.0, webpack-virtual-modules@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" - integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== - -whatwg-encoding@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" - integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" - integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== - -whatwg-url@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" - integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== - dependencies: - tr46 "^5.0.0" - webidl-conversions "^7.0.0" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.11, which-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - -workbox-background-sync@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" - integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== - dependencies: - idb "^7.0.1" - workbox-core "6.6.1" - -workbox-broadcast-update@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e" - integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== - dependencies: - workbox-core "6.6.1" - -workbox-build@^6.5.4: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0" - integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "6.6.1" - workbox-broadcast-update "6.6.1" - workbox-cacheable-response "6.6.1" - workbox-core "6.6.1" - workbox-expiration "6.6.1" - workbox-google-analytics "6.6.1" - workbox-navigation-preload "6.6.1" - workbox-precaching "6.6.1" - workbox-range-requests "6.6.1" - workbox-recipes "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - workbox-streams "6.6.1" - workbox-sw "6.6.1" - workbox-window "6.6.1" - -workbox-cacheable-response@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9" - integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== - dependencies: - workbox-core "6.6.1" - -workbox-core@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" - integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== - -workbox-core@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265" - integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== - -workbox-expiration@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739" - integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== - dependencies: - idb "^7.0.1" - workbox-core "6.6.1" - -workbox-google-analytics@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d" - integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== - dependencies: - workbox-background-sync "6.6.1" - workbox-core "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-navigation-preload@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059" - integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== - dependencies: - workbox-core "6.6.1" - -workbox-precaching@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" - integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - -workbox-precaching@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2" - integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== - dependencies: - workbox-core "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-range-requests@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39" - integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== - dependencies: - workbox-core "6.6.1" - -workbox-recipes@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae" - integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== - dependencies: - workbox-cacheable-response "6.6.1" - workbox-core "6.6.1" - workbox-expiration "6.6.1" - workbox-precaching "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-routing@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" - integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== - dependencies: - workbox-core "6.5.4" - -workbox-routing@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581" - integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== - dependencies: - workbox-core "6.6.1" - -workbox-strategies@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" - integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== - dependencies: - workbox-core "6.5.4" - -workbox-strategies@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf" - integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== - dependencies: - workbox-core "6.6.1" - -workbox-streams@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26" - integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== - dependencies: - workbox-core "6.6.1" - workbox-routing "6.6.1" - -workbox-sw@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c" - integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== - -workbox-window@6.6.1, workbox-window@^6.5.4: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e" - integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.6.1" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^8.16.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - -xml-name-validator@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" - integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml-eslint-parser@^1.0.0, yaml-eslint-parser@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz#1a9673ebe254328cfc2fa99f297f6d8c9364ccd8" - integrity sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg== - dependencies: - eslint-visitor-keys "^3.0.0" - lodash "^4.17.21" - yaml "^2.0.0" - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yaml@^2.0.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 14d099b8727db3613a7602978e728670fb5881fa Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 19:31:14 +0100 Subject: [PATCH 325/371] fix: fix tauri checks Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/package.json | 2 +- front/src/init/serviceWorker.ts | 6 ------ front/src/store/instance.ts | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/front/package.json b/front/package.json index d9df6c420..015e23851 100644 --- a/front/package.json +++ b/front/package.json @@ -21,7 +21,7 @@ "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", - "@tauri-apps/api": "1.5.3", + "@tauri-apps/api": "2.0.0-alpha.14", "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", diff --git a/front/src/init/serviceWorker.ts b/front/src/init/serviceWorker.ts index 23fdb14a0..d5f7195ed 100644 --- a/front/src/init/serviceWorker.ts +++ b/front/src/init/serviceWorker.ts @@ -9,12 +9,6 @@ const { t } = i18n.global const logger = useLogger() export const install: InitModule = ({ store }) => { - // NOTE: Return early if we're not running in a browser - if ('TAURI_PLATFORM' in import.meta.env) { - logger.info('Tauri detected, skipping service worker registration') - // return - } - const updateSW = registerSW({ onRegisterError (error) { const importStatementsSupported = navigator.userAgent.includes('Chrome') diff --git a/front/src/store/instance.ts b/front/src/store/instance.ts index 559b54865..8cc750a5d 100644 --- a/front/src/store/instance.ts +++ b/front/src/store/instance.ts @@ -131,7 +131,7 @@ export const TAURI_DEFAULT_INSTANCE_URL = 'tauri://force-instance-chooser/' // 3. use the url specified when building via VUE_APP_INSTANCE_URL // 4. use the current url const DEFAULT_INSTANCE_URL = (() => { - if ('TAURI_PLATFORM' in import.meta.env) { + if ('TAURI_ENV_PLATFORM' in import.meta.env) { return TAURI_DEFAULT_INSTANCE_URL } From ccef0197c6389c2d39af9a6d38fa3d60d4b7098c Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 21:16:52 +0100 Subject: [PATCH 326/371] fix: fix locale path Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/locales/ar.json | 32 +++++++++++------------ front/src/locales/bn_BD.json | 46 +++++++++++++++++----------------- front/src/locales/ca.json | 46 +++++++++++++++++----------------- front/src/locales/cs.json | 46 +++++++++++++++++----------------- front/src/locales/de.json | 46 +++++++++++++++++----------------- front/src/locales/el.json | 20 +++++++-------- front/src/locales/en_GB.json | 46 +++++++++++++++++----------------- front/src/locales/en_US.json | 46 +++++++++++++++++----------------- front/src/locales/eo.json | 26 +++++++++---------- front/src/locales/es.json | 28 ++++++++++----------- front/src/locales/eu.json | 46 +++++++++++++++++----------------- front/src/locales/fa_IR.json | 3 ++- front/src/locales/fr_FR.json | 46 +++++++++++++++++----------------- front/src/locales/ga.json | 6 ++++- front/src/locales/gl.json | 46 +++++++++++++++++----------------- front/src/locales/hu.json | 3 ++- front/src/locales/id.json | 6 ++++- front/src/locales/it.json | 46 +++++++++++++++++----------------- front/src/locales/ja_JP.json | 40 ++++++++++++++--------------- front/src/locales/kab_DZ.json | 12 ++++----- front/src/locales/ko_KR.json | 3 ++- front/src/locales/ml.json | 12 ++++----- front/src/locales/nb_NO.json | 26 +++++++++---------- front/src/locales/nl.json | 46 +++++++++++++++++----------------- front/src/locales/nn_NO.json | 6 ++++- front/src/locales/oc.json | 44 ++++++++++++++++---------------- front/src/locales/pl.json | 44 ++++++++++++++++---------------- front/src/locales/pt_BR.json | 44 ++++++++++++++++---------------- front/src/locales/pt_PT.json | 26 +++++++++---------- front/src/locales/ru.json | 46 +++++++++++++++++----------------- front/src/locales/sq.json | 6 ++++- front/src/locales/sv.json | 26 +++++++++---------- front/src/locales/tr.json | 28 ++++++++++----------- front/src/locales/zh_Hans.json | 44 ++++++++++++++++---------------- front/src/locales/zh_Hant.json | 3 ++- 35 files changed, 530 insertions(+), 510 deletions(-) diff --git a/front/src/locales/ar.json b/front/src/locales/ar.json index c84456a99..25d416c2e 100644 --- a/front/src/locales/ar.json +++ b/front/src/locales/ar.json @@ -2297,22 +2297,6 @@ "modal": "Ų§Ų®ŲŖŲµŲ§Ų±Ų§ŲŖ Ł„ŁˆŲ­Ų© Ų§Ł„Ł…ŁŲ§ŲŖŁŠŲ­" } }, - "SetInstanceModal": { - "button": { - "cancel": "Ų„Ł„ŲŗŲ§Ų”", - "submit": "Ų„Ų±Ų³Ų§Ł„" - }, - "header": { - "chooseInstance": "Ų§Ų®ŲŖŲ± Ų®Ų§ŲÆŁˆŁ…Łƒ", - "suggestions": "Ų§Ł„Ų®ŁŠŲ§Ų±Ų§ŲŖ Ų§Ł„Ł…ŲŖŲ§Ų­Ų©" - }, - "label": { - "url": "ŲØŁŠŲ§Ł†Ų§ŲŖ Ł…Ų«ŁŠŁ„ Ų§Ł„Ų®Ų§ŲÆŁ…" - }, - "message": { - "newUrl": "Ų„Ł†Łƒ Ų§Ł„Ų¢Ł† ŲŖŲ³ŲŖŲ®ŲÆŁ… Ų®Ų§ŲÆŁ… Funkwhale Ų¹Ł„Ł‰ { url }" - } - }, "Queue": { "button": { "clear": "Ų§Ł…Ų³Ų­", @@ -3593,6 +3577,22 @@ "tracks": "Ų§Ł„Ł…ŁŽŁ‚Ų§Ų·ŁŲ¹" } } + }, + "ChooseInstance": { + "button": { + "cancel": "Ų„Ł„ŲŗŲ§Ų”", + "submit": "Ų„Ų±Ų³Ų§Ł„" + }, + "header": { + "chooseInstance": "Ų§Ų®ŲŖŲ± Ų®Ų§ŲÆŁˆŁ…Łƒ", + "suggestions": "Ų§Ł„Ų®ŁŠŲ§Ų±Ų§ŲŖ Ų§Ł„Ł…ŲŖŲ§Ų­Ų©" + }, + "label": { + "url": "ŲØŁŠŲ§Ł†Ų§ŲŖ Ł…Ų«ŁŠŁ„ Ų§Ł„Ų®Ų§ŲÆŁ…" + }, + "message": { + "newUrl": "Ų„Ł†Łƒ Ų§Ł„Ų¢Ł† ŲŖŲ³ŲŖŲ®ŲÆŁ… Ų®Ų§ŲÆŁ… Funkwhale Ų¹Ł„Ł‰ { url }" + } } }, "composables": { diff --git a/front/src/locales/bn_BD.json b/front/src/locales/bn_BD.json index 7261c92dc..b22b131f2 100644 --- a/front/src/locales/bn_BD.json +++ b/front/src/locales/bn_BD.json @@ -229,29 +229,6 @@ "unsupported": "" } }, - "SetInstanceModal": { - "button": { - "cancel": "", - "submit": "" - }, - "header": { - "chooseInstance": "", - "failure": "", - "suggestions": "" - }, - "help": { - "notFunkwhaleServer": "", - "selectPod": "", - "serverDown": "" - }, - "label": { - "url": "" - }, - "message": { - "currentConnection": "", - "newUrl": "" - } - }, "ShortcutsModal": { "button": { "close": "" @@ -4611,6 +4588,29 @@ }, "title": "" } + }, + "ChooseInstance": { + "button": { + "cancel": "", + "submit": "" + }, + "header": { + "chooseInstance": "", + "failure": "", + "suggestions": "" + }, + "help": { + "notFunkwhaleServer": "", + "selectPod": "", + "serverDown": "" + }, + "label": { + "url": "" + }, + "message": { + "currentConnection": "", + "newUrl": "" + } } } } diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index 47382e4b8..a5933f2fe 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -229,29 +229,6 @@ "unsupported": "Aquest tipus d'objecte encara no Ć©s compatible" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Envia" - }, - "header": { - "chooseInstance": "Escull la teva instĆ ncia", - "failure": "No Ć©s possible conectar-se a la URL assenyalada", - "suggestions": "Opcions suggerides" - }, - "help": { - "notFunkwhaleServer": "Lā€™adreƧa indicada no Ć©s un servidor Funkwhale", - "selectPod": "Per continuar, si us plau selecciona la instĆ ncia de Funkwahale on et vols conectar. Introdueix directamente l'adreƧa o selecciona una de les suggerides.", - "serverDown": "El servidor pot estar inactiu" - }, - "label": { - "url": "AdreƧa de la instĆ ncia" - }, - "message": { - "currentConnection": "Actualment esteu connectat a {0}. Si continueu, se us desconnectarĆ  de la vostra instĆ ncia actual i se suprimiran totes les vostres dades locals.", - "newUrl": "Ara utilitzeu la instĆ ncia de Funkwhale a { url }" - } - }, "ShortcutsModal": { "button": { "close": "Tancar" @@ -4611,6 +4588,29 @@ }, "title": "RĆ dio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancelar", + "submit": "Envia" + }, + "header": { + "chooseInstance": "Escull la teva instĆ ncia", + "failure": "No Ć©s possible conectar-se a la URL assenyalada", + "suggestions": "Opcions suggerides" + }, + "help": { + "notFunkwhaleServer": "Lā€™adreƧa indicada no Ć©s un servidor Funkwhale", + "selectPod": "Per continuar, si us plau selecciona la instĆ ncia de Funkwahale on et vols conectar. Introdueix directamente l'adreƧa o selecciona una de les suggerides.", + "serverDown": "El servidor pot estar inactiu" + }, + "label": { + "url": "AdreƧa de la instĆ ncia" + }, + "message": { + "currentConnection": "Actualment esteu connectat a {0}. Si continueu, se us desconnectarĆ  de la vostra instĆ ncia actual i se suprimiran totes les vostres dades locals.", + "newUrl": "Ara utilitzeu la instĆ ncia de Funkwhale a { url }" + } } } } diff --git a/front/src/locales/cs.json b/front/src/locales/cs.json index 7e4a6bcb2..732fc049d 100644 --- a/front/src/locales/cs.json +++ b/front/src/locales/cs.json @@ -229,29 +229,6 @@ "unsupported": "Tento druh objektu nenĆ­ prozatĆ­m podporovĆ”n" } }, - "SetInstanceModal": { - "button": { - "cancel": "ZruÅ”it", - "submit": "Odeslat" - }, - "header": { - "chooseInstance": "Zvolte si instanci", - "failure": "Na zadanou adresu URL se nelze připojit", - "suggestions": "NavrženĆ© volby" - }, - "help": { - "notFunkwhaleServer": "Na zadanĆ© adrese nebÄ›Å¾Ć­ Å¾Ć”dnĆ½ Funkwhale server", - "selectPod": "Pro pokračovĆ”nĆ­ prosĆ­m zvolte Funkwhale instanci, ke kterĆ© se chcete připojit. Zadejte adresu pÅ™Ć­mo, nebo vyberte jednu z nabĆ­zenĆ½ch možnostĆ­.", - "serverDown": "Server je možnĆ” nedostupnĆ½" - }, - "label": { - "url": "URL instance" - }, - "message": { - "currentConnection": "AktuĆ”lně jste připojeni k { 0 }. Když budete pokračovat, budete odpojeni od vaÅ”Ć­ aktuĆ”lnĆ­ instance a vaÅ”e lokĆ”lnĆ­ data budou vymazĆ”na.", - "newUrl": "PrĆ”vě pouÅ¾Ć­vĆ”te Funkwhale instanci na adrese { url }" - } - }, "ShortcutsModal": { "button": { "close": "ZavÅ™Ć­t" @@ -4611,6 +4588,29 @@ }, "title": "RĆ”dio" } + }, + "ChooseInstance": { + "button": { + "cancel": "ZruÅ”it", + "submit": "Odeslat" + }, + "header": { + "chooseInstance": "Zvolte si instanci", + "failure": "Na zadanou adresu URL se nelze připojit", + "suggestions": "NavrženĆ© volby" + }, + "help": { + "notFunkwhaleServer": "Na zadanĆ© adrese nebÄ›Å¾Ć­ Å¾Ć”dnĆ½ Funkwhale server", + "selectPod": "Pro pokračovĆ”nĆ­ prosĆ­m zvolte Funkwhale instanci, ke kterĆ© se chcete připojit. Zadejte adresu pÅ™Ć­mo, nebo vyberte jednu z nabĆ­zenĆ½ch možnostĆ­.", + "serverDown": "Server je možnĆ” nedostupnĆ½" + }, + "label": { + "url": "URL instance" + }, + "message": { + "currentConnection": "AktuĆ”lně jste připojeni k { 0 }. Když budete pokračovat, budete odpojeni od vaÅ”Ć­ aktuĆ”lnĆ­ instance a vaÅ”e lokĆ”lnĆ­ data budou vymazĆ”na.", + "newUrl": "PrĆ”vě pouÅ¾Ć­vĆ”te Funkwhale instanci na adrese { url }" + } } } } diff --git a/front/src/locales/de.json b/front/src/locales/de.json index 47f229f22..ce9f0e9b0 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -229,29 +229,6 @@ "unsupported": "Diese Art von Objekt wird noch nicht unterstĆ¼tzt" } }, - "SetInstanceModal": { - "button": { - "cancel": "Abbrechen", - "submit": "Abschicken" - }, - "header": { - "chooseInstance": "WƤhle deine Instanz aus", - "failure": "Es lƤsst sich keine Verbindung zur angegebenen Adresse herstellen", - "suggestions": "Empfehlungen" - }, - "help": { - "notFunkwhaleServer": "Die angegebene Adresse ist kein Funkwhale-Server", - "selectPod": "WƤhle bitte nun den Funkhwhale-Pod aus, zu dem du dich verbinden mƶchtest. Gib die Adresse direkt an, oder wƤhle einen der VorschlƤge aus.", - "serverDown": "Der Server lƤuft wahrscheinlich nicht" - }, - "label": { - "url": "Pod-Adresse" - }, - "message": { - "currentConnection": "Du bist aktuell mit { 0 } verbunden. Wenn du fortfƤhrst, wird die Verbindung unterbrochen und alle lokalen Daten werden gelƶscht.", - "newUrl": "Du verwendest jetzt den Funkwhale-Pod unter { url }" - } - }, "ShortcutsModal": { "button": { "close": "SchlieƟen" @@ -4611,6 +4588,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Abbrechen", + "submit": "Abschicken" + }, + "header": { + "chooseInstance": "WƤhle deine Instanz aus", + "failure": "Es lƤsst sich keine Verbindung zur angegebenen Adresse herstellen", + "suggestions": "Empfehlungen" + }, + "help": { + "notFunkwhaleServer": "Die angegebene Adresse ist kein Funkwhale-Server", + "selectPod": "WƤhle bitte nun den Funkhwhale-Pod aus, zu dem du dich verbinden mƶchtest. Gib die Adresse direkt an, oder wƤhle einen der VorschlƤge aus.", + "serverDown": "Der Server lƤuft wahrscheinlich nicht" + }, + "label": { + "url": "Pod-Adresse" + }, + "message": { + "currentConnection": "Du bist aktuell mit { 0 } verbunden. Wenn du fortfƤhrst, wird die Verbindung unterbrochen und alle lokalen Daten werden gelƶscht.", + "newUrl": "Du verwendest jetzt den Funkwhale-Pod unter { url }" + } } } } diff --git a/front/src/locales/el.json b/front/src/locales/el.json index f7cd70abf..d6a62e044 100644 --- a/front/src/locales/el.json +++ b/front/src/locales/el.json @@ -192,16 +192,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", - "submit": "Ī„Ļ€ĪæĪ²ĪæĪ»Ī®" - }, - "header": { - "chooseInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚", - "failure": "Ī”ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ…Ī½Ī±Ļ„Ī® Ī· ĻƒĻĪ½Ī“ĪµĻƒĪ· ĻƒĻ„Īæ ĻƒĻ…Ī³ĪŗĪµĪŗĻĪ¹Ī¼Ī­Ī½Īæ URL" - } - }, "ShortcutsModal": { "button": { "close": "ĪšĪ»ĪµĪÆĻƒĪ¹Ī¼Īæ" @@ -2461,6 +2451,16 @@ } } } + }, + "ChooseInstance": { + "button": { + "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", + "submit": "Ī„Ļ€ĪæĪ²ĪæĪ»Ī®" + }, + "header": { + "chooseInstance": "Ī•Ļ€Ī¹Ī»Ī­Ī¾Ļ„Īµ Ļ„Īæ instance ĻƒĪ±Ļ‚", + "failure": "Ī”ĪµĪ½ ĪµĪÆĪ½Ī±Ī¹ Ī“Ļ…Ī½Ī±Ļ„Ī® Ī· ĻƒĻĪ½Ī“ĪµĻƒĪ· ĻƒĻ„Īæ ĻƒĻ…Ī³ĪŗĪµĪŗĻĪ¹Ī¼Ī­Ī½Īæ URL" + } } } } diff --git a/front/src/locales/en_GB.json b/front/src/locales/en_GB.json index 7c2711f0c..cd9a79259 100644 --- a/front/src/locales/en_GB.json +++ b/front/src/locales/en_GB.json @@ -229,29 +229,6 @@ "unsupported": "This kind of object isn't supported yet" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancel", - "submit": "Submit" - }, - "header": { - "chooseInstance": "Choose your instance", - "failure": "It is not possible to connect to the given URL", - "suggestions": "Suggested choices" - }, - "help": { - "notFunkwhaleServer": "The given address is not a Funkwhale server", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", - "serverDown": "The server might be down" - }, - "label": { - "url": "Instance URL" - }, - "message": { - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", - "newUrl": "You are now using the Funkwhale instance at {url}" - } - }, "ShortcutsModal": { "button": { "close": "Close" @@ -4611,6 +4588,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancel", + "submit": "Submit" + }, + "header": { + "chooseInstance": "Choose your instance", + "failure": "It is not possible to connect to the given URL", + "suggestions": "Suggested choices" + }, + "help": { + "notFunkwhaleServer": "The given address is not a Funkwhale server", + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" + }, + "label": { + "url": "Instance URL" + }, + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" + } } } } diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index ecd451e53..ef5154d9d 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -229,29 +229,6 @@ "unsupported": "This kind of object isn't supported yet" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancel", - "submit": "Submit" - }, - "header": { - "chooseInstance": "Choose your instance", - "failure": "It is not possible to connect to the given URL", - "suggestions": "Suggested choices" - }, - "help": { - "notFunkwhaleServer": "The given address is not a Funkwhale server", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", - "serverDown": "The server might be down" - }, - "label": { - "url": "Instance URL" - }, - "message": { - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", - "newUrl": "You are now using the Funkwhale instance at {url}" - } - }, "ShortcutsModal": { "button": { "close": "Close" @@ -4611,6 +4588,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancel", + "submit": "Submit" + }, + "header": { + "chooseInstance": "Choose your instance", + "failure": "It is not possible to connect to the given URL", + "suggestions": "Suggested choices" + }, + "help": { + "notFunkwhaleServer": "The given address is not a Funkwhale server", + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" + }, + "label": { + "url": "Instance URL" + }, + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" + } } } } diff --git a/front/src/locales/eo.json b/front/src/locales/eo.json index 4ffd12b1b..82bbd9459 100644 --- a/front/src/locales/eo.json +++ b/front/src/locales/eo.json @@ -2281,19 +2281,6 @@ "modal": "Fulmoklavo" } }, - "SetInstanceModal": { - "button": { - "cancel": "Nuligi", - "submit": "Submeti" - }, - "header": { - "chooseInstance": "Elekti vian instanco", - "suggestions": "Sugestaj elektoj" - }, - "label": { - "url": "Instanca datumo" - } - }, "Queue": { "button": { "clear": "Purigi", @@ -3630,6 +3617,19 @@ "tracks": "Kantoj" } } + }, + "ChooseInstance": { + "button": { + "cancel": "Nuligi", + "submit": "Submeti" + }, + "header": { + "chooseInstance": "Elekti vian instanco", + "suggestions": "Sugestaj elektoj" + }, + "label": { + "url": "Instanca datumo" + } } }, "composables": { diff --git a/front/src/locales/es.json b/front/src/locales/es.json index 811cbdc89..4ec7994d2 100644 --- a/front/src/locales/es.json +++ b/front/src/locales/es.json @@ -2533,20 +2533,6 @@ "modal": "Atajos de teclado" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Elige tu instancia", - "failure": "No es posible conectarse a la URL indicada", - "suggestions": "Sugerencias" - }, - "label": { - "url": "Datos de Instancia" - } - }, "Queue": { "button": { "clear": "Borrar", @@ -3951,6 +3937,20 @@ "tracks": "Canciones" } } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancelar", + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Elige tu instancia", + "failure": "No es posible conectarse a la URL indicada", + "suggestions": "Sugerencias" + }, + "label": { + "url": "Datos de Instancia" + } } }, "composables": { diff --git a/front/src/locales/eu.json b/front/src/locales/eu.json index 61d973157..7dbe4c75f 100644 --- a/front/src/locales/eu.json +++ b/front/src/locales/eu.json @@ -229,29 +229,6 @@ "unsupported": "Objektu mota hau ez da onartzen oraindik" } }, - "SetInstanceModal": { - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali" - }, - "header": { - "chooseInstance": "Zure instantzia hautatu", - "failure": "Ezin da konektatu emandako URLarekin", - "suggestions": "Iradokitako aukerak" - }, - "help": { - "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", - "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat.", - "serverDown": "Zerbitzaria erorita egon daiteke" - }, - "label": { - "url": "Instantziaren URLa" - }, - "message": { - "currentConnection": "{ 0 } instantziara konektatuta zaude orain. Jarraituz gero, uneko instantziatik deskonektatuko zara eta datu lokal guztiak ezabatuko dira.", - "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" - } - }, "ShortcutsModal": { "button": { "close": "Itxi" @@ -4611,6 +4588,29 @@ }, "title": "Irratia" } + }, + "ChooseInstance": { + "button": { + "cancel": "Ezeztatu", + "submit": "Bidali" + }, + "header": { + "chooseInstance": "Zure instantzia hautatu", + "failure": "Ezin da konektatu emandako URLarekin", + "suggestions": "Iradokitako aukerak" + }, + "help": { + "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", + "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat.", + "serverDown": "Zerbitzaria erorita egon daiteke" + }, + "label": { + "url": "Instantziaren URLa" + }, + "message": { + "currentConnection": "{ 0 } instantziara konektatuta zaude orain. Jarraituz gero, uneko instantziatik deskonektatuko zara eta datu lokal guztiak ezabatuko dira.", + "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" + } } } } diff --git a/front/src/locales/fa_IR.json b/front/src/locales/fa_IR.json index 1dead2303..770c0d30a 100644 --- a/front/src/locales/fa_IR.json +++ b/front/src/locales/fa_IR.json @@ -354,6 +354,7 @@ "messages": "Ł¾ŪŒŲ§Ł… Ł‡Ų§ŪŒ Ų“Ł…Ų§", "notifications": "Ų§Ų¹Ł„Ų§Ł† Ł‡Ų§ŪŒ Ų“Ł…Ų§" } - } + }, + "ChooseInstance": null } } diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 684b0f4d7..ec58811ef 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -229,29 +229,6 @@ "unsupported": "Ce type d'objet n'est pas encore pris en charge" } }, - "SetInstanceModal": { - "button": { - "cancel": "Annuler", - "submit": "Valider" - }, - "header": { - "chooseInstance": "Choisissez votre instance", - "failure": "Impossible de se connecter Ć  l'URL renseignĆ©e", - "suggestions": "Suggestions" - }, - "help": { - "notFunkwhaleServer": "L'adresse fournie n'est pas un serveur Funkwhale", - "selectPod": "Pour continuer, sĆ©lectionnez le pod Funkwhale auquel vous souhaitez vous connecter. Entrez l'adresse directement, ou sĆ©lectionnez l'un des choix suggĆ©rĆ©s.", - "serverDown": "Le serveur est peut-ĆŖtre hors-service" - }, - "label": { - "url": "Adresse de l'instance" - }, - "message": { - "currentConnection": "Vous ĆŖtes actuellement connectĆ© Ć  { 0 }. Si vous continuez, vous serez dĆ©connectĆ© de lā€™instance actuelle et toutes vos donnĆ©es locales seront supprimĆ©es.", - "newUrl": "Vous utilisez maintenant lā€™instance Funkwhale sur { url }" - } - }, "ShortcutsModal": { "button": { "close": "Fermer" @@ -4611,6 +4588,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Annuler", + "submit": "Valider" + }, + "header": { + "chooseInstance": "Choisissez votre instance", + "failure": "Impossible de se connecter Ć  l'URL renseignĆ©e", + "suggestions": "Suggestions" + }, + "help": { + "notFunkwhaleServer": "L'adresse fournie n'est pas un serveur Funkwhale", + "selectPod": "Pour continuer, sĆ©lectionnez le pod Funkwhale auquel vous souhaitez vous connecter. Entrez l'adresse directement, ou sĆ©lectionnez l'un des choix suggĆ©rĆ©s.", + "serverDown": "Le serveur est peut-ĆŖtre hors-service" + }, + "label": { + "url": "Adresse de l'instance" + }, + "message": { + "currentConnection": "Vous ĆŖtes actuellement connectĆ© Ć  { 0 }. Si vous continuez, vous serez dĆ©connectĆ© de lā€™instance actuelle et toutes vos donnĆ©es locales seront supprimĆ©es.", + "newUrl": "Vous utilisez maintenant lā€™instance Funkwhale sur { url }" + } } } } diff --git a/front/src/locales/ga.json b/front/src/locales/ga.json index 0967ef424..9c71eeb54 100644 --- a/front/src/locales/ga.json +++ b/front/src/locales/ga.json @@ -1 +1,5 @@ -{} +{ + "views": { + "ChooseInstance": null + } +} diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index ef7084d71..4ec8c2a9d 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -229,29 +229,6 @@ "unsupported": "AĆ­nda non estĆ” soportado este obxeto" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Elixe a tĆŗa instancia", - "failure": "Non se puido conectar ao URL proporcionado", - "suggestions": "OpciĆ³ns suxeridas" - }, - "help": { - "notFunkwhaleServer": "O enderezo proporcionado non Ć© un servidor Funkwhale", - "selectPod": "Para continuar, elixe a instancia de Funkwhale Ć” que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opciĆ³ns suxeridas.", - "serverDown": "Igoal non estĆ” a funcionar o servidor" - }, - "label": { - "url": "URL da instancia" - }, - "message": { - "currentConnection": "Neste intre tes conexiĆ³n con { 0 }. Se continĆŗas desconectarĆ©moste da instancia actual e os datos locais serĆ”n eliminados.", - "newUrl": "EstĆ”s utilizando a instancia Funkwhale en { url }" - } - }, "ShortcutsModal": { "button": { "close": "Pechar" @@ -4611,6 +4588,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancelar", + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Elixe a tĆŗa instancia", + "failure": "Non se puido conectar ao URL proporcionado", + "suggestions": "OpciĆ³ns suxeridas" + }, + "help": { + "notFunkwhaleServer": "O enderezo proporcionado non Ć© un servidor Funkwhale", + "selectPod": "Para continuar, elixe a instancia de Funkwhale Ć” que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opciĆ³ns suxeridas.", + "serverDown": "Igoal non estĆ” a funcionar o servidor" + }, + "label": { + "url": "URL da instancia" + }, + "message": { + "currentConnection": "Neste intre tes conexiĆ³n con { 0 }. Se continĆŗas desconectarĆ©moste da instancia actual e os datos locais serĆ”n eliminados.", + "newUrl": "EstĆ”s utilizando a instancia Funkwhale en { url }" + } } } } diff --git a/front/src/locales/hu.json b/front/src/locales/hu.json index b5f7caf42..dccbb1458 100644 --- a/front/src/locales/hu.json +++ b/front/src/locales/hu.json @@ -949,7 +949,8 @@ "create": "HozzĆ”fĆ©rĆ©s a lejĆ”tszĆ”si listĆ”khoz" } } - } + }, + "ChooseInstance": null }, "init": { "serviceWorker": { diff --git a/front/src/locales/id.json b/front/src/locales/id.json index 0967ef424..9c71eeb54 100644 --- a/front/src/locales/id.json +++ b/front/src/locales/id.json @@ -1 +1,5 @@ -{} +{ + "views": { + "ChooseInstance": null + } +} diff --git a/front/src/locales/it.json b/front/src/locales/it.json index a268fbace..aabee0d31 100644 --- a/front/src/locales/it.json +++ b/front/src/locales/it.json @@ -228,29 +228,6 @@ "unsupported": "Questo tipo di oggetto non ĆØ ancora supportato" } }, - "SetInstanceModal": { - "button": { - "cancel": "Annulla", - "submit": "Invia" - }, - "header": { - "chooseInstance": "Scegli la tua istanza", - "failure": "Non ĆØ possibile connettersi all'URL dato", - "suggestions": "Scelte suggerite" - }, - "help": { - "notFunkwhaleServer": "L'indirizzo fornito non ĆØ quello di un server Funkwhale", - "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti.", - "serverDown": "Il server potrebbe essere caduto" - }, - "label": { - "url": "URL dell'istanza" - }, - "message": { - "currentConnection": "Attualmente sei connesso a { 0 }. Se continui, sarai disconnesso dalla tua istanza corrente e tutti i tuoi dati locali saranno eliminati.", - "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" - } - }, "ShortcutsModal": { "button": { "close": "Chiudi" @@ -4564,6 +4541,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Annulla", + "submit": "Invia" + }, + "header": { + "chooseInstance": "Scegli la tua istanza", + "failure": "Non ĆØ possibile connettersi all'URL dato", + "suggestions": "Scelte suggerite" + }, + "help": { + "notFunkwhaleServer": "L'indirizzo fornito non ĆØ quello di un server Funkwhale", + "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti.", + "serverDown": "Il server potrebbe essere caduto" + }, + "label": { + "url": "URL dell'istanza" + }, + "message": { + "currentConnection": "Attualmente sei connesso a { 0 }. Se continui, sarai disconnesso dalla tua istanza corrente e tutti i tuoi dati locali saranno eliminati.", + "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" + } } } } diff --git a/front/src/locales/ja_JP.json b/front/src/locales/ja_JP.json index 2ff804418..07e47c5fb 100644 --- a/front/src/locales/ja_JP.json +++ b/front/src/locales/ja_JP.json @@ -228,26 +228,6 @@ "unsupported": "ć“ć®ć‚ˆć†ćŖć‚æć‚¤ćƒ—ć®ć‚Ŗ惖ć‚ø悧ć‚Æ惈ćÆć€ć‚µćƒćƒ¼ćƒˆć•ć‚Œć¦ć„ć¾ć›ć‚“" } }, - "SetInstanceModal": { - "button": { - "cancel": "ć‚­ćƒ£ćƒ³ć‚»ćƒ«" - }, - "header": { - "chooseInstance": "ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’éø悓恧恏恠恕恄", - "failure": "å…„åŠ›ć•ć‚ŒćŸURLć«ć‚¢ć‚Æć‚»ć‚¹ć§ćć¾ć›ć‚“", - "suggestions": "ćŠć™ć™ć‚ć®ćƒćƒƒćƒ‰" - }, - "help": { - "notFunkwhaleServer": "å…„åŠ›ć•ć‚ŒćŸURL先ćÆFunkwhaleć®ć‚µćƒ¼ćƒćƒ¼ć§ćÆć‚ć‚Šć¾ć›ć‚“", - "serverDown": "ć‚µćƒ¼ćƒćƒ¼ćŒćƒ€ć‚¦ćƒ³ć—ć¦ć‚‹ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“" - }, - "label": { - "url": "Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć®URL" - }, - "message": { - "newUrl": "ē¾åœØ{url}恮Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™" - } - }, "ShortcutsModal": { "button": { "close": "閉恘悋" @@ -4352,6 +4332,26 @@ }, "title": "惩ć‚øć‚Ŗ" } + }, + "ChooseInstance": { + "button": { + "cancel": "ć‚­ćƒ£ćƒ³ć‚»ćƒ«" + }, + "header": { + "chooseInstance": "ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’éø悓恧恏恠恕恄", + "failure": "å…„åŠ›ć•ć‚ŒćŸURLć«ć‚¢ć‚Æć‚»ć‚¹ć§ćć¾ć›ć‚“", + "suggestions": "ćŠć™ć™ć‚ć®ćƒćƒƒćƒ‰" + }, + "help": { + "notFunkwhaleServer": "å…„åŠ›ć•ć‚ŒćŸURL先ćÆFunkwhaleć®ć‚µćƒ¼ćƒćƒ¼ć§ćÆć‚ć‚Šć¾ć›ć‚“", + "serverDown": "ć‚µćƒ¼ćƒćƒ¼ćŒćƒ€ć‚¦ćƒ³ć—ć¦ć‚‹ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“" + }, + "label": { + "url": "Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć®URL" + }, + "message": { + "newUrl": "ē¾åœØ{url}恮Funkwhaleć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™" + } } } } diff --git a/front/src/locales/kab_DZ.json b/front/src/locales/kab_DZ.json index ca8e5311b..b76e77eb7 100644 --- a/front/src/locales/kab_DZ.json +++ b/front/src/locales/kab_DZ.json @@ -1390,12 +1390,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "Sefex", - "submit": "Envoyer" - } - }, "Queue": { "button": { "clear": "Effacer", @@ -2176,6 +2170,12 @@ "header": { "search": "Anadi" } + }, + "ChooseInstance": { + "button": { + "cancel": "Sefex", + "submit": "Envoyer" + } } }, "composables": { diff --git a/front/src/locales/ko_KR.json b/front/src/locales/ko_KR.json index 00715dd9c..dc85bbc7a 100644 --- a/front/src/locales/ko_KR.json +++ b/front/src/locales/ko_KR.json @@ -128,6 +128,7 @@ "createAccount": "{ app } ģ“ Funkwhale ź³„ģ •ģ— ģ ‘ź·¼ķ•˜ė ¤ź³  ķ•©ė‹ˆė‹¤" } } - } + }, + "ChooseInstance": null } } diff --git a/front/src/locales/ml.json b/front/src/locales/ml.json index 19ac2546c..fb26115ee 100644 --- a/front/src/locales/ml.json +++ b/front/src/locales/ml.json @@ -1026,12 +1026,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "ą“±ą“¦ąµą“¦ą“¾ą“•ąµą“•ąµą“•", - "submit": "ą“øą“®ąµ¼ą“Ŗąµą“Ŗą“æą“•ąµą“•ąµą“•" - } - }, "Queue": { "button": { "clear": "ą“®ą“¾ą“Æąµą“•ąµą“•ąµą“•", @@ -1617,6 +1611,12 @@ }, "title": "ą“±ąµ‡ą“”ą“æą“Æąµ‹" } + }, + "ChooseInstance": { + "button": { + "cancel": "ą“±ą“¦ąµą“¦ą“¾ą“•ąµą“•ąµą“•", + "submit": "ą“øą“®ąµ¼ą“Ŗąµą“Ŗą“æą“•ąµą“•ąµą“•" + } } }, "init": { diff --git a/front/src/locales/nb_NO.json b/front/src/locales/nb_NO.json index 703c48253..540edbc7c 100644 --- a/front/src/locales/nb_NO.json +++ b/front/src/locales/nb_NO.json @@ -2092,19 +2092,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "Avbryt", - "submit": "Send inn" - }, - "header": { - "chooseInstance": "Velg din instans", - "suggestions": "Anbefalte valg" - }, - "label": { - "url": "Instansradiostasjoner" - } - }, "Queue": { "button": { "clear": "TĆøm", @@ -3297,6 +3284,19 @@ "label": { "showRead": "Vis lesningsmerkander" } + }, + "ChooseInstance": { + "button": { + "cancel": "Avbryt", + "submit": "Send inn" + }, + "header": { + "chooseInstance": "Velg din instans", + "suggestions": "Anbefalte valg" + }, + "label": { + "url": "Instansradiostasjoner" + } } }, "composables": { diff --git a/front/src/locales/nl.json b/front/src/locales/nl.json index 5a48a3193..c15c2df82 100644 --- a/front/src/locales/nl.json +++ b/front/src/locales/nl.json @@ -229,29 +229,6 @@ "unsupported": "Dit soort object wordt nog niet ondersteund" } }, - "SetInstanceModal": { - "button": { - "cancel": "Annuleren", - "submit": "Indienen" - }, - "header": { - "chooseInstance": "Kies je server", - "failure": "Het is niet mogelijk om verbinding te maken met de opgegeven URL", - "suggestions": "Aanbevelingen" - }, - "help": { - "notFunkwhaleServer": "Het opgegeven adres is geen Funkwhale-server", - "selectPod": "Selecteer met welke Funkwhale-server je wil verbinden. Voer zelf de URL in, of kies een van de suggesties.", - "serverDown": "De server is mogelijk niet beschikbaar" - }, - "label": { - "url": "Server-URL" - }, - "message": { - "currentConnection": "U bent nu verbonden met { 0 }. Als je doorgaat wordt je verbinding verbroken met je huidige instance en je lokale data zal worden verwijderd.", - "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" - } - }, "ShortcutsModal": { "button": { "close": "Sluiten" @@ -4610,6 +4587,29 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Annuleren", + "submit": "Indienen" + }, + "header": { + "chooseInstance": "Kies je server", + "failure": "Het is niet mogelijk om verbinding te maken met de opgegeven URL", + "suggestions": "Aanbevelingen" + }, + "help": { + "notFunkwhaleServer": "Het opgegeven adres is geen Funkwhale-server", + "selectPod": "Selecteer met welke Funkwhale-server je wil verbinden. Voer zelf de URL in, of kies een van de suggesties.", + "serverDown": "De server is mogelijk niet beschikbaar" + }, + "label": { + "url": "Server-URL" + }, + "message": { + "currentConnection": "U bent nu verbonden met { 0 }. Als je doorgaat wordt je verbinding verbroken met je huidige instance en je lokale data zal worden verwijderd.", + "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" + } } } } diff --git a/front/src/locales/nn_NO.json b/front/src/locales/nn_NO.json index 0967ef424..9c71eeb54 100644 --- a/front/src/locales/nn_NO.json +++ b/front/src/locales/nn_NO.json @@ -1 +1,5 @@ -{} +{ + "views": { + "ChooseInstance": null + } +} diff --git a/front/src/locales/oc.json b/front/src/locales/oc.json index abcbece46..10ff566ef 100644 --- a/front/src/locales/oc.json +++ b/front/src/locales/oc.json @@ -215,28 +215,6 @@ "unsupported": "Aqueste tipe dā€™objĆØcte es pas encara compatible" } }, - "SetInstanceModal": { - "button": { - "cancel": "Anullar", - "submit": "Validar" - }, - "header": { - "chooseInstance": "CausissĆØtz vĆ²stra instĆ ncia", - "failure": "Connexion impossibla a lā€™URL donada", - "suggestions": "Suggestions" - }, - "help": { - "notFunkwhaleServer": "Lā€™adreƧa donada es pas un servidor Funkwhale", - "selectPod": "Per contunhar, seleccionatz una instĆ ncia Funkwhale que volĆØtz vos i connectar. Picatz lā€™adreƧa dirĆØctament, o seleccionatz-ne una dins las en suggestion.", - "serverDown": "Se pĆ²t que lo servidor siĆ” atudat" - }, - "label": { - "url": "URL de lā€™instĆ ncia" - }, - "message": { - "newUrl": "Utilizatz una instĆ ncia Funkwhale a {url}" - } - }, "ShortcutsModal": { "button": { "close": "Tampar" @@ -4548,6 +4526,28 @@ }, "title": "RĆ dio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Anullar", + "submit": "Validar" + }, + "header": { + "chooseInstance": "CausissĆØtz vĆ²stra instĆ ncia", + "failure": "Connexion impossibla a lā€™URL donada", + "suggestions": "Suggestions" + }, + "help": { + "notFunkwhaleServer": "Lā€™adreƧa donada es pas un servidor Funkwhale", + "selectPod": "Per contunhar, seleccionatz una instĆ ncia Funkwhale que volĆØtz vos i connectar. Picatz lā€™adreƧa dirĆØctament, o seleccionatz-ne una dins las en suggestion.", + "serverDown": "Se pĆ²t que lo servidor siĆ” atudat" + }, + "label": { + "url": "URL de lā€™instĆ ncia" + }, + "message": { + "newUrl": "Utilizatz una instĆ ncia Funkwhale a {url}" + } } } } diff --git a/front/src/locales/pl.json b/front/src/locales/pl.json index a9d56cb93..e327badef 100644 --- a/front/src/locales/pl.json +++ b/front/src/locales/pl.json @@ -212,28 +212,6 @@ "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" } }, - "SetInstanceModal": { - "button": { - "cancel": "Anuluj", - "submit": "Prześlij" - }, - "header": { - "chooseInstance": "Wybierz instancję", - "failure": "Nie można połączyć się z podanym adresem URL", - "suggestions": "Polecane" - }, - "help": { - "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", - "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do ktĆ³rej chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji.", - "serverDown": "Serwer może być niedostępny" - }, - "label": { - "url": "Adres URL instancji" - }, - "message": { - "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" - } - }, "ShortcutsModal": { "button": { "close": "Zamknij" @@ -4508,6 +4486,28 @@ }, "title": "Stacja radiowa" } + }, + "ChooseInstance": { + "button": { + "cancel": "Anuluj", + "submit": "Prześlij" + }, + "header": { + "chooseInstance": "Wybierz instancję", + "failure": "Nie można połączyć się z podanym adresem URL", + "suggestions": "Polecane" + }, + "help": { + "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", + "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do ktĆ³rej chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji.", + "serverDown": "Serwer może być niedostępny" + }, + "label": { + "url": "Adres URL instancji" + }, + "message": { + "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" + } } } } diff --git a/front/src/locales/pt_BR.json b/front/src/locales/pt_BR.json index f23243903..95fa0e779 100644 --- a/front/src/locales/pt_BR.json +++ b/front/src/locales/pt_BR.json @@ -218,28 +218,6 @@ "unsupported": "Tipo de objeto ainda nĆ£o suportado" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Escolha sua instĆ¢ncia", - "failure": "NĆ£o foi possĆ­vel entrar neste link", - "suggestions": "OpƧƵes sugeridas" - }, - "help": { - "notFunkwhaleServer": "Este link nĆ£o Ć© de uma instĆ¢ncia Funkwhale", - "selectPod": "Para continuar, insira a instĆ¢ncia Funkwhale que vocĆŖ deseja entrar. Digite o endereƧo ou selecione uma das sugeridas.", - "serverDown": "Parece que o servidor caiu" - }, - "label": { - "url": "Link da instĆ¢ncia" - }, - "message": { - "newUrl": "VocĆŖ estĆ” usando a instĆ¢ncia Funkwhale em { url }" - } - }, "ShortcutsModal": { "button": { "close": "Fechar" @@ -4362,6 +4340,28 @@ }, "title": "RĆ”dio" } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancelar", + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Escolha sua instĆ¢ncia", + "failure": "NĆ£o foi possĆ­vel entrar neste link", + "suggestions": "OpƧƵes sugeridas" + }, + "help": { + "notFunkwhaleServer": "Este link nĆ£o Ć© de uma instĆ¢ncia Funkwhale", + "selectPod": "Para continuar, insira a instĆ¢ncia Funkwhale que vocĆŖ deseja entrar. Digite o endereƧo ou selecione uma das sugeridas.", + "serverDown": "Parece que o servidor caiu" + }, + "label": { + "url": "Link da instĆ¢ncia" + }, + "message": { + "newUrl": "VocĆŖ estĆ” usando a instĆ¢ncia Funkwhale em { url }" + } } } } diff --git a/front/src/locales/pt_PT.json b/front/src/locales/pt_PT.json index 0d19d4934..129da9c42 100644 --- a/front/src/locales/pt_PT.json +++ b/front/src/locales/pt_PT.json @@ -2266,19 +2266,6 @@ "modal": "Atalhos do teclado" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Escolha sua instĆ¢ncia", - "suggestions": "Escolhas sugeridas" - }, - "label": { - "url": "Dados da instĆ¢ncia" - } - }, "Queue": { "button": { "clear": "Claro", @@ -3603,6 +3590,19 @@ "label": { "showRead": "Mostrar notificaƧƵes antigas" } + }, + "ChooseInstance": { + "button": { + "cancel": "Cancelar", + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Escolha sua instĆ¢ncia", + "suggestions": "Escolhas sugeridas" + }, + "label": { + "url": "Dados da instĆ¢ncia" + } } }, "composables": { diff --git a/front/src/locales/ru.json b/front/src/locales/ru.json index 3010a518b..9370a0a93 100644 --- a/front/src/locales/ru.json +++ b/front/src/locales/ru.json @@ -229,29 +229,6 @@ "unsupported": "Š­Ń‚Š¾Ń‚ Š²ŠøŠ“ Š¾Š±ŃŠŠµŠŗтŠ° ŠæŠ¾ŠŗŠ° Š½Šµ ŠæŠ¾Š“Š“ŠµŃ€Š¶ŠøŠ²Š°ŠµŃ‚ся" } }, - "SetInstanceModal": { - "button": { - "cancel": "ŠžŃ‚Š¼ŠµŠ½Š°", - "submit": "ŠžŃ‚ŠæрŠ°Š²Šøть" - }, - "header": { - "chooseInstance": "Š’Ń‹Š±ŠµŃ€ŠøтŠµ сŠ²Š¾Š¹ уŠ·ŠµŠ»", - "failure": "ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ сŠ¾ŠµŠ“ŠøŠ½Šøться с уŠŗŠ°Š·Š°Š½Š½Ń‹Š¼ URL", - "suggestions": "ŠŸŃ€ŠµŠ“Š»Š¾Š¶ŠµŠ½Š½Ń‹Šµ ŠøŠ·Š¼ŠµŠ½ŠµŠ½Šøя" - }, - "help": { - "notFunkwhaleServer": "Š—Š°Š“Š°Š½Š½Ń‹Š¹ Š°Š“рŠµŃ Š½Šµ яŠ²Š»ŃŠµŃ‚ся сŠµŃ€Š²ŠµŃ€Š¾Š¼ Funkwhale", - "selectPod": "Š§Ń‚Š¾Š±Ń‹ ŠæрŠ¾Š“Š¾Š»Š¶Šøть, ŠæŠ¾Š¶Š°Š»ŃƒŠ¹ŃŃ‚Š° Š²Ń‹Š±ŠµŃ€ŠøтŠµ уŠ·ŠµŠ» Funkwhale, Šŗ ŠŗŠ¾Ń‚Š¾Ń€Š¾Š¼Ńƒ Š’Ń‹ сŠ¾ŠµŠ“ŠøŠ½ŃŠµŃ‚ŠµŃŃŒ. Š’Š²ŠµŠ“ŠøтŠµ сŠ°Š¼ Š°Š“рŠµŃ ŠøŠ»Šø Š²Ń‹Š±ŠµŃ€ŠøтŠµ Š¾Š“ŠøŠ½ ŠøŠ· ŠæрŠµŠ“Š»Š¾Š¶ŠµŠ½Š½Ń‹Ń… Š²Š°Ń€ŠøŠ°Š½Ń‚Š¾Š².", - "serverDown": "Š”ŠµŃ€Š²ŠµŃ€ Š¼Š¾Š¶ŠµŃ‚ Š±Ń‹Ń‚ŃŒ Š½ŠµŠ“Š¾ŃŃ‚ŃƒŠæŠµŠ½" - }, - "label": { - "url": "URL уŠ·Š»Š°" - }, - "message": { - "currentConnection": "Š”ŠµŠ¹Ń‡Š°Ń Š²Ń‹ ŠæŠ¾Š“ŠŗŠ»ŃŽŃ‡ŠµŠ½Ń‹ Šŗ { 0 }. Š•ŃŠ»Šø Š²Ń‹ ŠæрŠ¾Š“Š¾Š»Š¶ŠøтŠµ, Š²Ń‹ Š±ŃƒŠ“ŠµŃ‚Šµ Š¾Ń‚ŠŗŠ»ŃŽŃ‡ŠµŠ½Ń‹ Š¾Ń‚ Š²Š°ŃˆŠµŠ³Š¾ тŠµŠŗущŠµŠ³Š¾ уŠ·Š»Š° Šø Š²ŃŠµ Š²Š°ŃˆŠø Š»Š¾ŠŗŠ°Š»ŃŒŠ½Ń‹Šµ Š“Š°Š½Š½Ń‹Šµ Š±ŃƒŠ“ут уŠ“Š°Š»ŠµŠ½Ń‹.", - "newUrl": "Š’Ń‹ ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŃ‚Šµ уŠ·ŠµŠ» Funkwhale Š½Š° { url }" - } - }, "ShortcutsModal": { "button": { "close": "Š—Š°Šŗрыть" @@ -4611,6 +4588,29 @@ }, "title": "Š Š°Š“ŠøŠ¾" } + }, + "ChooseInstance": { + "button": { + "cancel": "ŠžŃ‚Š¼ŠµŠ½Š°", + "submit": "ŠžŃ‚ŠæрŠ°Š²Šøть" + }, + "header": { + "chooseInstance": "Š’Ń‹Š±ŠµŃ€ŠøтŠµ сŠ²Š¾Š¹ уŠ·ŠµŠ»", + "failure": "ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ сŠ¾ŠµŠ“ŠøŠ½Šøться с уŠŗŠ°Š·Š°Š½Š½Ń‹Š¼ URL", + "suggestions": "ŠŸŃ€ŠµŠ“Š»Š¾Š¶ŠµŠ½Š½Ń‹Šµ ŠøŠ·Š¼ŠµŠ½ŠµŠ½Šøя" + }, + "help": { + "notFunkwhaleServer": "Š—Š°Š“Š°Š½Š½Ń‹Š¹ Š°Š“рŠµŃ Š½Šµ яŠ²Š»ŃŠµŃ‚ся сŠµŃ€Š²ŠµŃ€Š¾Š¼ Funkwhale", + "selectPod": "Š§Ń‚Š¾Š±Ń‹ ŠæрŠ¾Š“Š¾Š»Š¶Šøть, ŠæŠ¾Š¶Š°Š»ŃƒŠ¹ŃŃ‚Š° Š²Ń‹Š±ŠµŃ€ŠøтŠµ уŠ·ŠµŠ» Funkwhale, Šŗ ŠŗŠ¾Ń‚Š¾Ń€Š¾Š¼Ńƒ Š’Ń‹ сŠ¾ŠµŠ“ŠøŠ½ŃŠµŃ‚ŠµŃŃŒ. Š’Š²ŠµŠ“ŠøтŠµ сŠ°Š¼ Š°Š“рŠµŃ ŠøŠ»Šø Š²Ń‹Š±ŠµŃ€ŠøтŠµ Š¾Š“ŠøŠ½ ŠøŠ· ŠæрŠµŠ“Š»Š¾Š¶ŠµŠ½Š½Ń‹Ń… Š²Š°Ń€ŠøŠ°Š½Ń‚Š¾Š².", + "serverDown": "Š”ŠµŃ€Š²ŠµŃ€ Š¼Š¾Š¶ŠµŃ‚ Š±Ń‹Ń‚ŃŒ Š½ŠµŠ“Š¾ŃŃ‚ŃƒŠæŠµŠ½" + }, + "label": { + "url": "URL уŠ·Š»Š°" + }, + "message": { + "currentConnection": "Š”ŠµŠ¹Ń‡Š°Ń Š²Ń‹ ŠæŠ¾Š“ŠŗŠ»ŃŽŃ‡ŠµŠ½Ń‹ Šŗ { 0 }. Š•ŃŠ»Šø Š²Ń‹ ŠæрŠ¾Š“Š¾Š»Š¶ŠøтŠµ, Š²Ń‹ Š±ŃƒŠ“ŠµŃ‚Šµ Š¾Ń‚ŠŗŠ»ŃŽŃ‡ŠµŠ½Ń‹ Š¾Ń‚ Š²Š°ŃˆŠµŠ³Š¾ тŠµŠŗущŠµŠ³Š¾ уŠ·Š»Š° Šø Š²ŃŠµ Š²Š°ŃˆŠø Š»Š¾ŠŗŠ°Š»ŃŒŠ½Ń‹Šµ Š“Š°Š½Š½Ń‹Šµ Š±ŃƒŠ“ут уŠ“Š°Š»ŠµŠ½Ń‹.", + "newUrl": "Š’Ń‹ ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŃ‚Šµ уŠ·ŠµŠ» Funkwhale Š½Š° { url }" + } } } } diff --git a/front/src/locales/sq.json b/front/src/locales/sq.json index 0967ef424..9c71eeb54 100644 --- a/front/src/locales/sq.json +++ b/front/src/locales/sq.json @@ -1 +1,5 @@ -{} +{ + "views": { + "ChooseInstance": null + } +} diff --git a/front/src/locales/sv.json b/front/src/locales/sv.json index 193cda36d..aedbeeb54 100644 --- a/front/src/locales/sv.json +++ b/front/src/locales/sv.json @@ -1998,19 +1998,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "ƅngra", - "submit": "Skicka in" - }, - "header": { - "chooseInstance": "VƤlj din instans", - "suggestions": "Fƶreslagna val" - }, - "label": { - "url": "Instansradio" - } - }, "Queue": { "button": { "clear": "Rensa", @@ -3042,6 +3029,19 @@ "tracks": "LĆ„tar" } } + }, + "ChooseInstance": { + "button": { + "cancel": "ƅngra", + "submit": "Skicka in" + }, + "header": { + "chooseInstance": "VƤlj din instans", + "suggestions": "Fƶreslagna val" + }, + "label": { + "url": "Instansradio" + } } }, "composables": { diff --git a/front/src/locales/tr.json b/front/src/locales/tr.json index 890982ab7..4c1d5af65 100644 --- a/front/src/locales/tr.json +++ b/front/src/locales/tr.json @@ -208,20 +208,6 @@ "unsupported": "Bu tĆ¼r nesne henĆ¼z desteklenmiyor" } }, - "SetInstanceModal": { - "button": { - "cancel": "Ä°ptal", - "submit": "Gƶnder" - }, - "header": { - "failure": "Verilen URL'e bağlanılamaz", - "suggestions": "Ɩnerilen seƧimler" - }, - "help": { - "notFunkwhaleServer": "Verilen adres bir Funkwhale sunucusu değil", - "serverDown": "Sunucu ƧƶkĆ¼k olabilir" - } - }, "ShortcutsModal": { "button": { "close": "Kapat" @@ -1690,6 +1676,20 @@ "tracks": "{ n } parƧa | { n } parƧa" } } + }, + "ChooseInstance": { + "button": { + "cancel": "Ä°ptal", + "submit": "Gƶnder" + }, + "header": { + "failure": "Verilen URL'e bağlanılamaz", + "suggestions": "Ɩnerilen seƧimler" + }, + "help": { + "notFunkwhaleServer": "Verilen adres bir Funkwhale sunucusu değil", + "serverDown": "Sunucu ƧƶkĆ¼k olabilir" + } } } } diff --git a/front/src/locales/zh_Hans.json b/front/src/locales/zh_Hans.json index 16604ba75..e0b194364 100644 --- a/front/src/locales/zh_Hans.json +++ b/front/src/locales/zh_Hans.json @@ -222,28 +222,6 @@ "unsupported": "čæ™ē§ē±»åž‹ēš„åÆ¹č±”čæ˜äøå—ę”Æꌁ" } }, - "SetInstanceModal": { - "button": { - "cancel": "å–ę¶ˆ", - "submit": "ꏐäŗ¤" - }, - "header": { - "chooseInstance": "é€‰ę‹©å®žä¾‹", - "failure": "ę— ę³•čæžęŽ„č‡³ęŒ‡å®š URL", - "suggestions": "å»ŗč®®ēš„选ꋩ" - }, - "help": { - "notFunkwhaleServer": "č¾“å…„ēš„地址äøę˜Æ Funkwhale ęœåŠ”å™Ø", - "selectPod": "苄要ē»§ē»­ļ¼ŒčÆ·ęŒ‡å®šę‚Ø要čæžęŽ„ēš„ Funkwhale å®žä¾‹ć€‚ę‚ØåÆ仄ē›“ęŽ„č¾“å…„åœ°å€ļ¼Œęˆ–从å»ŗč®®ēš„选锹äø­é€‰ę‹©äø€äøŖ怂", - "serverDown": "ęœåŠ”å™ØåÆčƒ½å¼€å°å·®äŗ†" - }, - "label": { - "url": "实例 URL" - }, - "message": { - "newUrl": "ę‚Øå½“å‰ę­£åœØä½æē”Ø地址äøŗ { url } ēš„ Funkwhale 实例" - } - }, "ShortcutsModal": { "button": { "close": "关闭" @@ -4517,6 +4495,28 @@ }, "title": "ē”µå°" } + }, + "ChooseInstance": { + "button": { + "cancel": "å–ę¶ˆ", + "submit": "ꏐäŗ¤" + }, + "header": { + "chooseInstance": "é€‰ę‹©å®žä¾‹", + "failure": "ę— ę³•čæžęŽ„č‡³ęŒ‡å®š URL", + "suggestions": "å»ŗč®®ēš„选ꋩ" + }, + "help": { + "notFunkwhaleServer": "č¾“å…„ēš„地址äøę˜Æ Funkwhale ęœåŠ”å™Ø", + "selectPod": "苄要ē»§ē»­ļ¼ŒčÆ·ęŒ‡å®šę‚Ø要čæžęŽ„ēš„ Funkwhale å®žä¾‹ć€‚ę‚ØåÆ仄ē›“ęŽ„č¾“å…„åœ°å€ļ¼Œęˆ–从å»ŗč®®ēš„选锹äø­é€‰ę‹©äø€äøŖ怂", + "serverDown": "ęœåŠ”å™ØåÆčƒ½å¼€å°å·®äŗ†" + }, + "label": { + "url": "实例 URL" + }, + "message": { + "newUrl": "ę‚Øå½“å‰ę­£åœØä½æē”Ø地址äøŗ { url } ēš„ Funkwhale 实例" + } } } } diff --git a/front/src/locales/zh_Hant.json b/front/src/locales/zh_Hant.json index fe8028aae..4cc90bf6d 100644 --- a/front/src/locales/zh_Hant.json +++ b/front/src/locales/zh_Hant.json @@ -157,7 +157,8 @@ "createAccount": "{ app } éœ€č¦čØŖ問ę‚Øēš„funkwhaleč³¬ęˆ¶" } } - } + }, + "ChooseInstance": null }, "init": { "serviceWorker": { From 97aa045b0b464885788615e513db361484dab202 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 21:21:48 +0100 Subject: [PATCH 327/371] feat: add pre-commit to shellHook Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- flake.nix | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 09d7fb9d4..6c38d298f 100644 --- a/flake.nix +++ b/flake.nix @@ -19,7 +19,7 @@ ]; }; lib = nixpkgs.lib; - + commonLibraries = with pkgs;[ # Tauri dependencies webkitgtk_4_1 @@ -41,7 +41,7 @@ gst_all_1.gst-plugins-good gst_all_1.gst-plugins-base ]; - + packages = with pkgs; [ # More tauri dependencies @@ -56,14 +56,19 @@ nodejs corepack - # API dependencies / Frontend scripts + # API dependencies / Frontend scripts python3 + pre-commit ]; in { devShell = pkgs.mkShell { buildInputs = commonLibraries ++ packages; + shellHook = '' + pre-commit install + ''; + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath commonLibraries; XDG_DATA_DIRS = let @@ -81,7 +86,7 @@ in "${base}:${gsettings-schema}:$XDG_DATA_DIRS"; GIO_MODULE_DIR = "${pkgs.glib-networking}/lib/gio/modules/"; - + # Avoid white screen running with Nix # https://github.com/tauri-apps/tauri/issues/4315#issuecomment-1207755694 From cea9d9cf47f2b6c8b0cc12764edbfe19c16978a9 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 21:45:41 +0100 Subject: [PATCH 328/371] fix: fix some linting errors Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/locales/fa_IR.json | 3 +-- front/src/locales/ga.json | 6 +----- front/src/locales/hu.json | 3 +-- front/src/locales/id.json | 6 +----- front/src/locales/ko_KR.json | 3 +-- front/src/locales/nn_NO.json | 6 +----- front/src/locales/sq.json | 6 +----- front/src/locales/zh_Hant.json | 3 +-- front/src/router/routes/index.ts | 2 +- front/src/views/ChooseInstance.vue | 27 +++++++++++++++------------ 10 files changed, 24 insertions(+), 41 deletions(-) diff --git a/front/src/locales/fa_IR.json b/front/src/locales/fa_IR.json index 770c0d30a..1dead2303 100644 --- a/front/src/locales/fa_IR.json +++ b/front/src/locales/fa_IR.json @@ -354,7 +354,6 @@ "messages": "Ł¾ŪŒŲ§Ł… Ł‡Ų§ŪŒ Ų“Ł…Ų§", "notifications": "Ų§Ų¹Ł„Ų§Ł† Ł‡Ų§ŪŒ Ų“Ł…Ų§" } - }, - "ChooseInstance": null + } } } diff --git a/front/src/locales/ga.json b/front/src/locales/ga.json index 9c71eeb54..0967ef424 100644 --- a/front/src/locales/ga.json +++ b/front/src/locales/ga.json @@ -1,5 +1 @@ -{ - "views": { - "ChooseInstance": null - } -} +{} diff --git a/front/src/locales/hu.json b/front/src/locales/hu.json index dccbb1458..b5f7caf42 100644 --- a/front/src/locales/hu.json +++ b/front/src/locales/hu.json @@ -949,8 +949,7 @@ "create": "HozzĆ”fĆ©rĆ©s a lejĆ”tszĆ”si listĆ”khoz" } } - }, - "ChooseInstance": null + } }, "init": { "serviceWorker": { diff --git a/front/src/locales/id.json b/front/src/locales/id.json index 9c71eeb54..0967ef424 100644 --- a/front/src/locales/id.json +++ b/front/src/locales/id.json @@ -1,5 +1 @@ -{ - "views": { - "ChooseInstance": null - } -} +{} diff --git a/front/src/locales/ko_KR.json b/front/src/locales/ko_KR.json index dc85bbc7a..00715dd9c 100644 --- a/front/src/locales/ko_KR.json +++ b/front/src/locales/ko_KR.json @@ -128,7 +128,6 @@ "createAccount": "{ app } ģ“ Funkwhale ź³„ģ •ģ— ģ ‘ź·¼ķ•˜ė ¤ź³  ķ•©ė‹ˆė‹¤" } } - }, - "ChooseInstance": null + } } } diff --git a/front/src/locales/nn_NO.json b/front/src/locales/nn_NO.json index 9c71eeb54..0967ef424 100644 --- a/front/src/locales/nn_NO.json +++ b/front/src/locales/nn_NO.json @@ -1,5 +1 @@ -{ - "views": { - "ChooseInstance": null - } -} +{} diff --git a/front/src/locales/sq.json b/front/src/locales/sq.json index 9c71eeb54..0967ef424 100644 --- a/front/src/locales/sq.json +++ b/front/src/locales/sq.json @@ -1,5 +1 @@ -{ - "views": { - "ChooseInstance": null - } -} +{} diff --git a/front/src/locales/zh_Hant.json b/front/src/locales/zh_Hant.json index 4cc90bf6d..fe8028aae 100644 --- a/front/src/locales/zh_Hant.json +++ b/front/src/locales/zh_Hant.json @@ -157,8 +157,7 @@ "createAccount": "{ app } éœ€č¦čØŖ問ę‚Øēš„funkwhaleč³¬ęˆ¶" } } - }, - "ChooseInstance": null + } }, "init": { "serviceWorker": { diff --git a/front/src/router/routes/index.ts b/front/src/router/routes/index.ts index 9aae990be..d125d99d6 100644 --- a/front/src/router/routes/index.ts +++ b/front/src/router/routes/index.ts @@ -22,7 +22,7 @@ export default [ { path: '/instance-chooser', name: 'instance-chooser', - component: () => import('~/views/ChooseInstance.vue'), + component: () => import('~/views/ChooseInstance.vue') }, { path: '/index.html', diff --git a/front/src/views/ChooseInstance.vue b/front/src/views/ChooseInstance.vue index fdb11abfc..09e80d05d 100644 --- a/front/src/views/ChooseInstance.vue +++ b/front/src/views/ChooseInstance.vue @@ -38,7 +38,7 @@ const checkAndSwitch = async (url: string) => { await axios.get(instanceUrl + '/api/v1/instance/nodeinfo/2.0/') store.commit('ui/addMessage', { - content: t('components.SetInstanceModal.message.newUrl', { url: instanceUrl }), + content: t('views.ChooseInstance.message.newUrl', { url: instanceUrl }), date: new Date() }) @@ -57,11 +57,11 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA <template> <div class="instance-chooser"> - <img src="../assets/logo/logo-full-500.png" /> + <img src="../assets/logo/logo-full-500.png"> <div class="card"> <h3 class="header"> - {{ t('components.SetInstanceModal.header.chooseInstance') }} + {{ t('views.ChooseInstance.header.chooseInstance') }} </h3> <div class="scrolling content"> @@ -71,14 +71,14 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA class="ui negative message" > <h4 class="header"> - {{ t('components.SetInstanceModal.header.failure') }} + {{ t('views.ChooseInstance.header.failure') }} </h4> <ul class="list"> <li> - {{ t('components.SetInstanceModal.help.serverDown') }} + {{ t('views.ChooseInstance.help.serverDown') }} </li> <li> - {{ t('components.SetInstanceModal.help.notFunkwhaleServer') }} + {{ t('views.ChooseInstance.help.notFunkwhaleServer') }} </li> </ul> </div> @@ -91,7 +91,7 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA v-if="store.state.instance.instanceUrl && !isTauriInstance" class="description" > - <i18n-t keypath="components.SetInstanceModal.message.currentConnection"> + <i18n-t keypath="views.ChooseInstance.message.currentConnection"> <a :href="store.state.instance.instanceUrl" target="_blank" @@ -102,12 +102,15 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA </i18n-t> {{ t('', {url: store.state.instance.instanceUrl, hostname: store.getters['instance/domain']}) }} </p> - <p v-else class="description"> - {{ t('components.SetInstanceModal.help.selectPod') }} + <p + v-else + class="description" + > + {{ t('views.ChooseInstance.help.selectPod') }} </p> <div class="field"> - <label for="instance-picker">{{ t('components.SetInstanceModal.label.url') }}</label> + <label for="instance-picker">{{ t('views.ChooseInstance.label.url') }}</label> <div class="ui action input"> <input id="instance-picker" @@ -119,7 +122,7 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA type="submit" :class="['ui', 'icon', {loading: isLoading}, 'button']" > - {{ t('components.SetInstanceModal.button.submit') }} + {{ t('views.ChooseInstance.button.submit') }} </button> </div> </div> @@ -134,7 +137,7 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA > <div class="field"> <h4> - {{ t('components.SetInstanceModal.header.suggestions') }} + {{ t('views.ChooseInstance.header.suggestions') }} </h4> <div class="h-scroll"> <button From b313d0e48ca05eac89f326916645ac2e225100a6 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 22:10:47 +0100 Subject: [PATCH 329/371] fix: remove unused locale key Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/locales/ar.json | 1 - front/src/locales/bn_BD.json | 1 - front/src/locales/ca.json | 1 - front/src/locales/cs.json | 1 - front/src/locales/de.json | 1 - front/src/locales/el.json | 1 - front/src/locales/en_GB.json | 1 - front/src/locales/en_US.json | 1 - front/src/locales/eo.json | 1 - front/src/locales/es.json | 1 - front/src/locales/eu.json | 1 - front/src/locales/fr_FR.json | 1 - front/src/locales/gl.json | 1 - front/src/locales/it.json | 1 - front/src/locales/ja_JP.json | 4 +--- front/src/locales/kab_DZ.json | 1 - front/src/locales/ml.json | 1 - front/src/locales/nb_NO.json | 1 - front/src/locales/nl.json | 1 - front/src/locales/oc.json | 1 - front/src/locales/pl.json | 1 - front/src/locales/pt_BR.json | 1 - front/src/locales/pt_PT.json | 1 - front/src/locales/ru.json | 1 - front/src/locales/sv.json | 1 - front/src/locales/tr.json | 1 - front/src/locales/zh_Hans.json | 1 - 27 files changed, 1 insertion(+), 29 deletions(-) diff --git a/front/src/locales/ar.json b/front/src/locales/ar.json index 25d416c2e..6477b70f2 100644 --- a/front/src/locales/ar.json +++ b/front/src/locales/ar.json @@ -3580,7 +3580,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Ų„Ł„ŲŗŲ§Ų”", "submit": "Ų„Ų±Ų³Ų§Ł„" }, "header": { diff --git a/front/src/locales/bn_BD.json b/front/src/locales/bn_BD.json index b22b131f2..6c535e015 100644 --- a/front/src/locales/bn_BD.json +++ b/front/src/locales/bn_BD.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "", "submit": "" }, "header": { diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index a5933f2fe..b99244224 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancelar", "submit": "Envia" }, "header": { diff --git a/front/src/locales/cs.json b/front/src/locales/cs.json index 732fc049d..be5b47c7d 100644 --- a/front/src/locales/cs.json +++ b/front/src/locales/cs.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "ZruÅ”it", "submit": "Odeslat" }, "header": { diff --git a/front/src/locales/de.json b/front/src/locales/de.json index ce9f0e9b0..d3bd85a13 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Abbrechen", "submit": "Abschicken" }, "header": { diff --git a/front/src/locales/el.json b/front/src/locales/el.json index d6a62e044..2de23aa99 100644 --- a/front/src/locales/el.json +++ b/front/src/locales/el.json @@ -2454,7 +2454,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Ī‘ĪŗĻĻĻ‰ĻƒĪ·", "submit": "Ī„Ļ€ĪæĪ²ĪæĪ»Ī®" }, "header": { diff --git a/front/src/locales/en_GB.json b/front/src/locales/en_GB.json index cd9a79259..b2f82ab54 100644 --- a/front/src/locales/en_GB.json +++ b/front/src/locales/en_GB.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancel", "submit": "Submit" }, "header": { diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index ef5154d9d..430e5375d 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancel", "submit": "Submit" }, "header": { diff --git a/front/src/locales/eo.json b/front/src/locales/eo.json index 82bbd9459..46cac0c86 100644 --- a/front/src/locales/eo.json +++ b/front/src/locales/eo.json @@ -3620,7 +3620,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Nuligi", "submit": "Submeti" }, "header": { diff --git a/front/src/locales/es.json b/front/src/locales/es.json index 4ec7994d2..30d57282a 100644 --- a/front/src/locales/es.json +++ b/front/src/locales/es.json @@ -3940,7 +3940,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancelar", "submit": "Enviar" }, "header": { diff --git a/front/src/locales/eu.json b/front/src/locales/eu.json index 7dbe4c75f..43224bb83 100644 --- a/front/src/locales/eu.json +++ b/front/src/locales/eu.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Ezeztatu", "submit": "Bidali" }, "header": { diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index ec58811ef..81fc68bf2 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Annuler", "submit": "Valider" }, "header": { diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index 4ec8c2a9d..a169a1fa8 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancelar", "submit": "Enviar" }, "header": { diff --git a/front/src/locales/it.json b/front/src/locales/it.json index aabee0d31..0857f6adf 100644 --- a/front/src/locales/it.json +++ b/front/src/locales/it.json @@ -4544,7 +4544,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Annulla", "submit": "Invia" }, "header": { diff --git a/front/src/locales/ja_JP.json b/front/src/locales/ja_JP.json index 07e47c5fb..8646c2ce3 100644 --- a/front/src/locales/ja_JP.json +++ b/front/src/locales/ja_JP.json @@ -4334,9 +4334,7 @@ } }, "ChooseInstance": { - "button": { - "cancel": "ć‚­ćƒ£ćƒ³ć‚»ćƒ«" - }, + "button": {}, "header": { "chooseInstance": "ć‚¤ćƒ³ć‚¹ć‚æćƒ³ć‚¹ć‚’éø悓恧恏恠恕恄", "failure": "å…„åŠ›ć•ć‚ŒćŸURLć«ć‚¢ć‚Æć‚»ć‚¹ć§ćć¾ć›ć‚“", diff --git a/front/src/locales/kab_DZ.json b/front/src/locales/kab_DZ.json index b76e77eb7..7377b6eed 100644 --- a/front/src/locales/kab_DZ.json +++ b/front/src/locales/kab_DZ.json @@ -2173,7 +2173,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Sefex", "submit": "Envoyer" } } diff --git a/front/src/locales/ml.json b/front/src/locales/ml.json index fb26115ee..495be8718 100644 --- a/front/src/locales/ml.json +++ b/front/src/locales/ml.json @@ -1614,7 +1614,6 @@ }, "ChooseInstance": { "button": { - "cancel": "ą“±ą“¦ąµą“¦ą“¾ą“•ąµą“•ąµą“•", "submit": "ą“øą“®ąµ¼ą“Ŗąµą“Ŗą“æą“•ąµą“•ąµą“•" } } diff --git a/front/src/locales/nb_NO.json b/front/src/locales/nb_NO.json index 540edbc7c..c13ab85d2 100644 --- a/front/src/locales/nb_NO.json +++ b/front/src/locales/nb_NO.json @@ -3287,7 +3287,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Avbryt", "submit": "Send inn" }, "header": { diff --git a/front/src/locales/nl.json b/front/src/locales/nl.json index c15c2df82..a316507a8 100644 --- a/front/src/locales/nl.json +++ b/front/src/locales/nl.json @@ -4590,7 +4590,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Annuleren", "submit": "Indienen" }, "header": { diff --git a/front/src/locales/oc.json b/front/src/locales/oc.json index 10ff566ef..f73d8640f 100644 --- a/front/src/locales/oc.json +++ b/front/src/locales/oc.json @@ -4529,7 +4529,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Anullar", "submit": "Validar" }, "header": { diff --git a/front/src/locales/pl.json b/front/src/locales/pl.json index e327badef..05618a20e 100644 --- a/front/src/locales/pl.json +++ b/front/src/locales/pl.json @@ -4489,7 +4489,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Anuluj", "submit": "Prześlij" }, "header": { diff --git a/front/src/locales/pt_BR.json b/front/src/locales/pt_BR.json index 95fa0e779..281d9075c 100644 --- a/front/src/locales/pt_BR.json +++ b/front/src/locales/pt_BR.json @@ -4343,7 +4343,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancelar", "submit": "Enviar" }, "header": { diff --git a/front/src/locales/pt_PT.json b/front/src/locales/pt_PT.json index 129da9c42..4a78ec319 100644 --- a/front/src/locales/pt_PT.json +++ b/front/src/locales/pt_PT.json @@ -3593,7 +3593,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Cancelar", "submit": "Enviar" }, "header": { diff --git a/front/src/locales/ru.json b/front/src/locales/ru.json index 9370a0a93..ee244a850 100644 --- a/front/src/locales/ru.json +++ b/front/src/locales/ru.json @@ -4591,7 +4591,6 @@ }, "ChooseInstance": { "button": { - "cancel": "ŠžŃ‚Š¼ŠµŠ½Š°", "submit": "ŠžŃ‚ŠæрŠ°Š²Šøть" }, "header": { diff --git a/front/src/locales/sv.json b/front/src/locales/sv.json index aedbeeb54..738eed6cf 100644 --- a/front/src/locales/sv.json +++ b/front/src/locales/sv.json @@ -3032,7 +3032,6 @@ }, "ChooseInstance": { "button": { - "cancel": "ƅngra", "submit": "Skicka in" }, "header": { diff --git a/front/src/locales/tr.json b/front/src/locales/tr.json index 4c1d5af65..05f1418d2 100644 --- a/front/src/locales/tr.json +++ b/front/src/locales/tr.json @@ -1679,7 +1679,6 @@ }, "ChooseInstance": { "button": { - "cancel": "Ä°ptal", "submit": "Gƶnder" }, "header": { diff --git a/front/src/locales/zh_Hans.json b/front/src/locales/zh_Hans.json index e0b194364..36d9f131d 100644 --- a/front/src/locales/zh_Hans.json +++ b/front/src/locales/zh_Hans.json @@ -4498,7 +4498,6 @@ }, "ChooseInstance": { "button": { - "cancel": "å–ę¶ˆ", "submit": "ꏐäŗ¤" }, "header": { From 318aa196fad0d77519b91db7311ad241498fb9b4 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 22:16:01 +0100 Subject: [PATCH 330/371] style: fix linting Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/App.vue | 2 +- front/tauri/favicon.svg | 2 +- front/tauri/tauri.conf.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/front/src/App.vue b/front/src/App.vue index 4e4f27b53..6d6ab2649 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -2,7 +2,7 @@ import type { QueueTrack } from '~/composables/audio/queue' import { useIntervalFn, useStyleTag, useToggle, useWindowSize } from '@vueuse/core' -import { computed, nextTick, onMounted, ref, watchEffect, defineAsyncComponent } from 'vue' +import { computed, nextTick, onMounted, watchEffect, defineAsyncComponent } from 'vue' import { useQueue } from '~/composables/audio/queue' import { useStore } from '~/store' diff --git a/front/tauri/favicon.svg b/front/tauri/favicon.svg index 39135c457..85b5aad65 100644 --- a/front/tauri/favicon.svg +++ b/front/tauri/favicon.svg @@ -1,3 +1,3 @@ <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="32" xmlns="http://www.w3.org/2000/svg" height="32" id="screenshot-7b8093c9-7997-11ed-b471-13134daf88e2" viewBox="-0 0 32 32" style="-webkit-print-color-adjust: exact;" fill="none" version="1.1"><g xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" id="shape-7b8093c9-7997-11ed-b471-13134daf88e2" style="fill: rgb(0, 0, 0);" ry="0" rx="0" y="0px" version="1.1"><g id="shape-7b80e1e0-7997-11ed-b471-13134daf88e2"><style type="text/css" rx="0" ry="0" style="fill: rgb(0, 0, 0);">.st0{fill:#FFFFFF;} .st1{fill:#009FE3;} - .st2{fill:#3C3C3B;}</style></g><g id="shape-7b80e1e1-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e1-7997-11ed-b471-13134daf88e2"><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)" style="fill: rgb(0, 159, 227); fill-opacity: 1;"/></g><g id="strokes-7b80e1e1-7997-11ed-b471-13134daf88e2" class="strokes"><g class="inner-stroke-shape" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)"><defs><clipPath id="inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"/></clipPath><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" id="stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" style="fill: none; stroke-width: 4; stroke: rgb(0, 0, 0); stroke-opacity: 0;"/></defs><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" clip-path="url('#inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0')"/></g></g></g><g id="shape-7b80e1e2-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e4-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e5-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e7-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e7-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,22.000C19.308,22.000,22.000,19.444,22.000,16.302C22.000,16.142,21.850,16.000,21.682,16.000L19.421,16.000C19.252,16.000,19.103,16.142,19.103,16.302C19.103,17.917,17.720,19.249,16.000,19.249C14.299,19.249,12.897,17.935,12.897,16.302C12.897,16.142,12.748,16.000,12.579,16.000L10.318,16.000C10.150,16.000,10.000,16.142,10.000,16.302C10.000,19.462,12.692,22.000,16.000,22.000ZL16.000,22.000Z" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g><g id="shape-7b80e1e8-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e8-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,28.000C22.607,28.000,28.000,22.750,28.000,16.319C28.000,16.150,27.846,16.000,27.673,16.000L25.342,16.000C25.169,16.000,25.014,16.150,25.014,16.319C25.014,21.175,20.970,25.112,15.981,25.112C10.992,25.112,6.947,21.175,6.947,16.319C6.947,16.150,6.793,16.000,6.620,16.000L4.327,16.000C4.154,16.000,4.000,16.150,4.000,16.319C3.961,22.750,9.355,28.000,16.000,28.000ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g><g id="shape-7b80e1e6-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e6-7997-11ed-b471-13134daf88e2"><path class="st2" rx="0" ry="0" d="M10.737,10.262C11.528,10.674,12.382,10.751,13.147,11.201C13.644,11.497,13.963,11.819,14.269,12.308C14.753,13.041,14.728,13.967,14.728,13.967L14.792,14.984C14.792,14.984,15.174,16.000,16.028,16.000C16.934,16.000,17.265,14.984,17.265,14.984L17.329,13.967C17.329,13.967,17.303,13.054,17.788,12.308C18.094,11.819,18.400,11.471,18.910,11.201C19.675,10.751,20.529,10.674,21.319,10.262C22.110,9.850,22.875,9.323,23.397,8.590C23.920,7.856,24.162,6.878,23.882,6.017C22.378,5.939,20.644,6.119,19.318,6.840C17.469,7.831,16.347,7.483,16.016,8.963L15.990,8.963C15.659,7.470,14.549,7.831,12.688,6.840C11.362,6.119,9.628,5.939,8.124,6.017C7.830,6.878,8.085,7.843,8.608,8.590C9.169,9.336,9.947,9.863,10.737,10.262ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g></g></g></svg> \ No newline at end of file + .st2{fill:#3C3C3B;}</style></g><g id="shape-7b80e1e1-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e1-7997-11ed-b471-13134daf88e2"><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)" style="fill: rgb(0, 159, 227); fill-opacity: 1;"/></g><g id="strokes-7b80e1e1-7997-11ed-b471-13134daf88e2" class="strokes"><g class="inner-stroke-shape" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)"><defs><clipPath id="inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"/></clipPath><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" id="stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" style="fill: none; stroke-width: 4; stroke: rgb(0, 0, 0); stroke-opacity: 0;"/></defs><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" clip-path="url('#inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0')"/></g></g></g><g id="shape-7b80e1e2-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e4-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e5-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e7-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e7-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,22.000C19.308,22.000,22.000,19.444,22.000,16.302C22.000,16.142,21.850,16.000,21.682,16.000L19.421,16.000C19.252,16.000,19.103,16.142,19.103,16.302C19.103,17.917,17.720,19.249,16.000,19.249C14.299,19.249,12.897,17.935,12.897,16.302C12.897,16.142,12.748,16.000,12.579,16.000L10.318,16.000C10.150,16.000,10.000,16.142,10.000,16.302C10.000,19.462,12.692,22.000,16.000,22.000ZL16.000,22.000Z" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g><g id="shape-7b80e1e8-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e8-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,28.000C22.607,28.000,28.000,22.750,28.000,16.319C28.000,16.150,27.846,16.000,27.673,16.000L25.342,16.000C25.169,16.000,25.014,16.150,25.014,16.319C25.014,21.175,20.970,25.112,15.981,25.112C10.992,25.112,6.947,21.175,6.947,16.319C6.947,16.150,6.793,16.000,6.620,16.000L4.327,16.000C4.154,16.000,4.000,16.150,4.000,16.319C3.961,22.750,9.355,28.000,16.000,28.000ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g><g id="shape-7b80e1e6-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e6-7997-11ed-b471-13134daf88e2"><path class="st2" rx="0" ry="0" d="M10.737,10.262C11.528,10.674,12.382,10.751,13.147,11.201C13.644,11.497,13.963,11.819,14.269,12.308C14.753,13.041,14.728,13.967,14.728,13.967L14.792,14.984C14.792,14.984,15.174,16.000,16.028,16.000C16.934,16.000,17.265,14.984,17.265,14.984L17.329,13.967C17.329,13.967,17.303,13.054,17.788,12.308C18.094,11.819,18.400,11.471,18.910,11.201C19.675,10.751,20.529,10.674,21.319,10.262C22.110,9.850,22.875,9.323,23.397,8.590C23.920,7.856,24.162,6.878,23.882,6.017C22.378,5.939,20.644,6.119,19.318,6.840C17.469,7.831,16.347,7.483,16.016,8.963L15.990,8.963C15.659,7.470,14.549,7.831,12.688,6.840C11.362,6.119,9.628,5.939,8.124,6.017C7.830,6.878,8.085,7.843,8.608,8.590C9.169,9.336,9.947,9.863,10.737,10.262ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g></g></g></svg> diff --git a/front/tauri/tauri.conf.json b/front/tauri/tauri.conf.json index 128b2a769..8898dd53e 100644 --- a/front/tauri/tauri.conf.json +++ b/front/tauri/tauri.conf.json @@ -65,4 +65,4 @@ } ] } -} \ No newline at end of file +} From 5bf6e23815ede94929f77979b98970e5bd618842 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 24 Jan 2024 22:32:51 +0100 Subject: [PATCH 331/371] chore: add changelog snippet Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- changes/changelog.d/tauri.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/tauri.feature diff --git a/changes/changelog.d/tauri.feature b/changes/changelog.d/tauri.feature new file mode 100644 index 000000000..c8cd45ce4 --- /dev/null +++ b/changes/changelog.d/tauri.feature @@ -0,0 +1 @@ +Build desktop app with Tauri From 62f84a311b87457b1707fb9514db1e2d1c6b4726 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Fri, 26 Jan 2024 14:41:09 +0100 Subject: [PATCH 332/371] feat: enable switch instance button in tauri builds Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/components/Sidebar.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index a598adf57..cc9e733f2 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -103,6 +103,8 @@ watch(locale, (locale) => { }) const isProduction = import.meta.env.PROD +const isTauri = 'TAURI_ENV_PLATFORM' in import.meta.env + const showUserModal = ref(false) const showThemeModal = ref(false) @@ -535,7 +537,7 @@ onMounted(() => { </div> </div> <div - v-if="!isProduction" + v-if="!isProduction || isTauri" class="item" > <router-link From 1ca5ea2b731850c1cf899e635b889b7cf76996af Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Fri, 2 Feb 2024 13:27:28 +0100 Subject: [PATCH 333/371] ci: Build tauri desktop app Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitlab-ci.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 53d0a9adb..466d4f522 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -430,6 +430,22 @@ build_api: paths: - api +build_desktop: + stage: build + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [front/**/*] + + image: $CI_REGISTRY/funkwhale/ci/node-tauri:18 + variables: + <<: *keep_git_files_permissions + script: + - yarn tauri build + artifacts: + name: desktop_${CI_COMMIT_REF_NAME} + paths: + - front/tauri/target/release/bundle + deploy_docs: interruptible: false extends: .ssh-agent From 78329ca821b497af44710b527a84597bf83c6a36 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Mon, 5 Feb 2024 10:28:48 +0100 Subject: [PATCH 334/371] feat: update to tauri v2-beta.1 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/package.json | 4 +- front/tauri/Cargo.lock | 555 +- front/tauri/Cargo.toml | 4 +- front/tauri/capabilities/migrated.json | 16 + front/tauri/tauri.conf.json | 97 +- front/yarn.lock | 8259 ++++++++++++++++++++++++ 6 files changed, 8770 insertions(+), 165 deletions(-) create mode 100644 front/tauri/capabilities/migrated.json create mode 100644 front/yarn.lock diff --git a/front/package.json b/front/package.json index 015e23851..b119e264d 100644 --- a/front/package.json +++ b/front/package.json @@ -21,7 +21,7 @@ "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", - "@tauri-apps/api": "2.0.0-alpha.14", + "@tauri-apps/api": "2.0.0-beta.0", "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", @@ -62,7 +62,7 @@ "@faker-js/faker": "8.4.1", "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "2.0.0", - "@tauri-apps/cli": "2.0.0-alpha.21", + "@tauri-apps/cli": "2.0.0-beta.1", "@types/diff": "5.0.9", "@types/dompurify": "3.0.5", "@types/jquery": "3.5.29", diff --git a/front/tauri/Cargo.lock b/front/tauri/Cargo.lock index 7579cae65..2e7413a6f 100644 --- a/front/tauri/Cargo.lock +++ b/front/tauri/Cargo.lock @@ -62,6 +62,12 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + [[package]] name = "async-broadcast" version = "0.5.1" @@ -133,9 +139,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" dependencies = [ "async-lock 3.3.0", "cfg-if", @@ -144,7 +150,7 @@ dependencies = [ "futures-lite 2.2.0", "parking", "polling 3.3.2", - "rustix 0.38.30", + "rustix 0.38.31", "slab", "tracing", "windows-sys 0.52.0", @@ -183,7 +189,7 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.30", + "rustix 0.38.31", "windows-sys 0.48.0", ] @@ -204,13 +210,13 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" dependencies = [ - "async-io 2.3.0", + "async-io 2.3.1", "async-lock 2.8.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.30", + "rustix 0.38.31", "signal-hook-registry", "slab", "windows-sys 0.48.0", @@ -364,9 +370,23 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] [[package]] name = "byteorder" @@ -408,6 +428,38 @@ dependencies = [ "system-deps", ] +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "cargo_toml" version = "0.17.2" @@ -415,7 +467,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.8.8", + "toml 0.8.9", ] [[package]] @@ -467,16 +519,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] -name = "chrono" -version = "0.4.31" +name = "cfg_aliases" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" + +[[package]] +name = "chrono" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.48.5", + "windows-targets 0.52.0", ] [[package]] @@ -662,9 +720,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.3" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" dependencies = [ "darling_core", "darling_macro", @@ -672,9 +730,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" dependencies = [ "fnv", "ident_case", @@ -686,9 +744,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" dependencies = [ "darling_core", "quote", @@ -766,6 +824,60 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.1", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "drm" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +dependencies = [ + "bitflags 2.4.2", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "rustix 0.38.31", +] + +[[package]] +name = "drm-ffi" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +dependencies = [ + "drm-sys", + "rustix 0.38.31", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +dependencies = [ + "libc", + "linux-raw-sys 0.6.4", +] + [[package]] name = "dtoa" version = "1.0.9" @@ -787,6 +899,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + [[package]] name = "embed-resource" version = "2.4.1" @@ -796,7 +914,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.8.8", + "toml 0.8.9", "vswhom", "winreg 0.51.0", ] @@ -1228,6 +1346,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -1416,7 +1544,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.1.0", + "indexmap 2.2.2", "slab", "tokio", "tokio-util", @@ -1527,9 +1655,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1599,9 +1727,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -1771,15 +1899,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading", + "libloading 0.7.4", "once_cell", ] [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" @@ -1791,6 +1919,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "libredox" version = "0.0.1" @@ -1823,6 +1961,12 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +[[package]] +name = "linux-raw-sys" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" + [[package]] name = "lock_api" version = "0.4.11" @@ -1904,6 +2048,15 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.7.1" @@ -1930,9 +2083,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", "simd-adler32", @@ -1977,7 +2130,7 @@ dependencies = [ "jni-sys", "ndk-sys", "num_enum", - "raw-window-handle", + "raw-window-handle 0.5.2", "thiserror", ] @@ -2030,6 +2183,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" version = "0.2.17" @@ -2359,7 +2518,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ "base64", - "indexmap 2.1.0", + "indexmap 2.2.2", "line-wrap", "quick-xml", "serde", @@ -2404,7 +2563,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "pin-project-lite", - "rustix 0.38.30", + "rustix 0.38.31", "tracing", "windows-sys 0.52.0", ] @@ -2590,6 +2749,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2618,7 +2783,7 @@ checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.4", + "regex-automata 0.4.5", "regex-syntax 0.8.2", ] @@ -2633,9 +2798,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", @@ -2656,9 +2821,9 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ "base64", "bytes", @@ -2679,6 +2844,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-util", @@ -2722,9 +2888,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", @@ -2760,6 +2926,32 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -2797,21 +2989,24 @@ name = "semver" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +dependencies = [ + "serde", +] [[package]] name = "serde" -version = "1.0.195" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", @@ -2819,10 +3014,21 @@ dependencies = [ ] [[package]] -name = "serde_json" -version = "1.0.111" +name = "serde_derive_internals" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.113" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ "itoa 1.0.10", "ryu", @@ -2863,15 +3069,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.5.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58c3a1b3e418f61c25b2aeb43fc6c95eaa252b8cecdda67f401943e9e08d33f" +checksum = "1b0ed1662c5a68664f45b76d18deb0e234aff37207086803165c961eb695e981" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.1.0", + "indexmap 2.2.2", "serde", "serde_json", "serde_with_macros", @@ -2880,9 +3086,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.5.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2068b437a31fc68f25dd7edc296b078f04b45145c199d8eed9866e45f1ff274" +checksum = "568577ff0ef47b879f736cd66740e022f3672788cdf002a05a4e609ea5a6fb15" dependencies = [ "darling", "proc-macro2", @@ -3009,6 +3215,37 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "softbuffer" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071916a85d1db274b4ed57af3a14afb66bd836ae7f82ebb6f1fd3455107830d9" +dependencies = [ + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases 0.2.0", + "cocoa", + "core-graphics", + "drm", + "fastrand 2.0.1", + "foreign-types", + "js-sys", + "log", + "memmap2", + "objc", + "raw-window-handle 0.6.0", + "redox_syscall", + "rustix 0.38.31", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.52.0", + "x11rb", +] + [[package]] name = "soup3" version = "0.5.0" @@ -3121,6 +3358,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "system-configuration" version = "0.5.1" @@ -3151,15 +3394,15 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml 0.8.8", + "toml 0.8.9", "version-compare", ] [[package]] name = "tao" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75d4a64cfac8e487c61d778fe4ab8480f162451e8af7f247aafadcb3b2560852" +checksum = "9fa7ba6ee5b8908ba3a62e6a4f3683490ed732fca614cdd3f4c989bba548f9a9" dependencies = [ "bitflags 1.3.2", "cc", @@ -3184,7 +3427,8 @@ dependencies = [ "once_cell", "parking_lot", "png", - "raw-window-handle", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "scopeguard", "tao-macros", "unicode-segmentation", @@ -3215,9 +3459,9 @@ checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" [[package]] name = "tauri" -version = "2.0.0-alpha.21" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9a02f880bf9fcf62b73ea1d7f399601fab7ccc740814f46c3508d38e289722" +checksum = "a584d146c38bf174398dee0ec2cdd8f8fce142daee0306c370cf78f050304c60" dependencies = [ "anyhow", "bytes", @@ -3235,15 +3479,17 @@ dependencies = [ "log", "mime", "muda", + "nix", "objc", "percent-encoding", - "raw-window-handle", + "raw-window-handle 0.5.2", "reqwest", "serde", "serde_json", "serde_repr", "serialize-to-javascript", "state", + "static_assertions", "swift-rs", "tauri-build", "tauri-macros", @@ -3262,30 +3508,31 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-alpha.14" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b49822e368ea52ba1afdc4bc90c81f942d3cb2147b1b22d5e7a4f2b96050a5" +checksum = "314089a25d92a62f33f60d2a19c277f465e9088ee3ea251032ae914d6f2b1ce0" dependencies = [ "anyhow", "cargo_toml", "dirs-next", + "glob", "heck", "json-patch", - "plist", + "schemars", "semver", "serde", "serde_json", - "swift-rs", "tauri-utils", "tauri-winres", + "toml 0.8.9", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.0.0-alpha.13" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231c790a0842fedb921210b2ee8120dbe0a9f1797be3499abbf52ab80bbb57f" +checksum = "1e6ff13874390499976f01decf75103f28e7609abc5c155c6bfb56cf574a5628" dependencies = [ "base64", "brotli", @@ -3309,9 +3556,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-alpha.13" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712da03672a161265bd2e190f007431d8560b5071e68f4ec7b25e9c54fa1b3bb" +checksum = "18707774f70a8ec20dbf653f07d12af1e0d7c1e3a625b7bd5a2cfe72c2b2549b" dependencies = [ "heck", "proc-macro2", @@ -3323,14 +3570,14 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "1.0.0-alpha.8" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d5db66fb4913e3e64211737f4b7febad4d89e433f46cedee997be38ff45c51" +checksum = "1d72194de56e885dbd9fd8c493ccf95012e584c928900188da248f9ea4223b23" dependencies = [ "gtk", "http", "jni", - "raw-window-handle", + "raw-window-handle 0.5.2", "serde", "serde_json", "tauri-utils", @@ -3341,16 +3588,18 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "1.0.0-alpha.9" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379db5d8c05d0d47a2a86f6e758b2db9f62ba5c8703e6974356121974e170cae" +checksum = "74a71bd248a7ce857835b1f65845a9de22171e30d8129e018b42961502565efb" dependencies = [ "cocoa", "gtk", "http", "jni", + "nix", "percent-encoding", - "raw-window-handle", + "raw-window-handle 0.5.2", + "softbuffer", "tao", "tauri-runtime", "tauri-utils", @@ -3362,11 +3611,12 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-alpha.13" +version = "2.0.0-beta.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9740746f9a44cf7243f0ccaa724ecf09e4655fadd568da898057caad11df031c" +checksum = "e7104f0639a1f3a7ebd7aac793be47d7924f569e7c10c6853083529bf9bb3fe6" dependencies = [ "brotli", + "cargo_metadata", "ctor", "dunce", "glob", @@ -3380,11 +3630,14 @@ dependencies = [ "phf 0.11.2", "proc-macro2", "quote", + "schemars", "semver", "serde", "serde_json", "serde_with", + "swift-rs", "thiserror", + "toml 0.8.9", "url", "walkdir", ] @@ -3408,7 +3661,7 @@ dependencies = [ "cfg-if", "fastrand 2.0.1", "redox_syscall", - "rustix 0.38.30", + "rustix 0.38.31", "windows-sys 0.52.0", ] @@ -3461,12 +3714,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ "deranged", "itoa 1.0.10", + "num-conv", "powerfmt", "serde", "time-core", @@ -3481,13 +3735,26 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] +[[package]] +name = "tiny-xlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4098d49269baa034a8d1eae9bd63e9fa532148d772121dace3bcd6a6c98eb6d" +dependencies = [ + "as-raw-xcb-connection", + "ctor", + "libloading 0.8.1", + "tracing", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -3505,9 +3772,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", @@ -3547,14 +3814,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.21.1", ] [[package]] @@ -3572,7 +3839,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.2", "serde", "serde_spanned", "toml_datetime", @@ -3585,18 +3852,18 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.2", "toml_datetime", "winnow", ] [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.2", "serde", "serde_spanned", "toml_datetime", @@ -3672,9 +3939,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad962d06d2bfd9b2ab4f665fc73b175523b834b1466a294520201c5845145f8" +checksum = "fd26786733426b0bf632ebab410c162859a911f26c7c9e208b9e329a8ca94481" dependencies = [ "cocoa", "core-graphics", @@ -3692,9 +3959,9 @@ dependencies = [ [[package]] name = "treediff" -version = "4.0.2" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" +checksum = "4d127780145176e2b5d16611cc25a900150e86e9fd79d3bde6ff3a37359c9cb5" dependencies = [ "serde_json", ] @@ -3919,9 +4186,9 @@ checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "wasm-streams" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" dependencies = [ "futures-util", "js-sys", @@ -3930,6 +4197,55 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wayland-backend" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +dependencies = [ + "cc", + "downcast-rs", + "rustix 0.38.31", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +dependencies = [ + "bitflags 2.4.2", + "rustix 0.38.31", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.67" @@ -4059,7 +4375,7 @@ checksum = "af6abc2b9c56bd95887825a1ce56cde49a2a97c07e28db465d541f5098a2656c" dependencies = [ "cocoa", "objc", - "raw-window-handle", + "raw-window-handle 0.5.2", "windows-sys 0.52.0", "windows-version", ] @@ -4325,9 +4641,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.34" +version = "0.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5" dependencies = [ "memchr", ] @@ -4360,7 +4676,7 @@ checksum = "d3016c47c9b6f7029a9da7cd48af8352327226bba0e955f3c92e2966651365a9" dependencies = [ "base64", "block", - "cfg_aliases", + "cfg_aliases 0.1.1", "cocoa", "core-graphics", "crossbeam-channel", @@ -4380,7 +4696,7 @@ dependencies = [ "objc", "objc_id", "once_cell", - "raw-window-handle", + "raw-window-handle 0.5.2", "serde", "serde_json", "sha2", @@ -4419,20 +4735,41 @@ dependencies = [ ] [[package]] -name = "xdg-home" -version = "1.0.0" +name = "x11rb" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" dependencies = [ - "nix", + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading 0.8.1", + "once_cell", + "rustix 0.38.31", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" + +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", "winapi", ] [[package]] name = "zbus" -version = "3.14.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +checksum = "c45d06ae3b0f9ba1fb2671268b975557d8f5a84bb5ec6e43964f87e763d8bca8" dependencies = [ "async-broadcast", "async-executor", @@ -4471,9 +4808,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.14.1" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +checksum = "b4a1ba45ed0ad344b85a2bb5a1fe9830aed23d67812ea39a586e7d0136439c7d" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", diff --git a/front/tauri/Cargo.toml b/front/tauri/Cargo.toml index 3a379d88b..f90ecf30a 100644 --- a/front/tauri/Cargo.toml +++ b/front/tauri/Cargo.toml @@ -16,12 +16,12 @@ name = "funkwhale_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] -tauri-build = { version = "2.0.0-alpha", features = [] } +tauri-build = { version = "2.0.0-beta", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "2.0.0-alpha", features = [] } +tauri = { version = "2.0.0-beta", features = [] } [features] # this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. diff --git a/front/tauri/capabilities/migrated.json b/front/tauri/capabilities/migrated.json new file mode 100644 index 000000000..0fff22326 --- /dev/null +++ b/front/tauri/capabilities/migrated.json @@ -0,0 +1,16 @@ +{ + "identifier": "migrated", + "description": "permissions that were migrated from v1", + "context": "local", + "windows": ["main"], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "resources:default", + "menu:default", + "tray:default" + ], + "platforms": ["linux", "macOS", "windows", "android", "iOS"] +} diff --git a/front/tauri/tauri.conf.json b/front/tauri/tauri.conf.json index 8898dd53e..b5fa90161 100644 --- a/front/tauri/tauri.conf.json +++ b/front/tauri/tauri.conf.json @@ -1,57 +1,10 @@ { + "identifier": "audio.funkwhale.desktop", + "productName": "Funkwhale", + "version": "0.1.0", + "$schema": "../node_modules/@tauri-apps/cli/schema.json", - "build": { - "beforeBuildCommand": "yarn build", - "beforeDevCommand": "yarn dev", - "devPath": "http://localhost:8080", - "distDir": "../dist" - }, - "package": { - "productName": "Funkwhale", - "version": "0.1.0" - }, - "plugins": { - "updater": { - "endpoints": [] - } - }, - "tauri": { - "bundle": { - "active": true, - "category": "DeveloperTool", - "copyright": "", - "deb": { - "depends": [] - }, - "externalBin": [], - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "identifier": "audio.funkwhale.desktop", - "longDescription": "", - "macOS": { - "entitlements": null, - "exceptionDomain": "", - "frameworks": [], - "providerShortName": null, - "signingIdentity": null - }, - "resources": [], - "shortDescription": "", - "targets": "all", - "updater": { - "active": false - }, - "windows": { - "certificateThumbprint": null, - "digestAlgorithm": "sha256", - "timestampUrl": "" - } - }, + "app": { "security": { "csp": null }, @@ -64,5 +17,45 @@ "width": 800 } ] + }, + "build": { + "beforeBuildCommand": "yarn build", + "beforeDevCommand": "yarn dev", + "devUrl": "http://localhost:8080", + "frontendDist": "../dist" + }, + "bundle": { + "active": true, + "category": "Music", + "copyright": "", + "externalBin": [], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "linux": { + "deb": { + "depends": [] + } + }, + "longDescription": "", + "macOS": { + "entitlements": null, + "exceptionDomain": "", + "frameworks": [], + "providerShortName": null, + "signingIdentity": null + }, + "resources": [], + "shortDescription": "", + "targets": "all", + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } } } diff --git a/front/yarn.lock b/front/yarn.lock new file mode 100644 index 000000000..3a4f7a9eb --- /dev/null +++ b/front/yarn.lock @@ -0,0 +1,8259 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@antfu/utils@^0.7.5": + version "0.7.7" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb" + integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@apidevtools/json-schema-ref-parser@9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" + integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== + dependencies: + "@jsdevtools/ono" "^7.1.3" + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" + integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.6" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + ajv "^8.6.3" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.1" + +"@assemblyscript/loader@^0.17.11": + version "0.17.14" + resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" + integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.1": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" + integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== + dependencies: + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== + dependencies: + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.22.10", "@babel/parser@^7.22.7", "@babel/parser@^7.23.5", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" + +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== + dependencies: + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.23.3" + +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.11.0": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" + integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.23.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.8.4": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.15", "@babel/template@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@bundled-es-modules/cookie@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz#c3b82703969a61cf6a46e959a012b2c257f6b164" + integrity sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw== + dependencies: + cookie "^0.5.0" + +"@bundled-es-modules/statuses@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" + integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + dependencies: + statuses "^2.0.1" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cypress/request@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" + integrity sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + http-signature "~1.3.6" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "6.10.4" + safe-buffer "^5.1.2" + tough-cookie "^4.1.3" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^1.2.0", "@eslint/eslintrc@^1.4.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" + integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== + +"@faker-js/faker@8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.4.1.tgz#5d5e8aee8fce48f5e189bf730ebd1f758f491451" + integrity sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg== + +"@funkwhale/ui@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@funkwhale/ui/-/ui-0.2.2.tgz#09a5f8e6b30d7a898b50f5fdcfce9b09b3071c5b" + integrity sha512-+rmChC/06XVSEwzSN7ldVjtdKJknqk2FUBTBuhN41+BrinRpySjM5PQoUfVN5IiQkL8Nff5sIjt2k8gluHZ85g== + dependencies: + dompurify "^2.4.3 || ^3.0.0" + showdown "^2.1.0" + transliteration "^2.3.5" + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@inquirer/confirm@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.0.0.tgz#6e1e35d18675fe659752d11021f9fddf547950b7" + integrity sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg== + dependencies: + "@inquirer/core" "^7.0.0" + "@inquirer/type" "^1.2.0" + +"@inquirer/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-7.0.0.tgz#18d2d2bb5cc6858765b4dcf3dce544ad15898e81" + integrity sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA== + dependencies: + "@inquirer/type" "^1.2.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.11.16" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + figures "^3.2.0" + mute-stream "^1.0.0" + run-async "^3.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +"@inquirer/type@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.2.0.tgz#a569613628a881c2104289ca868a7def54e5c49d" + integrity sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA== + +"@intlify/bundle-utils@^7.4.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.5.0.tgz#fb50947c4e9997228a8abd5775e57a1202f71b09" + integrity sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q== + dependencies: + "@intlify/message-compiler" "^9.4.0" + "@intlify/shared" "^9.4.0" + acorn "^8.8.2" + escodegen "^2.0.0" + estree-walker "^2.0.2" + jsonc-eslint-parser "^2.3.0" + magic-string "^0.30.0" + mlly "^1.2.0" + source-map-js "^1.0.1" + yaml-eslint-parser "^1.2.2" + +"@intlify/core-base@9.9.1", "@intlify/core-base@^9.1.9": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.9.1.tgz#97ff0a98bf416c3f895e2a4fbcb0da353326b71a" + integrity sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA== + dependencies: + "@intlify/message-compiler" "9.9.1" + "@intlify/shared" "9.9.1" + +"@intlify/eslint-plugin-vue-i18n@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-2.0.0.tgz#7308327452742c07e4aef8735f6a4b17cefd58f5" + integrity sha512-ECBD0TvQNa56XKyuM6FPIGAAl7MP6ODcgjBQJrzucNxcTb8fYTWmZ+xgBuvmvAtA0iE0D4Wp18UMild2N0bGyw== + dependencies: + "@eslint/eslintrc" "^1.2.0" + "@intlify/core-base" "^9.1.9" + "@intlify/message-compiler" "^9.1.9" + debug "^4.3.1" + glob "^8.0.0" + ignore "^5.0.5" + is-language-code "^3.1.0" + js-yaml "^4.0.0" + json5 "^2.1.3" + jsonc-eslint-parser "^2.0.0" + lodash "^4.17.11" + parse5 "^7.0.0" + semver "^7.3.4" + vue-eslint-parser "^9.0.0" + yaml-eslint-parser "^1.0.0" + +"@intlify/message-compiler@9.9.1", "@intlify/message-compiler@^9.1.9", "@intlify/message-compiler@^9.4.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz#4cd9c5a408be27784928e4cd57a77ea6ddb17e56" + integrity sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA== + dependencies: + "@intlify/shared" "9.9.1" + source-map-js "^1.0.2" + +"@intlify/shared@9.9.1", "@intlify/shared@^9.4.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.9.1.tgz#b602d012b35f6c336b29a8098296dfac96a005f5" + integrity sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA== + +"@intlify/unplugin-vue-i18n@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-2.0.0.tgz#5b087e17b4eb4381d0a111cd89df4037880e932f" + integrity sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg== + dependencies: + "@intlify/bundle-utils" "^7.4.0" + "@intlify/shared" "^9.4.0" + "@rollup/pluginutils" "^5.0.2" + "@vue/compiler-sfc" "^3.2.47" + debug "^4.3.3" + fast-glob "^3.2.12" + js-yaml "^4.1.0" + json5 "^2.2.3" + pathe "^1.0.0" + picocolors "^1.0.0" + source-map-js "^1.0.2" + unplugin "^1.1.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@mswjs/cookies@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b" + integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw== + +"@mswjs/interceptors@^0.25.16": + version "0.25.16" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.25.16.tgz#7955fbb8da479bc691df117dd4c8d889e507ecc2" + integrity sha512-8QC8JyKztvoGAdPgyZy49c9vSHHAZjHagwl4RY9E8carULk8ym3iTaiawrT1YoLF/qb449h48f71XDPgkUSOUg== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.2.1" + strict-event-emitter "^0.5.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + +"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.24" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" + integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/plugin-replace@^5.0.1": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" + integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.30.3" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" + integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== + +"@rollup/rollup-android-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" + integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== + +"@rollup/rollup-darwin-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" + integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== + +"@rollup/rollup-darwin-x64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" + integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== + +"@rollup/rollup-linux-arm-gnueabihf@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" + integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== + +"@rollup/rollup-linux-arm64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" + integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== + +"@rollup/rollup-linux-arm64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" + integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== + +"@rollup/rollup-linux-riscv64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" + integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== + +"@rollup/rollup-linux-x64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" + integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== + +"@rollup/rollup-linux-x64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" + integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== + +"@rollup/rollup-win32-arm64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" + integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== + +"@rollup/rollup-win32-ia32-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" + integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== + +"@rollup/rollup-win32-x64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" + integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== + +"@sentry-internal/tracing@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.47.0.tgz#45e92eb4c8d049d93bd4fab961eaa38a4fb680f3" + integrity sha512-udpHnCzF8DQsWf0gQwd0XFGp6Y8MOiwnl8vGt2ohqZGS3m1+IxoRLXsSkD8qmvN6KKDnwbaAvYnK0z0L+AW95g== + dependencies: + "@sentry/core" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" + tslib "^1.9.3" + +"@sentry/browser@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.47.0.tgz#c0d10f348d1fb9336c3ef8fa2f6638f26d4c17a8" + integrity sha512-L0t07kS/G1UGVZ9fpD6HLuaX8vVBqAGWgu+1uweXthYozu/N7ZAsakjU/Ozu6FSXj1mO3NOJZhOn/goIZLSj5A== + dependencies: + "@sentry-internal/tracing" "7.47.0" + "@sentry/core" "7.47.0" + "@sentry/replay" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" + tslib "^1.9.3" + +"@sentry/core@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.47.0.tgz#6a723d96f64009a9c1b9bc44e259956b7eca0a3f" + integrity sha512-EFhZhKdMu7wKmWYZwbgTi8FNZ7Fq+HdlXiZWNz51Bqe3pHmfAkdHtAEs0Buo0v623MKA0CA4EjXIazGUM34XTg== + dependencies: + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" + tslib "^1.9.3" + +"@sentry/replay@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.47.0.tgz#d2fc8fd3be2360950497426035d1ba0bd8a97b8f" + integrity sha512-BFpVZVmwlezZ83y0L43TCTJY142Fxh+z+qZSwTag5HlhmIpBKw/WKg06ajOhrYJbCBkhHmeOvyKkxX0jnc39ZA== + dependencies: + "@sentry/core" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" + +"@sentry/tracing@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.47.0.tgz#5f665cec7ab1703e3d0250da9284a9d8dc2eb604" + integrity sha512-hJCpKdekwaFNbCVXxfCz5IxfSEJIKnkPmRSVHITOm5VhKwq2e5kmy4Rn6bzSETwJFSDE8LGbR/3eSfGTqw37XA== + dependencies: + "@sentry-internal/tracing" "7.47.0" + +"@sentry/types@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.47.0.tgz#fd07dbec11a26ae861532a9abe75bd31663ca09b" + integrity sha512-GxXocplN0j1+uczovHrfkykl9wvkamDtWxlPUQgyGlbLGZn+UH1Y79D4D58COaFWGEZdSNKr62gZAjfEYu9nQA== + +"@sentry/utils@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.47.0.tgz#e62fdede15e45387b40c9fa135feba48f0960826" + integrity sha512-A89SaOLp6XeZfByeYo2C8Ecye/YAtk/gENuyOUhQEdMulI6mZdjqtHAp7pTMVgkBc/YNARVuoa+kR/IdRrTPkQ== + dependencies: + "@sentry/types" "7.47.0" + tslib "^1.9.3" + +"@sentry/vue@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-7.47.0.tgz#2a930280e1f594260f33be5c41ac69ade5e004b5" + integrity sha512-ZaiddqyjMH5PAhe3JMw5Xy4vO3wvc97JzmvLnZ3qHkA69hQ1yFDtVhncscWeVtn5r0N9D4+VxUOHMCpDFNyATw== + dependencies: + "@sentry/browser" "7.47.0" + "@sentry/core" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" + tslib "^1.9.3" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== + dependencies: + type-detect "4.0.8" + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@sinonjs/fake-timers@^11.2.2": + version "11.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz#50063cc3574f4a27bd8453180a04171c85cc9699" + integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@sinonjs/samsam@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" + integrity sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw== + dependencies: + "@sinonjs/commons" "^2.0.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/samsam@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" + integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== + dependencies: + "@sinonjs/commons" "^2.0.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/text-encoding@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" + integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@tauri-apps/api@2.0.0-beta.0": + version "2.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.0.tgz#36b10e6f459fd125530ac083262a355b84ce9b95" + integrity sha512-WLoh/Vk8cgY7XrJV7Vpb6PssReBZWQCATfYBb1aCRDk+sp0NyPwumx6fZ2ECAKzAcs3OeanluwZcajruIW4CPQ== + +"@tauri-apps/cli-darwin-arm64@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz#ad90a2b82dc0b3f2e08b4bcff2d95797120fc9ea" + integrity sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw== + +"@tauri-apps/cli-darwin-x64@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz#8212d9d2c0d4492f23e4562588c2b1113cb6cd50" + integrity sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg== + +"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz#9713c073b473a9dee8c4b4951e5aa6e0e87febf5" + integrity sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA== + +"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz#81d83894c3d08c52698da700f127d9d35dc2128a" + integrity sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g== + +"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz#5239d2dc67e1dafac6a9deb64054028e099957e7" + integrity sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q== + +"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz#639c801e431816f1548c5a6a0e63b8449cc80db4" + integrity sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw== + +"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz#d0e07f10ab9de95d117acce1d9787eb6a625013a" + integrity sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ== + +"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz#9b7e964413031cab6bc938468983e4bb80b44d38" + integrity sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A== + +"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz#7c390f30135e9c26b6685296bb7890447a92a5f7" + integrity sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ== + +"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz#a82890bcd8b15feded016a2bfa51a1d199dc17f5" + integrity sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ== + +"@tauri-apps/cli@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz#d9e42dd2d2f9319dffcceacb82d18e19b4acf840" + integrity sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw== + optionalDependencies: + "@tauri-apps/cli-darwin-arm64" "2.0.0-beta.1" + "@tauri-apps/cli-darwin-x64" "2.0.0-beta.1" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.1" + "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.1" + "@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.1" + "@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.1" + "@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.1" + "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.1" + "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.1" + "@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.1" + +"@types/cookie@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" + integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== + +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + +"@types/diff@5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" + integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ== + +"@types/dompurify@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-3.0.5.tgz#02069a2fcb89a163bacf1a788f73cb415dd75cb7" + integrity sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg== + dependencies: + "@types/trusted-types" "*" + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/glob@5 - 7": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/jquery@*", "@types/jquery@3.5.29": + version "3.5.29" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" + integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== + dependencies: + "@types/sizzle" "*" + +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash-es@4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/moxios@0.4.17": + version "0.4.17" + resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.17.tgz#3a2084b9b11713dde0da8c681db642936d3edf40" + integrity sha512-Ef7VE+vfISBbxWMOl40doJpHGpy5lTYJQwWHAy9ah1lrRnsVd+eNt6NjJ2QTAotHpQ7krVrZ3lp8hnxUxvdGuw== + dependencies: + axios ">=0.13.0" + +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^20.11.16": + version "20.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== + dependencies: + undici-types "~5.26.4" + +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/parse5@^5": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/qs@6.9.10": + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/semantic-ui-accordion@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.5.tgz#09591490950492705853410f00bf7d8af66e11f9" + integrity sha512-wDm0lvxFIW3TPolsj3gxoHwi6cQpQvaQJq2Tp7aIt5e2USE10ARrDMPWpNTF2WVkBKd6WoUoNb/Nyj8eblOnsA== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-api@*": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-api/-/semantic-ui-api-2.2.7.tgz#fc6e1ceac911f76682bdbfd659bfb6cbaf5f264d" + integrity sha512-QO11dj4pWs3Wph1z8cL80t1u9qpZB45geUKsCsMTovdJRFV3yosOjsHqHhsEzLFVdt6rt3ZmGhXsZRDIECi0SA== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-checkbox@*": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.6.tgz#b971561563a4bc264b039a0b4e7b5358a006986a" + integrity sha512-N6lHQfr3wsSXATiKW0dx6sQkd8i7BZDkehbMva9wo6XxBPBN13PoeUKzwBjrFNXjVjy8sMTbXgsWvM30cAf+Dg== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-dimmer@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dimmer/-/semantic-ui-dimmer-2.2.5.tgz#3be07a65857398a0ec8e4dd127c8b3bac393be06" + integrity sha512-0p0EMwJ1G/Vi7Vti9U+HdMk6aXhInQ6K84KHj7gSM1YI4qvFwed0nsm4CGR8IXUa6SkS8Da0mSVcCLlPduv/lg== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-dropdown@*": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.9.tgz#146b97d8bf690ddc0633ab67ad12e17e1952bc04" + integrity sha512-xexijVzkwUNPNfuTLuQETcKqGwKjJFb9ymvpVu/UFy+PNHJRz08rV3SZFdb73Gh+pEJC+8aN9op5ZWiHrB/6NA== + dependencies: + "@types/jquery" "*" + "@types/semantic-ui-api" "*" + +"@types/semantic-ui-embed@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-embed/-/semantic-ui-embed-2.2.5.tgz#ff7d9ede0cb5d182de555212051e4519a7f62a6b" + integrity sha512-4Cb+191etZwFqG9aV91v7zFQ32P7hzwwmFRP5DchQV+j4b6MJRFSzm3QQuuAez0YtuTKhThjvS/rEnh6DJa1wg== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-form@*": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-form/-/semantic-ui-form-2.2.9.tgz#22ac6bae981300a11e8c65a273953f7e7d89068d" + integrity sha512-EcURdJbpd/f1zcIVoeH+lI+W3fDKChksF7KE7jirGlg77uiMDbOFSlxJaXwIEYxU+vwZRXlSib8Hqegkxk/mCg== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-modal@*": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.7.tgz#12a7a502876109daa0a2638d9f2923a16da30772" + integrity sha512-vkazvqzPrutKH1jFt+xtpEmcdkLTZojb0RmW/zpS4MsLl7lgvFywfAjewdQgsFW5AEOku4KwrWoBTl7brh35/g== + dependencies: + "@types/jquery" "*" + "@types/semantic-ui-dimmer" "*" + +"@types/semantic-ui-nag@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-nag/-/semantic-ui-nag-2.2.5.tgz#aacd88ee78eb51477e2818490eccfd5fe4a025c4" + integrity sha512-ScjA2OrsPyxssg+1UpYpBoYQf1ruk5gExU08DEjJcrbEWYCOYa4+NbA/cUpsNogf6l0lgePdlBH3nJVezIY89Q== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-popup@*": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.7.tgz#3b28849e09b815283f0fd765dc6480a31f4c3857" + integrity sha512-QeiyPFa5bHYHBGIVI4dDombm/dgLL2uJSBru8tq6DXasohxlBeZxUe08a9viAOWCyi91+FGi3KR6elPbd0u2Ag== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-progress@*": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-progress/-/semantic-ui-progress-2.2.6.tgz#bbb573577f27a0ecbf8457eb5bdd20134f7bdd88" + integrity sha512-HfWyQM6B4CmQFj4Oabh+Sah4HbePM71pKZ0eplXyv/0a8pQlQaX+gW3RSz8lG32IXEl0Lz0G4IUn97qzOPjJxQ== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-rating@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-rating/-/semantic-ui-rating-2.2.5.tgz#d1c1de73bebf3ba829e82f77f2dd68409a236912" + integrity sha512-Oy1Wt6qKxq1WczW37NymYtne2gWRhxbRKKDrCl+va7fG6HAR+0hjzv7EddfSCOWwn/o7srQxjLKFj7FZxdi1JQ== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-search@*": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.7.tgz#87388e5e6a33845f6983a9f4315449bd1be3eafa" + integrity sha512-Qay8/dFM5Z+7TM1nZzDnpkv1ZvxtY+vpdrqG5kjnX3XtZ69jm9y44kHDUr+reDEZAMrOCR7gxWuDuhxwRDuA0g== + dependencies: + "@types/jquery" "*" + "@types/semantic-ui-api" "*" + +"@types/semantic-ui-shape@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-shape/-/semantic-ui-shape-2.2.5.tgz#3749a32c1e958dc32cd8f9ea712e5ae332a3ad34" + integrity sha512-4FWI3qjh2X3uDwST2NCww7w0P7dtjnak33G9ENdIepAa7JXqrmephg6BVB5MBGYzw11DUCtEL7x7ka9iToZ2WA== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-sidebar@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-sidebar/-/semantic-ui-sidebar-2.2.5.tgz#e0d8092fdbc7a6d8fa8caa50a18db1ea70c9e475" + integrity sha512-9oniXmN/rLTc2b2RO/2unsc0nHwvj6P9m6bEjxFgveMS8NnuiljF7skypJW0fSN37zHkb9yGxcP3jJyqsRNunQ== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-site@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-site/-/semantic-ui-site-2.2.5.tgz#1973945cf5f9f891e5e42dd0a401dc30dfde15f6" + integrity sha512-hyL79qPrZM6bL7etQUE8SZYhgpXdlZth87yFYEhMHDENhGx5LiR5vRH+C78YDmf3ZemIUUKvY1US52VlfYaDhg== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-sticky@*": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-sticky/-/semantic-ui-sticky-2.2.6.tgz#97f71371688c24bbc3f9b0057537c5252fb580b6" + integrity sha512-k/In4CD6xhVK/VeZCaIdKBR35BaB5VKSl9Vw7fRGTnr5VK9gjRDs0pBJyH2IDzbUcJ2DitzMpMcIwX4Varyp2g== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-tab@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-tab/-/semantic-ui-tab-2.2.5.tgz#a9d518e76f0557a10af81661a2cce677a0ca6793" + integrity sha512-r8NHOqSrny5fTE6MsSrTcZp1eN2lpxYgWMfZXczH1FDsSaFfO1MF7FNJbB6XHlJO6hnYCfx58KxhxerPyPkDqg== + dependencies: + "@types/jquery" "*" + "@types/semantic-ui-api" "*" + +"@types/semantic-ui-transition@*": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-transition/-/semantic-ui-transition-2.2.5.tgz#86cf536ed06754b4cd04544672d92154edef7ca7" + integrity sha512-MId2N23h6Jki2hkVw1m/JHHQFHoYrOJlsLsfQW5ZE0Pdcq0RETzcM7UWwaBjHX79EtjohGsewDKAvlVP92DbAg== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui-visibility@*": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-visibility/-/semantic-ui-visibility-2.2.6.tgz#a216881692d75d72f158a88163bf4a8b0490c8e9" + integrity sha512-b4dxITsys3mMwXyPzI6b21XwS7gHeTnB2ztdBvtbSBIO1SRxhHy0qW0sh+U4pK8xsXcqzFbTLr3/gO9A/kDdDA== + dependencies: + "@types/jquery" "*" + +"@types/semantic-ui@2.2.9": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.9.tgz#9616e7a4e05c1eac421d7bbe464467b2611047b9" + integrity sha512-VS7BTgdQEzv1D+E/b9Y795b/i0AZ4bSgzZhSASVtvzudxU8sufXdFHazPGtBgVH8IoLkPoYNoNkgQ1Q3aFEi6g== + dependencies: + "@types/jquery" "*" + "@types/semantic-ui-accordion" "*" + "@types/semantic-ui-api" "*" + "@types/semantic-ui-checkbox" "*" + "@types/semantic-ui-dimmer" "*" + "@types/semantic-ui-dropdown" "*" + "@types/semantic-ui-embed" "*" + "@types/semantic-ui-form" "*" + "@types/semantic-ui-modal" "*" + "@types/semantic-ui-nag" "*" + "@types/semantic-ui-popup" "*" + "@types/semantic-ui-progress" "*" + "@types/semantic-ui-rating" "*" + "@types/semantic-ui-search" "*" + "@types/semantic-ui-shape" "*" + "@types/semantic-ui-sidebar" "*" + "@types/semantic-ui-site" "*" + "@types/semantic-ui-sticky" "*" + "@types/semantic-ui-tab" "*" + "@types/semantic-ui-transition" "*" + "@types/semantic-ui-visibility" "*" + +"@types/semver@^7.5.0": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== + +"@types/showdown@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.6.tgz#3d7affd5f971b4a17783ec2b23b4ad3b97477b7e" + integrity sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ== + +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@*", "@types/sizzle@^2.3.2": + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== + +"@types/statuses@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315" + integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== + +"@types/trusted-types@*", "@types/trusted-types@^2.0.2": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + +"@types/vue-virtual-scroller@npm:@earltp/vue-virtual-scroller": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@earltp/vue-virtual-scroller/-/vue-virtual-scroller-1.0.1.tgz#75116ef9b091457a654d92ff0688e991b3cd9e8a" + integrity sha512-7UsmP2JALnkfWlheuWRDywuBUTLJcVPE86X5ogA3djUmYFybE6qximgQ7OgyJnrKLteWR7+1Cp0GUXHhdDKaDQ== + +"@types/web-bluetooth@^0.0.17": + version "0.0.17" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" + integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== + +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" + integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/type-utils" "6.20.0" + "@typescript-eslint/utils" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/eslint-plugin@^6.7.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.7.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" + integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== + dependencies: + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" + integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== + dependencies: + "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/utils" "6.20.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" + integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" + integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== + dependencies: + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/visitor-keys" "6.20.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" + integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.20.0" + "@typescript-eslint/types" "6.20.0" + "@typescript-eslint/typescript-estree" "6.20.0" + semver "^7.5.4" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.20.0": + version "6.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" + integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== + dependencies: + "@typescript-eslint/types" "6.20.0" + eslint-visitor-keys "^3.4.1" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@vitejs/plugin-vue@5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" + integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== + +"@vitest/coverage-v8@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz#cf5ed8eb5bff6658cea126d0f8fcd2872de0b59f" + integrity sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg== + dependencies: + "@ampproject/remapping" "^2.2.1" + "@bcoe/v8-coverage" "^0.2.3" + debug "^4.3.4" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-report "^3.0.1" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.1.6" + magic-string "^0.30.5" + magicast "^0.3.3" + picocolors "^1.0.0" + std-env "^3.5.0" + test-exclude "^6.0.0" + v8-to-istanbul "^9.2.0" + +"@vitest/expect@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.1.tgz#d4c14b89c43a25fd400a6b941f51ba27fe0cb918" + integrity sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw== + dependencies: + "@vitest/spy" "1.3.1" + "@vitest/utils" "1.3.1" + chai "^4.3.10" + +"@vitest/runner@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.1.tgz#e7f96cdf74842934782bfd310eef4b8695bbfa30" + integrity sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg== + dependencies: + "@vitest/utils" "1.3.1" + p-limit "^5.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.1.tgz#193a5d7febf6ec5d22b3f8c5a093f9e4322e7a88" + integrity sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ== + dependencies: + magic-string "^0.30.5" + pathe "^1.1.1" + pretty-format "^29.7.0" + +"@vitest/spy@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.1.tgz#814245d46d011b99edd1c7528f5725c64e85a88b" + integrity sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig== + dependencies: + tinyspy "^2.2.0" + +"@vitest/utils@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.1.tgz#7b05838654557544f694a372de767fcc9594d61a" + integrity sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ== + dependencies: + diff-sequences "^29.6.3" + estree-walker "^3.0.3" + loupe "^2.3.7" + pretty-format "^29.7.0" + +"@volar/language-core@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.0.tgz#fb6b3ad22e75c53a1ae4d644c4a788b47d411b9d" + integrity sha512-ddyWwSYqcbEZNFHm+Z3NZd6M7Ihjcwl/9B5cZd8kECdimVXUFdFi60XHWD27nrWtUQIsUYIG7Ca1WBwV2u2LSQ== + dependencies: + "@volar/source-map" "1.10.0" + +"@volar/language-core@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" + integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== + dependencies: + "@volar/source-map" "1.4.1" + +"@volar/language-core@~1.10.0": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.10.tgz#9c240a36dd4007b9c4f00739f6cecb81da54a49e" + integrity sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw== + dependencies: + "@volar/source-map" "1.10.10" + +"@volar/source-map@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.0.tgz#2413eb190ce69fc1a382f58524a3f82306668024" + integrity sha512-/ibWdcOzDGiq/GM1JU2eX8fH1bvAhl66hfe8yEgLEzg9txgr6qb5sQ/DEz5PcDL75tF5H5sCRRwn8Eu8ezi9mw== + dependencies: + muggle-string "^0.3.1" + +"@volar/source-map@1.10.10", "@volar/source-map@~1.10.0": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.10.tgz#ec807fe60b8afe29e19bf6d1c90d2e76502df541" + integrity sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg== + dependencies: + muggle-string "^0.3.1" + +"@volar/source-map@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" + integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== + dependencies: + muggle-string "^0.2.2" + +"@volar/typescript@1.4.1-patch.2": + version "1.4.1-patch.2" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" + integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== + dependencies: + "@volar/language-core" "1.4.1" + +"@volar/vue-language-core@1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" + integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== + dependencies: + "@volar/language-core" "1.4.1" + "@volar/source-map" "1.4.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/compiler-sfc" "^3.3.0" + "@vue/reactivity" "^3.3.0" + "@vue/shared" "^3.3.0" + minimatch "^9.0.0" + muggle-string "^0.2.2" + vue-template-compiler "^2.7.14" + +"@volar/vue-typescript@1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" + integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== + dependencies: + "@volar/typescript" "1.4.1-patch.2" + "@volar/vue-language-core" "1.6.5" + +"@vue-macros/api@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@vue-macros/api/-/api-0.8.3.tgz#16b9c907ddac65d226f958af5c7d82109846a723" + integrity sha512-qpKB+2YnhRBMoz/FaDEJZfH2x7t3M72lHFdfrjIVeGvQzhOO5wMNY3fNjmRRB9tGJM8SSGd1gUYPZHK0ZSOVIw== + dependencies: + "@babel/types" "^7.22.5" + "@vue-macros/common" "1.7.0" + resolve.exports "^2.0.2" + +"@vue-macros/api@0.8.6": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@vue-macros/api/-/api-0.8.6.tgz#5e40f50c1ac6d258bc6171fc2e08b1530bdd8492" + integrity sha512-g9ZO/z+LvSo4c0cIsLEJ+U4ZbCKYo1o6uJ87fry/+NZ6DeebOXuh5yJ0xkrpz+FCvLK3LsLtG/set467EstEuQ== + dependencies: + "@babel/types" "^7.22.17" + "@vue-macros/common" "1.8.0" + resolve.exports "^2.0.2" + +"@vue-macros/better-define@1.6.9": + version "1.6.9" + resolved "https://registry.yarnpkg.com/@vue-macros/better-define/-/better-define-1.6.9.tgz#27aca6f97a184c76c59b676ed2aa2150f97f2762" + integrity sha512-3D4P+J7BX0UKckMC1Fbz+JmgTTJ/hKC0RrhHZIMqfjgjVQI1UDxLMb8a02gBSVyI+4OyX1KotHnahYAtwj7plw== + dependencies: + "@vue-macros/api" "0.8.3" + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/chain-call@^0.1.3": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@vue-macros/chain-call/-/chain-call-0.1.6.tgz#b6ffe0562aec50b95e7a57e74672cbb81aef36c3" + integrity sha512-ACUnx9TbPvjjn3aCxpqN2yPC/1wyZTdJnEfh+KLn2rgl5mQUFvi/oOs4rKz/koPSU76fYhPnhbVK4oDv/wQMwg== + dependencies: + "@vue-macros/common" "1.8.0" + unplugin "^1.4.0" + +"@vue-macros/common@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.7.0.tgz#67e4ee8831ad70383c9496cebeb23850e6a6e3c5" + integrity sha512-177tzAjvEiFxAsOM+zd8EWCfAdneePoZroGg6R5QhMcycC28r+2k4wyzrjupjkDBgx7KAZkJ/KzkSfuEi31U0A== + dependencies: + "@babel/types" "^7.22.5" + "@rollup/pluginutils" "^5.0.2" + "@vue/compiler-sfc" "^3.3.4" + ast-kit "^0.9.5" + local-pkg "^0.4.3" + magic-string-ast "^0.3.0" + +"@vue-macros/common@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.8.0.tgz#885f1e7095b3b4e32773a35fd8f768f82a6c0e5c" + integrity sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA== + dependencies: + "@babel/types" "^7.22.17" + "@rollup/pluginutils" "^5.0.4" + "@vue/compiler-sfc" "^3.3.4" + ast-kit "^0.11.2" + local-pkg "^0.4.3" + magic-string-ast "^0.3.0" + +"@vue-macros/common@~1.7.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@vue-macros/common/-/common-1.7.2.tgz#e160b5d7f8089c97053284c283a7fbe33706e6a7" + integrity sha512-0/2A4kWLTCNEx+DDQKLvs7zXpfjgAbGBZ58SIvDN1DjGXhG4WaIUZtgMqzA6bvc5dNN7RaOatZYubkVumwmjWA== + dependencies: + "@babel/types" "^7.22.10" + "@rollup/pluginutils" "^5.0.3" + "@vue/compiler-sfc" "^3.3.4" + ast-kit "^0.10.0" + local-pkg "^0.4.3" + magic-string-ast "^0.3.0" + +"@vue-macros/define-emit@^0.1.13": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@vue-macros/define-emit/-/define-emit-0.1.16.tgz#67c44b37085bb529f72045c7bc5438f33826065a" + integrity sha512-8UWGYzopmV+fHFBesqHBPkL76Utzd+br1kjWhx655VLE4IbgnCJNRSBXAsMmbsVGqVFSS3jvFVcpz7J8O0N5rw== + dependencies: + "@vue-macros/api" "0.8.6" + "@vue-macros/common" "1.8.0" + rollup "^3.29.1" + unplugin "^1.4.0" + +"@vue-macros/define-models@1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@vue-macros/define-models/-/define-models-1.0.13.tgz#c7af107e92b78366223a635253be4f3e9851ab09" + integrity sha512-1GphMtJsR5+Dqcarm3f8pKYMHSigEiqGqijPp4njQT6O+H+i5Ja6kcqtqre5N1/fNRRgxe4l2KGKyk44IstmMA== + dependencies: + "@vue-macros/common" "1.7.0" + ast-walker-scope "^0.5.0" + unplugin "^1.4.0" + +"@vue-macros/define-prop@^0.2.4": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@vue-macros/define-prop/-/define-prop-0.2.8.tgz#e73c95dff60a41992aa157b98fe666e0e56c4f2d" + integrity sha512-ML0bHlOQ2NvxGTgHnGyWlCisb97WmTHKzcKYKYuK+YBTi5h7kimTft4W1Gnw38P1sKIdnknj393qSVHEg7MASw== + dependencies: + "@vue-macros/api" "0.8.6" + "@vue-macros/common" "1.8.0" + rollup "^3.29.1" + unplugin "^1.4.0" + +"@vue-macros/define-props-refs@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@vue-macros/define-props-refs/-/define-props-refs-1.1.7.tgz#989d5418f738eb78d1736999c3c646421f97506c" + integrity sha512-EO0V/mJa38KySRKB9k1zVcCplSim/wSNZlBJEkSSO+s1LATPmb26NFGLa5vIOzfUdYbGZ3gqTFINa+lWorPf6g== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/define-props@1.0.17": + version "1.0.17" + resolved "https://registry.yarnpkg.com/@vue-macros/define-props/-/define-props-1.0.17.tgz#7aff839a643394f7a3511256a8b92e1a6bbb6341" + integrity sha512-vHan0LXzl+igYLEQKntvaXH7bfGMZTFp3kTgRpj40nohcYIgDWw53s9wwsTJebo49eFHNXWSZDR4UXdye+Akeg== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/define-render@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@vue-macros/define-render/-/define-render-1.4.0.tgz#8936c2eb1021205f9e7aff7cf211fa450f72b90d" + integrity sha512-RLETg7Lu8BQx0ArYTLF14nS1UB/a1dGwbe/yyJLVmmwW1On/TbGzfR2ibSJNe7B6kNWfxN8cPxqLID8IehTP2w== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/define-slots@1.0.12": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@vue-macros/define-slots/-/define-slots-1.0.12.tgz#a4a0a863c774e7071497e48323eee991899ba39d" + integrity sha512-q7zW5hj3QxFbAzl7as5CjPzILAjM9nKk7dpirgF18YT/gWVnIEwapx9HFyvw/L6CxIA5ErBcMWRKTyYL68mDgg== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/devtools@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@vue-macros/devtools/-/devtools-0.1.4.tgz#c27432a090a524fecd13e0a38e2b9c0f27b74061" + integrity sha512-md5WzjC4qgOOjnYKaqEfZknSeiEeGX13k/Hqi+aqvb+kIF0F6/5oxroqaPQemuNN/gUNMn8ZfA/JmcOYxGVFcQ== + dependencies: + sirv "^2.0.3" + vue "^3.3.7" + +"@vue-macros/export-expose@0.0.10": + version "0.0.10" + resolved "https://registry.yarnpkg.com/@vue-macros/export-expose/-/export-expose-0.0.10.tgz#98fbe9e99b2d817970d2215d3156e1f7fdd3c520" + integrity sha512-ZlFwS6gWxtbmmOA1Lb3+9ehCxDRwcBL+2XjXaeD8gjct8dvsnWXMO5TRU0sKYO09unj3bkQd3mSF050/R27DYw== + dependencies: + "@vue-macros/common" "1.7.0" + "@vue/compiler-sfc" "^3.3.4" + unplugin "^1.4.0" + +"@vue-macros/export-props@0.3.15": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@vue-macros/export-props/-/export-props-0.3.15.tgz#750c1e9416acd9032ba5d51b13b7d329bc0e3110" + integrity sha512-a0bhLt0lhmshuEsiPpaCn1kw6Qv/f7iQsEFTSnMgNvFXRrziv/YcEHoz9PZ79f4HAKwLgsj9AQfRyABJl3B9wg== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/hoist-static@1.4.9": + version "1.4.9" + resolved "https://registry.yarnpkg.com/@vue-macros/hoist-static/-/hoist-static-1.4.9.tgz#a8d13d9d0166cd057c819cf0b2546c68891a76e5" + integrity sha512-STxtEXmGFoERW/jvDw/uS7Ds5tR9U8dlTsTu1m3LTQKiWANzu33WICRFifVI39cUL5TVFujN3yEcdIGvtfbRqw== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/jsx-directive@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@vue-macros/jsx-directive/-/jsx-directive-0.5.0.tgz#d3cafddd74370935244d4bff833b52a2287190df" + integrity sha512-mrajG1U5zpi3yvUVvu2fw70DMc91qw3Vura8n4Ktoqk35bEAnus7r4+HijYH7Wsc421M5BmbQlPNu3U1S3sLuQ== + dependencies: + "@vue-macros/common" "~1.7.0" + unplugin "^1.4.0" + +"@vue-macros/named-template@0.3.16": + version "0.3.16" + resolved "https://registry.yarnpkg.com/@vue-macros/named-template/-/named-template-0.3.16.tgz#3840c1151ff921c6831c42f3f63242c71dc1ec81" + integrity sha512-/VCHjs6teUa7YntAEY7Iz1f+EvrVcG2KkzlUPS8EB/g8lM8Z2inyFEB3ohD8c4gGM6hKg3LtwUsWaWGaFHEmDg== + dependencies: + "@vue-macros/common" "1.7.0" + "@vue/compiler-dom" "^3.3.4" + unplugin "^1.4.0" + +"@vue-macros/reactivity-transform@0.3.19": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@vue-macros/reactivity-transform/-/reactivity-transform-0.3.19.tgz#466b4001c200d885778ef87de820bd32226c7c0e" + integrity sha512-HUqMu8GyGJG89K3a64OxZJknT/Jii8sTcA1fB6ommTU2T7eSGkBalipsSRvbJAhAkl4SYcVLJk0HX18hv+GA+g== + dependencies: + "@babel/parser" "^7.22.7" + "@vue-macros/common" "1.7.0" + "@vue/compiler-core" "^3.3.4" + "@vue/shared" "^3.3.4" + magic-string "^0.30.2" + unplugin "^1.4.0" + +"@vue-macros/setup-block@0.2.15": + version "0.2.15" + resolved "https://registry.yarnpkg.com/@vue-macros/setup-block/-/setup-block-0.2.15.tgz#98251a5ac6b85e281134129a0e93ebadedd19528" + integrity sha512-rhbJrxXFJ+GRqrR5NnqU8pMELLbAz80xc/+USGu4KzsuVyiklyQpy7jVEKRXDrm9rqlL09ia/sLrn375eCQDtA== + dependencies: + "@vue-macros/common" "1.7.0" + "@vue/compiler-dom" "^3.3.4" + unplugin "^1.4.0" + +"@vue-macros/setup-component@0.16.16": + version "0.16.16" + resolved "https://registry.yarnpkg.com/@vue-macros/setup-component/-/setup-component-0.16.16.tgz#191c798942403d61b17944b6993d379c6203f7e1" + integrity sha512-oscrS6MlCAbvmtXxhgQdKRPNoa+5cCaNM43XUjvMb84OGtzFRB3rvRlDOVh+ylW3EdGkuqAIlpS0ZBHdntlw5Q== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/setup-sfc@0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@vue-macros/setup-sfc/-/setup-sfc-0.16.0.tgz#e41db3e68d07dd45c798990af0d1d74d31a2734e" + integrity sha512-H/bOmDXYGA4sFQRQmCAw8oCkgthdc8i6/VjLgQGngwAFGNUYf8Fin3mQs6r8L1N3jXsnu7nfnUFDsc8JYyOllg== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/short-emits@1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@vue-macros/short-emits/-/short-emits-1.4.7.tgz#4bbdeed1dd5616e5509f2b862f3c0cdbf1f0cd70" + integrity sha512-yWrQO2g+VTrWXeaG7bcwQh+T5AvirFAyAyDS3fzzfa17HRI2Oj9d8t584xqBpr4u+m3rjs/wLgR4S3U0EZd1Mg== + dependencies: + "@vue-macros/common" "1.7.0" + unplugin "^1.4.0" + +"@vue-macros/short-vmodel@1.2.15": + version "1.2.15" + resolved "https://registry.yarnpkg.com/@vue-macros/short-vmodel/-/short-vmodel-1.2.15.tgz#094c6dfe3dc762a7e340d55c80d74810bc2e0d9f" + integrity sha512-mcTaoRUgiM9exCvzxkOJC7JQgfiDs2kcWxF4XoI9d24GBCcldpIoLNmJ71OPihGg9LvJUR7Lgr2F6c4ewaxkiQ== + dependencies: + "@vue-macros/common" "1.7.0" + "@vue/compiler-core" "^3.3.4" + +"@vue-macros/volar@0.13.3": + version "0.13.3" + resolved "https://registry.yarnpkg.com/@vue-macros/volar/-/volar-0.13.3.tgz#4cb1e08cbf3aa056bb2ea6588bf96b5f302a8ddb" + integrity sha512-gvM3UVnV1I0MIMJoY8o0c3ZWjfbX7n3ilEXUdy5kgASwu57yREjUTVWgihKBDqEuBszy2H49SYJgFziuhZ1r1Q== + dependencies: + "@rollup/pluginutils" "^5.0.2" + "@volar/language-core" "1.10.0" + "@vue-macros/common" "1.7.0" + "@vue-macros/define-props" "1.0.17" + "@vue-macros/short-vmodel" "1.2.15" + "@vue/language-core" "1.8.8" + +"@vue/compiler-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz#9fa26f8c81b9b34365f94ce1ed4d0e6e6f94a2ac" + integrity sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/shared" "3.3.11" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-core@3.4.19", "@vue/compiler-core@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.19.tgz#3161b1ede69da00f3ce8155dfab907a3eaa0515e" + integrity sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/shared" "3.4.19" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.0.2" + +"@vue/compiler-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz#36a76ea3a296d41bad133a6912cb0a847d969e4f" + integrity sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw== + dependencies: + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" + +"@vue/compiler-dom@3.4.19", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz#2457e57e978f431e3b5fd11fc50a3e92d5816f9a" + integrity sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA== + dependencies: + "@vue/compiler-core" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/compiler-sfc@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz#acfae240c875d067e0e2c9a4e2d910074408c73b" + integrity sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-ssr" "3.3.11" + "@vue/reactivity-transform" "3.3.11" + "@vue/shared" "3.3.11" + estree-walker "^2.0.2" + magic-string "^0.30.5" + postcss "^8.4.32" + source-map-js "^1.0.2" + +"@vue/compiler-sfc@3.4.19", "@vue/compiler-sfc@^3.2.47", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129" + integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg== + dependencies: + "@babel/parser" "^7.23.9" + "@vue/compiler-core" "3.4.19" + "@vue/compiler-dom" "3.4.19" + "@vue/compiler-ssr" "3.4.19" + "@vue/shared" "3.4.19" + estree-walker "^2.0.2" + magic-string "^0.30.6" + postcss "^8.4.33" + source-map-js "^1.0.2" + +"@vue/compiler-ssr@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz#598942a73b64f2bd3f95908b104a7fbb55fc41a2" + integrity sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg== + dependencies: + "@vue/compiler-dom" "3.3.11" + "@vue/shared" "3.3.11" + +"@vue/compiler-ssr@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz#1f8ee06005ebbaa354f8783fad84e9f7ea4a69c2" + integrity sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw== + dependencies: + "@vue/compiler-dom" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": + version "6.6.1" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83" + integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA== + +"@vue/eslint-config-standard@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-8.0.1.tgz#d6e5f87bf99d142fc7adaaa5c32bc8d6af626ae3" + integrity sha512-+FsTb8kOf2GSbXXTwbigRBRRur/byMbwL6Ijii2JoXW4hsLB4arl9lbgV54OUOV5o20INLHDmBVONO16rP/a1g== + dependencies: + eslint-config-standard "^17.0.0" + eslint-import-resolver-custom-alias "^1.3.0" + eslint-import-resolver-node "^0.3.6" + eslint-plugin-import "^2.26.0" + eslint-plugin-n "^15.2.4" + eslint-plugin-promise "^6.0.0" + +"@vue/eslint-config-typescript@12.0.0": + version "12.0.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz#0ce22d97af5e4155f3f2e7b21a48cfde8a6f3365" + integrity sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg== + dependencies: + "@typescript-eslint/eslint-plugin" "^6.7.0" + "@typescript-eslint/parser" "^6.7.0" + vue-eslint-parser "^9.3.1" + +"@vue/language-core@1.8.8": + version "1.8.8" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.8.tgz#5a8aa8363f4dfacdfcd7808a9926744d7c310ae6" + integrity sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw== + dependencies: + "@volar/language-core" "~1.10.0" + "@volar/source-map" "~1.10.0" + "@vue/compiler-dom" "^3.3.0" + "@vue/reactivity" "^3.3.0" + "@vue/shared" "^3.3.0" + minimatch "^9.0.0" + muggle-string "^0.3.1" + vue-template-compiler "^2.7.14" + +"@vue/reactivity-transform@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz#2bd486f4eff60c8724309925618891e722fcfadc" + integrity sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg== + dependencies: + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" + estree-walker "^2.0.2" + magic-string "^0.30.5" + +"@vue/reactivity@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.11.tgz#91f8e6c9ac60a595a5278c836b197628fd947a0d" + integrity sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g== + dependencies: + "@vue/shared" "3.3.11" + +"@vue/reactivity@3.4.19", "@vue/reactivity@^3.3.0": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.19.tgz#8cf335d97d07881d8184cb23289289dc18b03f60" + integrity sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA== + dependencies: + "@vue/shared" "3.4.19" + +"@vue/runtime-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz#63defba57bc54c1dac68a95b56c2633b1419193d" + integrity sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw== + dependencies: + "@vue/reactivity" "3.3.11" + "@vue/shared" "3.3.11" + +"@vue/runtime-core@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.19.tgz#ef10357fdf3afdf68523b55424541000105e2aeb" + integrity sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw== + dependencies: + "@vue/reactivity" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/runtime-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz#1146d8d280b0fec4d2e18c4a4c8f8121d0cecc09" + integrity sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ== + dependencies: + "@vue/runtime-core" "3.3.11" + "@vue/shared" "3.3.11" + csstype "^3.1.2" + +"@vue/runtime-dom@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz#079141e31d9f47515b9595f29843d51011f88739" + integrity sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g== + dependencies: + "@vue/runtime-core" "3.4.19" + "@vue/shared" "3.4.19" + csstype "^3.1.3" + +"@vue/server-renderer@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz#409aed8031a125791e2143552975ecd1958ad601" + integrity sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A== + dependencies: + "@vue/compiler-ssr" "3.3.11" + "@vue/shared" "3.3.11" + +"@vue/server-renderer@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.19.tgz#e6f8ff5268d0758766ca9835375218924d5f0eb6" + integrity sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw== + dependencies: + "@vue/compiler-ssr" "3.4.19" + "@vue/shared" "3.4.19" + +"@vue/shared@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.11.tgz#f6a038e15237edefcc90dbfe7edb806dd355c7bd" + integrity sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw== + +"@vue/shared@3.4.19", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.19.tgz#28105147811bcf1e6612bf1c9ab0c6d91ada019c" + integrity sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw== + +"@vue/test-utils@2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702" + integrity sha512-BMuoruUFTEqhLoOgsMcgNVMiByYbfHCKGr2C4CPdGtz/affUtDVX5zr1RnPuq0tYSiaqq+Enw5voUpG6JY8Q7g== + +"@vue/tsconfig@0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz#4a61dbd29783d01ddab504276dcf0c2b6988654f" + integrity sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg== + +"@vueuse/core@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-10.3.0.tgz#b2dab7821ef206811b925fc935163c38056fd82b" + integrity sha512-BEM5yxcFKb5btFjTSAFjTu5jmwoW66fyV9uJIP4wUXXU8aR5Hl44gndaaXp7dC5HSObmgbnR2RN+Un1p68Mf5Q== + dependencies: + "@types/web-bluetooth" "^0.0.17" + "@vueuse/metadata" "10.3.0" + "@vueuse/shared" "10.3.0" + vue-demi ">=0.14.5" + +"@vueuse/integrations@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-10.3.0.tgz#765e9505358590f21531998194c6e60a8b23655c" + integrity sha512-Jgiv7oFyIgC6BxmDtiyG/fxyGysIds00YaY7sefwbhCZ2/tjEx1W/1WcsISSJPNI30in28+HC2J4uuU8184ekg== + dependencies: + "@vueuse/core" "10.3.0" + "@vueuse/shared" "10.3.0" + vue-demi ">=0.14.5" + +"@vueuse/math@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/math/-/math-10.3.0.tgz#5f7243498164403b1ad88cc0733f9dcb8710faed" + integrity sha512-egJN5b7Ks1s92XS/DuP/irxC2GyR59BfLm19aeWDHbAXhDgK9L+X/z9fZGobI9U7dZ/2A9nlqf0FeMDgh+oWEA== + dependencies: + "@vueuse/shared" "10.3.0" + vue-demi ">=0.14.5" + +"@vueuse/metadata@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-10.3.0.tgz#14fe6cc909573785f73a56e4d9351edf3830b796" + integrity sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw== + +"@vueuse/router@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/router/-/router-10.3.0.tgz#f0cd64fddba1b2a5af261e933c53808f0faa78f8" + integrity sha512-WCx/BAxO0eInuOcyNRBxDLS16tnNqzdaR6/babg6AUgAIL0TCfmHBh46wJa6hhg+NMGjd6HzCaktxBasp+0c0A== + dependencies: + "@vueuse/shared" "10.3.0" + vue-demi ">=0.14.5" + +"@vueuse/shared@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-10.3.0.tgz#ce6b4b6860e14aaa293025dcf0cbe1036a25869f" + integrity sha512-kGqCTEuFPMK4+fNWy6dUOiYmxGcUbtznMwBZLC1PubidF4VZY05B+Oht7Jh7/6x4VOWGpvu3R37WHi81cKpiqg== + dependencies: + vue-demi ">=0.14.5" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.11.3, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-draft-04@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.6.0, ajv@^8.6.3: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.4, array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +ast-kit@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.10.0.tgz#07096d370d29f86d868a7504875e3a6294b388da" + integrity sha512-8y01XClpURgvxTJmM4AY2oHa1B/6iysALB9yJM1j4ak3Z2ZsnU0ewjDZzqOHdbNdit6hC0DGZNrBqNuCrv51fQ== + dependencies: + "@babel/parser" "^7.22.10" + "@rollup/pluginutils" "^5.0.3" + pathe "^1.1.1" + +ast-kit@^0.11.2: + version "0.11.3" + resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.11.3.tgz#47d420dbdd23b4900531e05285e89f0301d2c41f" + integrity sha512-qdwwKEhckRk0XE22/xDdmU3v/60E8Edu4qFhgTLIhGGDs/PAJwLw9pQn8Rj99PitlbBZbYpx0k/lbir4kg0SuA== + dependencies: + "@babel/parser" "^7.23.5" + "@rollup/pluginutils" "^5.1.0" + pathe "^1.1.1" + +ast-kit@^0.9.4, ast-kit@^0.9.5: + version "0.9.5" + resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.9.5.tgz#88c0ba76b6f7f24c04ccf9ae778e33afc187dc80" + integrity sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg== + dependencies: + "@babel/parser" "^7.22.7" + "@rollup/pluginutils" "^5.0.2" + pathe "^1.1.1" + +ast-walker-scope@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/ast-walker-scope/-/ast-walker-scope-0.5.0.tgz#87e0ca4f34394d11ec4dea5925b8bda80b811819" + integrity sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q== + dependencies: + "@babel/parser" "^7.22.7" + ast-kit "^0.9.4" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@^3.2.0, async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +automation-events@^6.0.13: + version "6.0.14" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.14.tgz#2e0a68760833a508ec2bab1df61986764a720668" + integrity sha512-CoxZlKaVDGfjdfOULxd6ws8gQ/WLCw7JXub4qb0LM55otKQL9j2BnlN07lT/0V75SGzLMOElfXpTvWqzzIHx0w== + dependencies: + "@babel/runtime" "^7.23.8" + tslib "^2.6.2" + +automation-events@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-7.0.0.tgz#241ecfb2eac48a8e2ca1421bd60912665565213c" + integrity sha512-z2aGVy+pPbg3E619qRucLx5ZZqVFbcHCIF1vjx/0B3uQih5mUtuCtWEET+aYbG8Au12ikA5LTAhgoQJvGi3aWg== + dependencies: + "@babel/runtime" "^7.23.9" + tslib "^2.6.2" + +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +axios-auth-refresh@3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/axios-auth-refresh/-/axios-auth-refresh-3.3.6.tgz#a879f6296a889d6616e51069c2a8135b697966e7" + integrity sha512-2CeBUce/SxIfFxow5/n8vApJ97yYF6qoV4gh1UrswT7aEOnlOdBLxxyhOI4IaxGs6BY0l8YujU2jlc4aCmK17Q== + +axios@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff" + integrity sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@>=0.13.0: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.5.0" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" + +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.22.2, browserslist@^4.22.3: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.1.0, builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +butterchurn-presets@3.0.0-beta.4: + version "3.0.0-beta.4" + resolved "https://registry.yarnpkg.com/butterchurn-presets/-/butterchurn-presets-3.0.0-beta.4.tgz#393d3f7863d546bdef2c52aec90da76bdbcacd3b" + integrity sha512-TbQLUPvGOYMZAtWKoCmBtludh9aQZ6NaMGQU4lvPeadBPy3Du3yNmwBjlTMLP5c5mRWElxQPjTL1PtR7FZK3OQ== + dependencies: + "@babel/runtime" "^7.12.5" + +butterchurn@3.0.0-beta.4: + version "3.0.0-beta.4" + resolved "https://registry.yarnpkg.com/butterchurn/-/butterchurn-3.0.0-beta.4.tgz#f459d8b81decd4f28f4c90b5c0fc40611ad3d86f" + integrity sha512-hiY1ktHYHQ8MT65nnZi7GjrgZZ6sl/ipT5rBqEfaYJd90L4SvOtB6lVxtKadtzAyJo2TQJc4gJfEca4cpZo0DA== + dependencies: + "@assemblyscript/loader" "^0.17.11" + "@babel/runtime" "^7.11.2" + ecma-proposal-math-extensions "0.0.2" + eel-wasm "^0.0.15" + +cac@^6.7.12, cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cachedir@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001587: + version "1.0.30001588" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chai@^4.3.10: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-table3@~0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.16: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-line-args@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^9.0.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== + dependencies: + browserslist "^4.22.3" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-selector-parser@^1.3: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssstyle@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.0.1.tgz#ef29c598a1e90125c870525490ea4f354db0660a" + integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== + dependencies: + rrweb-cssom "^0.6.0" + +csstype@^3.1.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +cypress@13.6.4: + version "13.6.4" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.6.4.tgz#42c88d3ee0342f1681abfacabf9c1f082676bc53" + integrity sha512-pYJjCfDYB+hoOoZuhysbbYhEmNW7DEDsqn+ToCLwuVowxUXppIWRr7qk4TVRIU471ksfzyZcH+mkoF0CQUKnpw== + dependencies: + "@cypress/request" "^3.0.0" + "@cypress/xvfb" "^1.2.4" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.6.0" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^6.2.1" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.4" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.8" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + process "^0.11.10" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.5.3" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + yauzl "^2.10.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + +dayjs@^1.10.4: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +dompurify@3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" + integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== + +"dompurify@^2.4.3 || ^3.0.0": + version "3.0.9" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.9.tgz#b3f362f24b99f53498c75d43ecbd784b0b3ad65e" + integrity sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ== + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecma-proposal-math-extensions@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz#a6a3d64819db70cee0d2e1976b6315d00e4714a0" + integrity sha512-80BnDp2Fn7RxXlEr5HHZblniY4aQ97MOAicdWWpSo0vkQiISSE9wLR4SqxKsu4gCtXFBIPPzy8JMhay4NWRg/Q== + +eel-wasm@^0.0.15: + version "0.0.15" + resolved "https://registry.yarnpkg.com/eel-wasm/-/eel-wasm-0.0.15.tgz#d7767081e16591ca02a223c2a62cc84d304021c5" + integrity sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA== + +ejs@^3.1.6: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.668: + version "1.4.677" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz#49ee77713516740bdde32ac2d1443c444f0dafe7" + integrity sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.1" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.14" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-set-tostringtag@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +esbuild@^0.19.3: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-compat-utils@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" + integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== + +eslint-config-standard@17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== + +eslint-config-standard@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" + integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== + +eslint-import-resolver-custom-alias@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-custom-alias/-/eslint-import-resolver-custom-alias-1.3.2.tgz#e509097e87de7a10b8c205c24644c3eb3fdf03c4" + integrity sha512-wBPcZA2k6/IXaT8FsLMyiyVSG6WVEuaYIAbeKLXeGwr523BmeB9lKAAoLJWSqp3txsnU4gpkgD2x1q6K8k0uDQ== + dependencies: + glob-parent "^6.0.2" + resolve "^1.22.2" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.7.3, eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es-x@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92" + integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ== + dependencies: + "@eslint-community/eslint-utils" "^4.1.2" + "@eslint-community/regexpp" "^4.6.0" + eslint-compat-utils "^0.1.2" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-html@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz#aec2a3772b40ccf51a5be4f972f07600539d3b3e" + integrity sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg== + dependencies: + htmlparser2 "^8.0.1" + +eslint-plugin-import@2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-import@^2.26.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-n@16.6.2: + version "16.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" + integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + builtins "^5.0.1" + eslint-plugin-es-x "^7.5.0" + get-tsconfig "^4.7.0" + globals "^13.24.0" + ignore "^5.2.4" + is-builtin-module "^3.2.1" + is-core-module "^2.12.1" + minimatch "^3.1.2" + resolve "^1.22.2" + semver "^7.5.3" + +eslint-plugin-n@^15.2.4: + version "15.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90" + integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q== + dependencies: + builtins "^5.0.1" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" + ignore "^5.1.1" + is-core-module "^2.11.0" + minimatch "^3.1.2" + resolve "^1.22.1" + semver "^7.3.8" + +eslint-plugin-node@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@6.1.1, eslint-plugin-promise@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-plugin-vue@9.8.0: + version "9.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.8.0.tgz#91de2aabbee8cdbef078ccd4f650a9ecfa445f4f" + integrity sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA== + dependencies: + eslint-utils "^3.0.0" + natural-compare "^1.4.0" + nth-check "^2.0.1" + postcss-selector-parser "^6.0.9" + semver "^7.3.5" + vue-eslint-parser "^9.0.1" + xml-name-validator "^4.0.0" + +eslint-scope@^7.1.1: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.30.0: + version "8.30.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.30.0.tgz#83a506125d089eef7c5b5910eeea824273a33f50" + integrity sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ== + dependencies: + "@eslint/eslintrc" "^1.4.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + +execa@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +focus-trap@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.2.0.tgz#25af61b5635d3c18cd2fd176087db7b60be72c6b" + integrity sha512-v4wY6HDDYvzkBy4735kW5BUEuw6Yz9ABqMYLuTNbzAFPcBOGiGHwwcNVMvUz4G0kgSYh13wa/7TG3XwTeT4O/A== + dependencies: + tabbable "^6.0.1" + +follow-redirects@^1.15.0, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +fomantic-ui-css@2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.9.3.tgz#5ee927654be50b77abfaff77bc0b6735e1d7a09c" + integrity sha512-7bM6p3QRpfZFofg7Fd3crzox2E/nBsPyyWDN+N4lnTjNMxgKltSaXJTfhLoK5xBA+wEoNtcmm6w6FQ5Drj+27A== + dependencies: + jquery "^3.4.0" + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-extra@^9.0.1, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-tsconfig@^4.7.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" + +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +gettext-extractor@^3.5.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/gettext-extractor/-/gettext-extractor-3.8.0.tgz#b2e8497a5952b039e5f488dca3d2e3aea2cb54b4" + integrity sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw== + dependencies: + "@types/glob" "5 - 7" + "@types/parse5" "^5" + css-selector-parser "^1.3" + glob "5 - 7" + parse5 "5 - 6" + pofile "1.0.x" + typescript "4 - 5" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +"glob@5 - 7", glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0, globals@^13.24.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +graphql@^16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +headers-polyfill@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a" + integrity sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw== + +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + +https-proxy-agent@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idb-keyval@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" + integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== + +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immutable@^4.0.0: + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-language-code@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-3.1.0.tgz#b2386b49227e7010636f16d0c2c681ca40136ab5" + integrity sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA== + dependencies: + "@babel/runtime" "^7.14.0" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-node-process@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^3.0.2, is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-shared-array-buffer@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.6: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jquery@^3.4.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^8.0.2: + version "8.0.3" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" + integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.0.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdom@24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" + integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== + dependencies: + cssstyle "^4.0.1" + data-urls "^5.0.0" + decimal.js "^10.4.3" + form-data "^4.0.0" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.7" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.3" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + ws "^8.16.0" + xml-name-validator "^5.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0, json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.3, json5@^2.2.0, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-eslint-parser@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2" + integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g== + dependencies: + acorn "^8.5.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + semver "^7.3.5" + +jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" + integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== + dependencies: + acorn "^8.5.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + semver "^7.3.5" + +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +just-extend@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" + integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loupe@^2.3.6, loupe@^2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lru-cache@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string-ast@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/magic-string-ast/-/magic-string-ast-0.3.0.tgz#8fc83ac6d084c5a342645a30354184a6e0ab4382" + integrity sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA== + dependencies: + magic-string "^0.30.2" + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5, magic-string@^0.30.6: + version "0.30.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" + integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +magicast@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" + integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== + dependencies: + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + source-map-js "^1.0.2" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +minimatch@9.0.3, minimatch@^9.0.0: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mitt@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230" + integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== + +mlly@^1.2.0, mlly@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" + integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + +moment@2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +msw-auto-mock@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/msw-auto-mock/-/msw-auto-mock-0.18.0.tgz#2d67d01aa1d2454a55e4efa53caea51b0c055136" + integrity sha512-mFpsq+EM2W05Vb07VMRbJJarahUtxzq4hapwUYhoLM5MtU6tM2D5tRK9xEP7hBRZc6rWT+tfCwvjB0KhxoNEPQ== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + cac "^6.7.12" + lodash "^4.17.21" + oazapfts "^4.5.2" + prettier "3.1.0" + swagger2openapi "^7.0.8" + +msw@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.2.1.tgz#5ece7ee81331aabe632fe331f07e71e8a3949499" + integrity sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w== + dependencies: + "@bundled-es-modules/cookie" "^2.0.0" + "@bundled-es-modules/statuses" "^1.0.1" + "@inquirer/confirm" "^3.0.0" + "@mswjs/cookies" "^1.1.0" + "@mswjs/interceptors" "^0.25.16" + "@open-draft/until" "^2.1.0" + "@types/cookie" "^0.6.0" + "@types/statuses" "^2.0.4" + chalk "^4.1.2" + graphql "^16.8.1" + headers-polyfill "^4.0.2" + is-node-process "^1.2.0" + outvariant "^1.4.2" + path-to-regexp "^6.2.0" + strict-event-emitter "^0.5.1" + type-fest "^4.9.0" + yargs "^17.7.2" + +muggle-string@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" + integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== + +muggle-string@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" + integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +nise@^5.1.4: + version "5.1.9" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.9.tgz#0cb73b5e4499d738231a473cd89bd8afbb618139" + integrity sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^11.2.2" + "@sinonjs/text-encoding" "^0.7.2" + just-extend "^6.2.0" + path-to-regexp "^6.2.1" + +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== + dependencies: + path-key "^4.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" + integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== + dependencies: + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.2.2" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + reftools "^1.1.9" + should "^13.2.1" + yaml "^1.10.0" + +oazapfts@^4.5.2: + version "4.12.0" + resolved "https://registry.yarnpkg.com/oazapfts/-/oazapfts-4.12.0.tgz#8a86c5fe5a1237b16b05d06d05815cffa2a2b949" + integrity sha512-hNKRG4eLYceuJuqDDx7Uqsi8p3j5k83gNKSo2qnUOTiiU03sCQOjXxOqCXDbzRcuDFyK94+1PBIpotK4NoxIjw== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + swagger2openapi "^7.0.8" + typescript "^5.2.2" + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + dependencies: + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + +object.values@^1.1.5, object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + +outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" + integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +"parse5@5 - 6", parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0, parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@^6.2.0, path-to-regexp@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathe@^1.0.0, pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +pofile@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" + integrity sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg== + +pofile@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.4.tgz#eab7e29f5017589b2a61b2259dff608c0cad76a2" + integrity sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss-selector-parser@^6.0.9: + version "6.0.15" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.4.32, postcss@^8.4.33, postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== + +pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-bytes@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" + integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@6.10.4: + version "6.10.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.4.tgz#6a3003755add91c0ec9eacdc5f878b034e73f9e7" + integrity sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g== + dependencies: + side-channel "^1.0.4" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +regexpp@^3.0.0, regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve.exports@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-visualizer@5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz#013ac54fb6a9d7c9019e7eb77eced673399e5a0b" + integrity sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + +rollup@^2.43.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^3.29.1, rollup@^3.7.2: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^4.2.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" + integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.12.0" + "@rollup/rollup-android-arm64" "4.12.0" + "@rollup/rollup-darwin-arm64" "4.12.0" + "@rollup/rollup-darwin-x64" "4.12.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" + "@rollup/rollup-linux-arm64-gnu" "4.12.0" + "@rollup/rollup-linux-arm64-musl" "4.12.0" + "@rollup/rollup-linux-riscv64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-gnu" "4.12.0" + "@rollup/rollup-linux-x64-musl" "4.12.0" + "@rollup/rollup-win32-arm64-msvc" "4.12.0" + "@rollup/rollup-win32-ia32-msvc" "4.12.0" + "@rollup/rollup-win32-x64-msvc" "4.12.0" + fsevents "~2.3.2" + +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass@1.57.1: + version "1.57.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" + integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +semver@^6.1.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +showdown@2.1.0, showdown@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" + integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== + dependencies: + commander "^9.0.0" + +shvl@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/shvl/-/shvl-2.0.3.tgz#eb4bd37644f5684bba1fc52c3010c96fb5e6afd1" + integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw== + +side-channel@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sinon@15.0.2: + version "15.0.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.2.tgz#f3e3aacb990bbaa8a7bb976e86118c5dc0154e66" + integrity sha512-PCVP63XZkg0/LOqQH5rEU4LILuvTFMb5tNxTHfs6VUMNnZz2XrnGSTZbAGITjzwQWbl/Bl/8hi4G3zZWjyBwHg== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^10.0.2" + "@sinonjs/samsam" "^7.0.1" + diff "^5.1.0" + nise "^5.1.4" + supports-color "^7.2.0" + +sinon@^16.0.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.1.3.tgz#b760ddafe785356e2847502657b4a0da5501fba8" + integrity sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^10.3.0" + "@sinonjs/samsam" "^8.0.0" + diff "^5.1.0" + nise "^5.1.4" + supports-color "^7.2.0" + +sirv@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +sortablejs@1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" + integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.14.1: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-generator@^2.0.5: + version "2.0.10" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" + integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== + dependencies: + stackframe "^1.3.4" + +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +stacktrace-gps@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" + integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== + dependencies: + source-map "0.5.6" + stackframe "^1.3.4" + +stacktrace-js@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== + dependencies: + error-stack-parser "^2.0.6" + stack-generator "^2.0.5" + stacktrace-gps "^3.0.4" + +standardized-audio-context-mock@9.6.32: + version "9.6.32" + resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.32.tgz#ede90e8f0620c86d7b7d042e16f2a44b1ec864aa" + integrity sha512-x9/SWuzcTZ4WT9gk4bdww+/9FmK/jbRgoKcPHg2VieKx/wZVaPUcgwDWm7rISDJCuVaNUGcNcMf3lzvLid8kMA== + dependencies: + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" + sinon "^16.0.0" + standardized-audio-context "^25.3.60" + tslib "^2.6.2" + vehicles "^9.0.14" + +standardized-audio-context@25.3.60: + version "25.3.60" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.60.tgz#f37a0e35bac7ca230dd44fc66efb28949f6bb864" + integrity sha512-h4ntLsHqnRESxyuU4C5/gvZTBqjBw1SoAR5lsQbqXPI4R3KKZTJWnMMpnRdiySr7cXokbEcepaPGGQ1V+UwlLw== + dependencies: + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" + tslib "^2.6.2" + +standardized-audio-context@^25.3.60: + version "25.3.64" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.64.tgz#bbbe9b31fef5537b0901c0f8a6ae4fd06bfc97c1" + integrity sha512-yo4SvErg1MWIYsAJ+nX18gLTacffBQ0DaJWBqFI63jao9Ue2EOriad4FKM3xQlWc85NPHMm4pJ2XnvdTAN05iw== + dependencies: + "@babel/runtime" "^7.23.9" + automation-events "^7.0.0" + tslib "^2.6.2" + +statuses@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +std-env@^3.5.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.6: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-literal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" + integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== + dependencies: + js-tokens "^8.0.2" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swagger2openapi@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" + integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== + dependencies: + call-me-maybe "^1.0.1" + node-fetch "^2.6.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + oas-validator "^5.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tabbable@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" + integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terser@^5.0.0: + version "5.27.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.2.tgz#577a362515ff5635f98ba149643793a3973ba77e" + integrity sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-clipper@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/text-clipper/-/text-clipper-2.2.0.tgz#4b81a4d01ffcc51096ceab84b26856f88643990a" + integrity sha512-tfHW2GUfXLGto6gx9JB3CFL9qgX8+SbX6db0oM1kqkbPsemAX5whdXf4da6r1V/7lij34J1oOODj+0j3crl0UA== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throttleit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinybench@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" + integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== + +tinypool@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" + integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== + +tinyspy@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +tough-cookie@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" + integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== + dependencies: + punycode "^2.3.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +transliteration@2.3.5, transliteration@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.3.5.tgz#8f92309575f69e4a8a525dab4ff705ebcf961c45" + integrity sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw== + dependencies: + yargs "^17.5.1" + +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + +tsconfig-paths@^3.14.1, tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^4.9.0: + version "4.10.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.10.2.tgz#3abdb144d93c5750432aac0d73d3e85fcab45738" + integrity sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw== + +typed-array-buffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +"typescript@4 - 5", typescript@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +ufo@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universal-cookie@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" + integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== + dependencies: + "@types/cookie" "^0.3.3" + cookie "^0.4.0" + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unplugin-combine@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/unplugin-combine/-/unplugin-combine-0.7.0.tgz#d76fa67c18070016dd6c43e72757957fb2ce862a" + integrity sha512-Pxa8ovANAUN/bz/pzGN8xnTqFfSJndIJAttXS4/BdVq7mxtKB65RVa2UxAnLmEzgwvtefXAjZgyx9fk5Bv0vEA== + dependencies: + "@antfu/utils" "^0.7.5" + unplugin "^1.3.2" + +unplugin-vue-define-options@1.3.15: + version "1.3.15" + resolved "https://registry.yarnpkg.com/unplugin-vue-define-options/-/unplugin-vue-define-options-1.3.15.tgz#ad592f132dcce82792e731b8a2eadda4928f8a3b" + integrity sha512-SrNVpWtQXHxnLEpkCvEdhLdVepBIVFuj5Y8qY2bq45NdgBA4Obsq+8NtEP2lzdr0AlQlhgqUE8dxhuqu1mYEzw== + dependencies: + "@vue-macros/common" "1.7.0" + ast-walker-scope "^0.5.0" + unplugin "^1.4.0" + +unplugin-vue-macros@2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/unplugin-vue-macros/-/unplugin-vue-macros-2.4.6.tgz#42c1cf1193d306eec47f7e041aa066478570419e" + integrity sha512-df8ZxlrFK+rcoDEdNyjdmw14qR7soeeIvnodBXyZg2GauVf8zRBV7nY6NLfMmrdLHiMNpgUPL1WhQMJDxobNAg== + dependencies: + "@vue-macros/better-define" "1.6.9" + "@vue-macros/chain-call" "^0.1.3" + "@vue-macros/common" "1.7.0" + "@vue-macros/define-emit" "^0.1.13" + "@vue-macros/define-models" "1.0.13" + "@vue-macros/define-prop" "^0.2.4" + "@vue-macros/define-props" "1.0.17" + "@vue-macros/define-props-refs" "1.1.7" + "@vue-macros/define-render" "1.4.0" + "@vue-macros/define-slots" "1.0.12" + "@vue-macros/devtools" "^0.1.3" + "@vue-macros/export-expose" "0.0.10" + "@vue-macros/export-props" "0.3.15" + "@vue-macros/hoist-static" "1.4.9" + "@vue-macros/jsx-directive" "0.5.0" + "@vue-macros/named-template" "0.3.16" + "@vue-macros/reactivity-transform" "0.3.19" + "@vue-macros/setup-block" "0.2.15" + "@vue-macros/setup-component" "0.16.16" + "@vue-macros/setup-sfc" "0.16.0" + "@vue-macros/short-emits" "1.4.7" + unplugin "^1.4.0" + unplugin-combine "^0.7.0" + unplugin-vue-define-options "1.3.15" + +unplugin@^1.1.0, unplugin@^1.3.2, unplugin@^1.4.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.7.1.tgz#009571e3128640f4e327f33680d2db27afaf1e11" + integrity sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw== + dependencies: + acorn "^8.11.3" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.1" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utility-types@3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-to-istanbul@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +vehicles@^9.0.14: + version "9.0.16" + resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.16.tgz#1dfab80d21a3991dff7f4a0bc584bd652fb37b84" + integrity sha512-N+oxZfO3QMwUA5fuO1vCLJhAZQyDKVtV3Z4Nv/6LUu3p/tSygSHX28O/QeJM1aY+qZnewy+vWY+4uiJrL/mZEg== + dependencies: + "@babel/runtime" "^7.23.8" + decimal.js "^10.4.3" + tslib "^2.6.2" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vite-node@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.1.tgz#a93f7372212f5d5df38e945046b945ac3f4855d2" + integrity sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^5.0.0" + +vite-plugin-pwa@0.14.4: + version "0.14.4" + resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" + integrity sha512-M7Ct0so8OlouMkTWgXnl8W1xU95glITSKIe7qswZf1tniAstO2idElGCnsrTJ5NPNSx1XqfTCOUj8j94S6FD7Q== + dependencies: + "@rollup/plugin-replace" "^5.0.1" + debug "^4.3.4" + fast-glob "^3.2.12" + pretty-bytes "^6.0.0" + rollup "^3.7.2" + workbox-build "^6.5.4" + workbox-window "^6.5.4" + +vite@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" + integrity sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew== + dependencies: + esbuild "^0.19.3" + postcss "^8.4.35" + rollup "^4.2.0" + optionalDependencies: + fsevents "~2.3.3" + +vite@^5.0.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.4.tgz#14e9d3e7a6e488f36284ef13cebe149f060bcfb6" + integrity sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg== + dependencies: + esbuild "^0.19.3" + postcss "^8.4.35" + rollup "^4.2.0" + optionalDependencies: + fsevents "~2.3.3" + +vitest@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" + integrity sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ== + dependencies: + "@vitest/expect" "1.3.1" + "@vitest/runner" "1.3.1" + "@vitest/snapshot" "1.3.1" + "@vitest/spy" "1.3.1" + "@vitest/utils" "1.3.1" + acorn-walk "^8.3.2" + chai "^4.3.10" + debug "^4.3.4" + execa "^8.0.1" + local-pkg "^0.5.0" + magic-string "^0.30.5" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.5.0" + strip-literal "^2.0.0" + tinybench "^2.5.1" + tinypool "^0.8.2" + vite "^5.0.0" + vite-node "1.3.1" + why-is-node-running "^2.2.2" + +vue-demi@>=0.14.5: + version "0.14.7" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" + integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA== + +vue-demi@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" + integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== + +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.3.1: + version "9.4.2" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d" + integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-gettext@2.1.12: + version "2.1.12" + resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33" + integrity sha512-7Kw36xtKvARp8ZafQGPK9WR6EM+dhFUikR5f0+etSkiHuvUM3yf1HsRDLYoLLdJ0AMaXxKwgekumzvCk6KX8rA== + +vue-i18n@9.9.1: + version "9.9.1" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.9.1.tgz#3c2fdf3c9db430572a1246439d541d01e2795c06" + integrity sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw== + dependencies: + "@intlify/core-base" "9.9.1" + "@intlify/shared" "9.9.1" + "@vue/devtools-api" "^6.5.0" + +vue-observe-visibility@^2.0.0-alpha.1: + version "2.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz#1e4eda7b12562161d58984b7e0dea676d83bdb13" + integrity sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g== + +vue-resize@^2.0.0-alpha.1: + version "2.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz#43eeb79e74febe932b9b20c5c57e0ebc14e2df3a" + integrity sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg== + +vue-router@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== + dependencies: + "@vue/devtools-api" "^6.5.0" + +vue-template-compiler@^2.7.14: + version "2.7.16" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" + integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +vue-tsc@1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" + integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== + dependencies: + "@volar/vue-language-core" "1.6.5" + "@volar/vue-typescript" "1.6.5" + semver "^7.3.8" + +vue-upload-component@3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/vue-upload-component/-/vue-upload-component-3.1.8.tgz#6c79aaf3c34c596ec40bbdde0f625d4855fb275a" + integrity sha512-8LHCrgmEZPg+1hbkKjQgMce2uasmGLEnIsLE8YG+vNyfNDuaQA71T+5t6kdDSG/szeh+E8mjb26uEd9WkVSFtg== + +vue-virtual-scroller@2.0.0-beta.8: + version "2.0.0-beta.8" + resolved "https://registry.yarnpkg.com/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.8.tgz#eeceda57e4faa5ba1763994c873923e2a956898b" + integrity sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ== + dependencies: + mitt "^2.1.0" + vue-observe-visibility "^2.0.0-alpha.1" + vue-resize "^2.0.0-alpha.1" + +vue3-gettext@2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/vue3-gettext/-/vue3-gettext-2.3.4.tgz#f7c64604a20638f49910b9616bdb6269423e0a2b" + integrity sha512-X+dibsUhiSRz2LW5de6NkDl+GNZoo9JMGmlJ+wuzez/UJYvJ6GKofOeoUxbtwOk2vPY+/wesmyyzhkMoR3Z/AA== + dependencies: + chalk "^4.1.2" + command-line-args "^5.2.1" + cosmiconfig "^7.0.1" + gettext-extractor "^3.5.4" + glob "^7.2.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + pofile "^1.1.3" + tslib "^2.4.0" + +vue3-lazyload@0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/vue3-lazyload/-/vue3-lazyload-0.3.8.tgz#82749a6b89a4d475c9a7fa409d0cff6c4abbd59d" + integrity sha512-UiJHRT7mzry102WbhtrRgJh+f8Z8u4Z+H1RU4dvPmQeq7wFSDFxZB9iJOWGihH2FscXN/8rMGLDOQJAmjwqpCg== + dependencies: + vue-demi "^0.12.5" + +vue@3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.11.tgz#898d97025f73cdb5fc4e3ae3fd07a54615232140" + integrity sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w== + dependencies: + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-sfc" "3.3.11" + "@vue/runtime-dom" "3.3.11" + "@vue/server-renderer" "3.3.11" + "@vue/shared" "3.3.11" + +vue@^3.3.7: + version "3.4.19" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.19.tgz#f9ae0a44db86628548736ff04152830726a97263" + integrity sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw== + dependencies: + "@vue/compiler-dom" "3.4.19" + "@vue/compiler-sfc" "3.4.19" + "@vue/runtime-dom" "3.4.19" + "@vue/server-renderer" "3.4.19" + "@vue/shared" "3.4.19" + +vuedraggable@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270" + integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww== + dependencies: + sortablejs "1.14.0" + +vuex-persistedstate@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz#127165f85f5b4534fb3170a5d3a8be9811bd2a53" + integrity sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ== + dependencies: + deepmerge "^4.2.2" + shvl "^2.0.3" + +vuex-router-sync@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz#1a225c17a1dd9e2f74af0a1b2c62072e9492b305" + integrity sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w== + +vuex@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c" + integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11" + +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== + +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +whatwg-url@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" + integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== + dependencies: + tr46 "^5.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + +workbox-background-sync@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" + integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-broadcast-update@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e" + integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== + dependencies: + workbox-core "6.6.1" + +workbox-build@^6.5.4: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0" + integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.6.1" + workbox-broadcast-update "6.6.1" + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-google-analytics "6.6.1" + workbox-navigation-preload "6.6.1" + workbox-precaching "6.6.1" + workbox-range-requests "6.6.1" + workbox-recipes "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + workbox-streams "6.6.1" + workbox-sw "6.6.1" + workbox-window "6.6.1" + +workbox-cacheable-response@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9" + integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== + dependencies: + workbox-core "6.6.1" + +workbox-core@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" + integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== + +workbox-core@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265" + integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== + +workbox-expiration@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739" + integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-google-analytics@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d" + integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== + dependencies: + workbox-background-sync "6.6.1" + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-navigation-preload@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059" + integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== + dependencies: + workbox-core "6.6.1" + +workbox-precaching@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" + integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-precaching@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2" + integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-range-requests@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39" + integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== + dependencies: + workbox-core "6.6.1" + +workbox-recipes@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae" + integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== + dependencies: + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-precaching "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-routing@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" + integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== + dependencies: + workbox-core "6.5.4" + +workbox-routing@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581" + integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== + dependencies: + workbox-core "6.6.1" + +workbox-strategies@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" + integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== + dependencies: + workbox-core "6.5.4" + +workbox-strategies@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf" + integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== + dependencies: + workbox-core "6.6.1" + +workbox-streams@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26" + integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + +workbox-sw@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c" + integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== + +workbox-window@6.6.1, workbox-window@^6.5.4: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e" + integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.6.1" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml-eslint-parser@^1.0.0, yaml-eslint-parser@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz#1a9673ebe254328cfc2fa99f297f6d8c9364ccd8" + integrity sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg== + dependencies: + eslint-visitor-keys "^3.0.0" + lodash "^4.17.21" + yaml "^2.0.0" + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.0.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 521c4d927c1f43bd670768ec43ecbdb480177296 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 5 Feb 2024 10:47:45 +0100 Subject: [PATCH 335/371] ci: Install dependencies before building tauri Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 466d4f522..a4eb3977c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -439,6 +439,8 @@ build_desktop: image: $CI_REGISTRY/funkwhale/ci/node-tauri:18 variables: <<: *keep_git_files_permissions + before_script: + - yarn install script: - yarn tauri build artifacts: From cddf6b9d93a39b78027850b4ba1a0895db014358 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 5 Feb 2024 12:38:51 +0100 Subject: [PATCH 336/371] ci: Add cargo bin to PATH Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a4eb3977c..555d31ab5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -440,6 +440,7 @@ build_desktop: variables: <<: *keep_git_files_permissions before_script: + - source /root/.cargo/env - yarn install script: - yarn tauri build From cb8725a838fd7562e074dc34c3e2d7cc67a5f6f0 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Mon, 5 Feb 2024 13:37:25 +0100 Subject: [PATCH 337/371] ci: Specify appimage path Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 555d31ab5..700850088 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -447,7 +447,7 @@ build_desktop: artifacts: name: desktop_${CI_COMMIT_REF_NAME} paths: - - front/tauri/target/release/bundle + - front/tauri/target/release/bundle/appimage/*.AppImage deploy_docs: interruptible: false From f3a7394461a23d68259c205e7483556fb1e30c28 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Mon, 5 Feb 2024 13:51:42 +0100 Subject: [PATCH 338/371] test: test if tauri env is recognized correctly Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/package.json | 1 - front/src/components/Sidebar.vue | 3 +- front/src/composables/tauri.ts | 3 + front/src/store/instance.ts | 17 +- front/test/specs/composables/tauri.spec.ts | 17 + front/test/specs/store/instance.spec.ts | 28 + front/yarn.lock | 1609 +------------------- 7 files changed, 90 insertions(+), 1588 deletions(-) create mode 100644 front/src/composables/tauri.ts create mode 100644 front/test/specs/composables/tauri.spec.ts create mode 100644 front/test/specs/store/instance.spec.ts diff --git a/front/package.json b/front/package.json index b119e264d..da66cb0b2 100644 --- a/front/package.json +++ b/front/package.json @@ -102,7 +102,6 @@ "unplugin-vue-macros": "2.4.6", "utility-types": "3.10.0", "vite": "5.1.3", - "vite-plugin-pwa": "0.14.4", "vitest": "1.3.1", "vue-tsc": "1.6.5", "workbox-core": "6.5.4", diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index cc9e733f2..5cace5695 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -17,6 +17,7 @@ import Logo from '~/components/Logo.vue' import useThemeList from '~/composables/useThemeList' import useTheme from '~/composables/useTheme' +import { isTauri as checkTauri } from '~/composables/tauri' interface Props { width: number @@ -103,7 +104,7 @@ watch(locale, (locale) => { }) const isProduction = import.meta.env.PROD -const isTauri = 'TAURI_ENV_PLATFORM' in import.meta.env +const isTauri = checkTauri() const showUserModal = ref(false) const showThemeModal = ref(false) diff --git a/front/src/composables/tauri.ts b/front/src/composables/tauri.ts new file mode 100644 index 000000000..f6c08195f --- /dev/null +++ b/front/src/composables/tauri.ts @@ -0,0 +1,3 @@ +export const isTauri = () => { + return 'TAURI_ENV_PLATFORM' in import.meta.env +} diff --git a/front/src/store/instance.ts b/front/src/store/instance.ts index 8cc750a5d..5be9e4ad5 100644 --- a/front/src/store/instance.ts +++ b/front/src/store/instance.ts @@ -5,6 +5,7 @@ import axios from 'axios' import { merge } from 'lodash-es' import useLogger from '~/composables/useLogger' import { useQueue } from '~/composables/audio/queue' +import { isTauri } from '~/composables/tauri' export interface State { frontSettings: FrontendSettings @@ -123,15 +124,15 @@ interface Settings { const logger = useLogger() // Use some arbitrary url that will trigger the instance chooser, this needs to be a valid url -export const TAURI_DEFAULT_INSTANCE_URL = 'tauri://force-instance-chooser/' +export const TAURI_DEFAULT_INSTANCE_URL = 'http://localhost/force-instance-chooser/' // We have several way to guess the API server url. By order of precedence: +// 0. use the url provided in settings.json, if any. That's a lazy operation done by already initialized store. // 1. force instance chooser, if in tauri app -// 2. use the url provided in settings.json, if any -// 3. use the url specified when building via VUE_APP_INSTANCE_URL -// 4. use the current url -const DEFAULT_INSTANCE_URL = (() => { - if ('TAURI_ENV_PLATFORM' in import.meta.env) { +// 2. use the url specified when building via VUE_APP_INSTANCE_URL +// 3. use the current url +export const findDefaultInstanceUrl = () => { + if (isTauri()) { return TAURI_DEFAULT_INSTANCE_URL } @@ -142,7 +143,9 @@ const DEFAULT_INSTANCE_URL = (() => { } return `${location.origin}/` -})() +} + +const DEFAULT_INSTANCE_URL = findDefaultInstanceUrl() const store: Module<State, RootState> = { namespaced: true, diff --git a/front/test/specs/composables/tauri.spec.ts b/front/test/specs/composables/tauri.spec.ts new file mode 100644 index 000000000..a6accede1 --- /dev/null +++ b/front/test/specs/composables/tauri.spec.ts @@ -0,0 +1,17 @@ +import { vi } from 'vitest' +import { isTauri } from '~/composables/tauri' + +afterEach(() => { + vi.unstubAllEnvs() +}) + +test('Correctly detects Tauri environment', () => { + // Stub the Tauri environment variable + vi.stubEnv('TAURI_ENV_PLATFORM', 'tauri') + + expect(isTauri()).toBe(true) +}) + +test('Correctly detects browser environment', () => { + expect(isTauri()).toBe(false) +}) diff --git a/front/test/specs/store/instance.spec.ts b/front/test/specs/store/instance.spec.ts new file mode 100644 index 000000000..61ccd79b4 --- /dev/null +++ b/front/test/specs/store/instance.spec.ts @@ -0,0 +1,28 @@ +import { vi } from 'vitest' + +// HACK: First we import the global store (and instance store indirectly) so that we don't fall into error pitfall +import _store from '~/store' + +import { findDefaultInstanceUrl, TAURI_DEFAULT_INSTANCE_URL } from '~/store/instance' + +afterEach(() => { + vi.unstubAllEnvs() + vi.unstubAllGlobals() +}) + +describe('findDefaultInstanceUrl', () => { + test('tauri', () => { + vi.stubEnv('TAURI_ENV_PLATFORM', 'tauri') + expect(findDefaultInstanceUrl()).toBe(TAURI_DEFAULT_INSTANCE_URL) + }) + + test('environment variable', () => { + vi.stubEnv('VUE_APP_INSTANCE_URL', 'https://example.com') + expect(findDefaultInstanceUrl()).toBe('https://example.com/') + }) + + test('location origin', () => { + vi.stubGlobal('location', new URL('https://example.com')) + expect(findDefaultInstanceUrl()).toBe('https://example.com/') + }) +}) diff --git a/front/yarn.lock b/front/yarn.lock index 3a4f7a9eb..5407b4c2a 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": +"@ampproject/remapping@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -20,15 +20,6 @@ resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb" integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== -"@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - "@apidevtools/json-schema-ref-parser@9.0.6": version "9.0.6" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" @@ -66,7 +57,7 @@ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -74,198 +65,6 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/core@^7.11.1": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.22.15": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" - integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" @@ -276,29 +75,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== - dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" - "@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" @@ -313,683 +89,14 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" - -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== - dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" - -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.11.0": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" - integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.23.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.23.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4": +"@babel/types@^7.22.10", "@babel/types@^7.22.17", "@babel/types@^7.22.5", "@babel/types@^7.23.6": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== @@ -1355,7 +462,7 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.0": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== @@ -1374,20 +481,12 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.9": version "0.3.22" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== @@ -1461,52 +560,7 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== -"@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/plugin-replace@^5.0.1": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" - integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== - dependencies: - "@rollup/pluginutils" "^5.0.1" - magic-string "^0.30.3" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": +"@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== @@ -1707,16 +761,6 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== -"@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - "@tauri-apps/api@2.0.0-beta.0": version "2.0.0-beta.0" resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.0.tgz#36b10e6f459fd125530ac083262a355b84ce9b95" @@ -1810,11 +854,6 @@ dependencies: "@types/trusted-types" "*" -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/estree@1.0.5", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" @@ -1903,13 +942,6 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - "@types/semantic-ui-accordion@*": version "2.2.5" resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.5.tgz#09591490950492705853410f00bf7d8af66e11f9" @@ -2106,7 +1138,7 @@ resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315" integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== -"@types/trusted-types@*", "@types/trusted-types@^2.0.2": +"@types/trusted-types@*": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== @@ -2992,7 +2024,7 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.6.0, ajv@^8.6.3: +ajv@^8.6.3: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -3205,7 +2237,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.0, async@^3.2.3: +async@^3.2.0: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== @@ -3276,30 +2308,6 @@ axios@>=0.13.0: form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-plugin-polyfill-corejs2@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" - integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" - -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3359,26 +2367,11 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.22.2, browserslist@^4.22.3: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -3387,7 +2380,7 @@ buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^3.1.0, builtin-modules@^3.3.0: +builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== @@ -3447,11 +2440,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001587: - version "1.0.30001588" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" - integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -3479,7 +2467,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3613,11 +2601,6 @@ command-line-args@^5.2.1: lodash.camelcase "^4.3.0" typical "^4.0.0" -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -3653,13 +2636,6 @@ cookie@^0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -core-js-compat@^3.31.0, core-js-compat@^3.34.0: - version "3.36.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" - integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== - dependencies: - browserslist "^4.22.3" - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -3685,11 +2661,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-selector-parser@^1.3: version "1.4.1" resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" @@ -3785,7 +2756,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3950,18 +2921,6 @@ eel-wasm@^0.0.15: resolved "https://registry.yarnpkg.com/eel-wasm/-/eel-wasm-0.0.15.tgz#d7767081e16591ca02a223c2a62cc84d304021c5" integrity sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA== -ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.668: - version "1.4.677" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz#49ee77713516740bdde32ac2d1443c444f0dafe7" - integrity sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4439,11 +3398,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -4545,7 +3499,7 @@ fast-glob@^3.2.12, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -4588,13 +3542,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -4680,7 +3627,7 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -4720,11 +3667,6 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -4746,11 +3688,6 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -4820,7 +3757,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -"glob@5 - 7", glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +"glob@5 - 7", glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4850,11 +3787,6 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0, globals@^13.24.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" @@ -5043,11 +3975,6 @@ idb-keyval@6.2.1: resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== -idb@^7.0.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -5099,7 +4026,7 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -internal-slot@^1.0.5, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -5213,11 +4140,6 @@ is-language-code@^3.1.0: dependencies: "@babel/runtime" "^7.14.0" -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - is-negative-zero@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" @@ -5240,11 +4162,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -5263,11 +4180,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - is-shared-array-buffer@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" @@ -5376,25 +4288,6 @@ istanbul-reports@^3.1.6: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jquery@^3.4.0: version "3.7.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" @@ -5462,16 +4355,6 @@ jsdom@24.0.0: ws "^8.16.0" xml-name-validator "^5.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -5492,7 +4375,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0, json-schema@^0.4.0: +json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -5514,7 +4397,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.3, json5@^2.2.0, json5@^2.2.3: +json5@^2.1.3, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -5553,11 +4436,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - jsprim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" @@ -5585,11 +4463,6 @@ lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -5647,11 +4520,6 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -5667,12 +4535,7 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5707,13 +4570,6 @@ lru-cache@10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5728,14 +4584,7 @@ magic-string-ast@^0.3.0: dependencies: magic-string "^0.30.2" -magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5, magic-string@^0.30.6: +magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.5, magic-string@^0.30.6: version "0.30.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== @@ -5956,11 +4805,6 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -6274,7 +5118,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -6335,16 +5179,11 @@ prettier@3.1.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== -pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: +pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-bytes@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" - integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== - pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -6404,13 +5243,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" @@ -6428,31 +5260,12 @@ reftools@^1.1.9: resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -6467,25 +5280,6 @@ regexpp@^3.0.0, regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" @@ -6523,7 +5317,7 @@ resolve.exports@^2.0.2: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.10.1, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -6557,16 +5351,6 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-terser@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - rollup-plugin-visualizer@5.9.0: version "5.9.0" resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz#013ac54fb6a9d7c9019e7eb77eced673399e5a0b" @@ -6577,14 +5361,7 @@ rollup-plugin-visualizer@5.9.0: source-map "^0.7.4" yargs "^17.5.1" -rollup@^2.43.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - -rollup@^3.29.1, rollup@^3.7.2: +rollup@^3.29.1: version "3.29.4" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== @@ -6647,7 +5424,7 @@ safe-array-concat@^1.1.0: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6694,13 +5471,6 @@ semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semve dependencies: lru-cache "^6.0.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - set-function-length@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" @@ -6713,7 +5483,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-name@^2.0.0, set-function-name@^2.0.1: +set-function-name@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -6882,20 +5652,12 @@ sortablejs@1.14.0: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6905,18 +5667,6 @@ source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -7025,21 +5775,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.6: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -7067,15 +5802,6 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -7088,11 +5814,6 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -7122,7 +5843,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: +supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -7168,31 +5889,6 @@ tabbable@^6.0.1: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terser@^5.0.0: - version "5.27.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.2.tgz#577a362515ff5635f98ba149643793a3973ba77e" - integrity sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -7271,13 +5967,6 @@ tough-cookie@^4.1.3: universalify "^0.2.0" url-parse "^1.5.3" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - tr46@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" @@ -7346,11 +6035,6 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -7445,36 +6129,6 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universal-cookie@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" @@ -7555,19 +6209,6 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -7636,19 +6277,6 @@ vite-node@1.3.1: picocolors "^1.0.0" vite "^5.0.0" -vite-plugin-pwa@0.14.4: - version "0.14.4" - resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" - integrity sha512-M7Ct0so8OlouMkTWgXnl8W1xU95glITSKIe7qswZf1tniAstO2idElGCnsrTJ5NPNSx1XqfTCOUj8j94S6FD7Q== - dependencies: - "@rollup/plugin-replace" "^5.0.1" - debug "^4.3.4" - fast-glob "^3.2.12" - pretty-bytes "^6.0.0" - rollup "^3.7.2" - workbox-build "^6.5.4" - workbox-window "^6.5.4" - vite@5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" @@ -7865,11 +6493,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -7913,15 +6536,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -7959,106 +6573,11 @@ why-is-node-running@^2.2.2: siginfo "^2.0.0" stackback "0.0.2" -workbox-background-sync@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" - integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== - dependencies: - idb "^7.0.1" - workbox-core "6.6.1" - -workbox-broadcast-update@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e" - integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== - dependencies: - workbox-core "6.6.1" - -workbox-build@^6.5.4: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0" - integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "6.6.1" - workbox-broadcast-update "6.6.1" - workbox-cacheable-response "6.6.1" - workbox-core "6.6.1" - workbox-expiration "6.6.1" - workbox-google-analytics "6.6.1" - workbox-navigation-preload "6.6.1" - workbox-precaching "6.6.1" - workbox-range-requests "6.6.1" - workbox-recipes "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - workbox-streams "6.6.1" - workbox-sw "6.6.1" - workbox-window "6.6.1" - -workbox-cacheable-response@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9" - integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== - dependencies: - workbox-core "6.6.1" - workbox-core@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== -workbox-core@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265" - integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== - -workbox-expiration@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739" - integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== - dependencies: - idb "^7.0.1" - workbox-core "6.6.1" - -workbox-google-analytics@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d" - integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== - dependencies: - workbox-background-sync "6.6.1" - workbox-core "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-navigation-preload@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059" - integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== - dependencies: - workbox-core "6.6.1" - workbox-precaching@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" @@ -8068,34 +6587,6 @@ workbox-precaching@6.5.4: workbox-routing "6.5.4" workbox-strategies "6.5.4" -workbox-precaching@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2" - integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== - dependencies: - workbox-core "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - -workbox-range-requests@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39" - integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== - dependencies: - workbox-core "6.6.1" - -workbox-recipes@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae" - integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== - dependencies: - workbox-cacheable-response "6.6.1" - workbox-core "6.6.1" - workbox-expiration "6.6.1" - workbox-precaching "6.6.1" - workbox-routing "6.6.1" - workbox-strategies "6.6.1" - workbox-routing@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" @@ -8103,13 +6594,6 @@ workbox-routing@6.5.4: dependencies: workbox-core "6.5.4" -workbox-routing@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581" - integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== - dependencies: - workbox-core "6.6.1" - workbox-strategies@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" @@ -8117,34 +6601,6 @@ workbox-strategies@6.5.4: dependencies: workbox-core "6.5.4" -workbox-strategies@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf" - integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== - dependencies: - workbox-core "6.6.1" - -workbox-streams@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26" - integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== - dependencies: - workbox-core "6.6.1" - workbox-routing "6.6.1" - -workbox-sw@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c" - integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== - -workbox-window@6.6.1, workbox-window@^6.5.4: - version "6.6.1" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e" - integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.6.1" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -8193,11 +6649,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" From b00d782006a1166bf1895a94f193f89975370a21 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 6 Feb 2024 10:21:11 +0100 Subject: [PATCH 339/371] test(front): Install required dependencies for coverage calculation Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/package.json | 1 + front/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/front/package.json b/front/package.json index da66cb0b2..55bb90cde 100644 --- a/front/package.json +++ b/front/package.json @@ -22,6 +22,7 @@ "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", "@tauri-apps/api": "2.0.0-beta.0", + "@vitest/coverage-v8": "1.2.2", "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", diff --git a/front/yarn.lock b/front/yarn.lock index 5407b4c2a..f2632f80d 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1331,10 +1331,10 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== -"@vitest/coverage-v8@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz#cf5ed8eb5bff6658cea126d0f8fcd2872de0b59f" - integrity sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg== +"@vitest/coverage-v8@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.2.2.tgz#681f4f76de896d0d2484cca32285477e288fec3a" + integrity sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw== dependencies: "@ampproject/remapping" "^2.2.1" "@bcoe/v8-coverage" "^0.2.3" From 51f56bc80852e0493c605b46611a281bb4f6a5c7 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 6 Feb 2024 10:21:36 +0100 Subject: [PATCH 340/371] chore: Add frontend artifacts to gitignore Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 1603297e0..fe0dd038f 100644 --- a/.gitignore +++ b/.gitignore @@ -85,8 +85,12 @@ front/yarn-debug.log* front/yarn-error.log* front/tests/unit/coverage front/tests/e2e/reports +front/test_results.xml +front/coverage/ front/selenium-debug.log docs/_build +#Tauri +front/tauri/gen /data/ .env From 0b99740d64f223514eef9b6c9625629c80cc6e48 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Tue, 13 Feb 2024 13:10:52 +0100 Subject: [PATCH 341/371] feat(appimage): bundle media framework Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/tauri/tauri.conf.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/front/tauri/tauri.conf.json b/front/tauri/tauri.conf.json index b5fa90161..ef3861aa1 100644 --- a/front/tauri/tauri.conf.json +++ b/front/tauri/tauri.conf.json @@ -39,6 +39,9 @@ "linux": { "deb": { "depends": [] + }, + "appimage": { + "bundleMediaFramework": true } }, "longDescription": "", From 419da80e37ba542769f6b900263839b356b0d619 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 14 Feb 2024 10:12:05 +0100 Subject: [PATCH 342/371] ci(tauri): Enable verbose logs Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 700850088..64833fb1b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -443,7 +443,7 @@ build_desktop: - source /root/.cargo/env - yarn install script: - - yarn tauri build + - yarn tauri build --verbose artifacts: name: desktop_${CI_COMMIT_REF_NAME} paths: From 0095fc566ee628e001ddaaafb96d649ce0a7956d Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Thu, 15 Feb 2024 21:30:41 +0100 Subject: [PATCH 343/371] feat(tauri): offload OAuth login flow to a separate window Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/components/auth/LoginForm.vue | 61 ++++++++++--------------- front/src/store/auth.ts | 59 +++++++++++++++++++++--- front/tauri/Cargo.lock | 60 ++++++++++++++++++++++++ front/tauri/Cargo.toml | 3 +- front/tauri/capabilities/migrated.json | 2 +- front/tauri/capabilities/oauth.json | 8 ++++ front/tauri/rust-toolchain.toml | 4 ++ front/tauri/src/main.rs | 8 +++- front/tauri/tauri.conf.json | 5 +- 9 files changed, 160 insertions(+), 50 deletions(-) create mode 100644 front/tauri/capabilities/oauth.json create mode 100644 front/tauri/rust-toolchain.toml diff --git a/front/src/components/auth/LoginForm.vue b/front/src/components/auth/LoginForm.vue index 41be7710b..44e9d0f90 100644 --- a/front/src/components/auth/LoginForm.vue +++ b/front/src/components/auth/LoginForm.vue @@ -1,9 +1,9 @@ <script setup lang="ts"> import type { BackendError } from '~/types' -import type { RouteLocationRaw } from 'vue-router' +import { onBeforeRouteLeave, type RouteLocationRaw, useRouter } from 'vue-router' import { ref, reactive, computed, onMounted, nextTick } from 'vue' -import { useRouter } from 'vue-router' +import { useEventListener } from '@vueuse/core' import { useI18n } from 'vue-i18n' import { useStore } from '~/store' @@ -26,6 +26,15 @@ const { t } = useI18n() const store = useStore() const router = useRouter() +// TODO (wvffle): Move to store logic when migrated to pinia +useEventListener(window, 'beforeunload', () => { + store.dispatch('auth/tryFinishOAuthFlow') +}) + +onBeforeRouteLeave(() => { + store.dispatch('auth/tryFinishOAuthFlow') +}) + const credentials = reactive({ username: '', password: '' @@ -53,13 +62,13 @@ const submit = async () => { } else { await store.dispatch('auth/oauthLogin', props.next) } - } catch (error) { + } catch (error: any) { const backendError = error as BackendError if (backendError.response?.status === 400) { errors.value = ['invalid_credentials'] } else { - errors.value = backendError.backendErrors + errors.value = backendError.backendErrors ?? error.message ?? error } } @@ -68,20 +77,14 @@ const submit = async () => { </script> <template> - <form - class="ui form" - @submit.prevent="submit()" - > - <div - v-if="errors.length > 0" - role="alert" - class="ui negative message" - > + <form class="ui form" @submit.prevent="submit()"> + <div v-if="errors.length > 0" role="alert" class="ui negative message"> <h4 class="header"> {{ $t('components.auth.LoginForm.header.loginFailure') }} </h4> <ul class="list"> - <li v-if="errors[0] == 'invalid_credentials' && $store.state.instance.settings.moderation.signup_approval_enabled.value"> + <li + v-if="errors[0] == 'invalid_credentials' && $store.state.instance.settings.moderation.signup_approval_enabled.value"> {{ $t('components.auth.LoginForm.help.approvalRequired') }} </li> <li v-else-if="errors[0] == 'invalid_credentials'"> @@ -98,38 +101,23 @@ const submit = async () => { {{ $t('components.auth.LoginForm.label.username') }} <template v-if="showSignup"> <span class="middle pipe symbol" /> - <router-link :to="{path: '/signup'}"> + <router-link :to="{ path: '/signup' }"> {{ $t('components.auth.LoginForm.link.createAccount') }} </router-link> </template> </label> - <input - id="username-field" - ref="username" - v-model="credentials.username" - required - name="username" - type="text" - autofocus - :placeholder="labels.usernamePlaceholder" - > + <input id="username-field" ref="username" v-model="credentials.username" required name="username" type="text" + autofocus :placeholder="labels.usernamePlaceholder"> </div> <div class="field"> <label for="password-field"> {{ $t('components.auth.LoginForm.label.password') }} <span class="middle pipe symbol" /> - <router-link - tabindex="1" - :to="{name: 'auth.password-reset', query: {email: credentials.username}}" - > + <router-link tabindex="1" :to="{ name: 'auth.password-reset', query: { email: credentials.username } }"> {{ $t('components.auth.LoginForm.link.resetPassword') }} </router-link> </label> - <password-input - v-model="credentials.password" - field-id="password-field" - required - /> + <password-input v-model="credentials.password" field-id="password-field" required /> </div> </template> <template v-else> @@ -137,10 +125,7 @@ const submit = async () => { {{ $t('components.auth.LoginForm.message.redirect', { domain: $store.getters['instance/domain'] }) }} </p> </template> - <button - :class="['ui', {'loading': isLoading}, 'right', 'floated', buttonClasses, 'button']" - type="submit" - > + <button :class="['ui', { 'loading': isLoading }, 'right', 'floated', buttonClasses, 'button']" type="submit"> {{ $t('components.auth.LoginForm.button.login') }} </button> </form> diff --git a/front/src/store/auth.ts b/front/src/store/auth.ts index d2a3f1530..a4a9d364b 100644 --- a/front/src/store/auth.ts +++ b/front/src/store/auth.ts @@ -2,6 +2,7 @@ import type { BackendError, User } from '~/types' import type { Module } from 'vuex' import type { RootState } from '~/store/index' import type { RouteLocationRaw } from 'vue-router' +import type { WebviewWindow } from '@tauri-apps/api/webview' import axios from 'axios' import useLogger from '~/composables/useLogger' @@ -9,6 +10,7 @@ import useFormData from '~/composables/useFormData' import { clear as clearIDB } from 'idb-keyval' import { useQueue } from '~/composables/audio/queue' +import { isTauri } from '~/composables/tauri' export type Permission = 'settings' | 'library' | 'moderation' export interface State { @@ -21,6 +23,8 @@ export interface State { scopedTokens: ScopedTokens applicationSecret: string | undefined + + oauthWindow: WebviewWindow | undefined } interface ScopedTokens { @@ -55,7 +59,7 @@ function getDefaultOauth (): OAuthTokens { async function createOauthApp () { const payload = { - name: `Funkwhale web client at ${window.location.hostname}`, + name: `Funkwhale web client at ${location.hostname}`, website: location.origin, scopes: NEEDED_SCOPES, redirect_uris: `${location.origin}/auth/callback` @@ -78,7 +82,9 @@ const store: Module<State, RootState> = { oauth: getDefaultOauth(), scopedTokens: getDefaultScopedTokens(), - applicationSecret: undefined + applicationSecret: undefined, + + oauthWindow: undefined }, getters: { header: state => { @@ -243,14 +249,41 @@ const store: Module<State, RootState> = { commit('permission', { key: permission, status: hasPermission }) } }, - async oauthLogin ({ state, rootState, commit }, next: RouteLocationRaw) { + async tryFinishOAuthFlow ({ state }) { + if (isTauri()) { + return state.oauthWindow?.close().catch(() => { + // Ignore the error in case of window being already closed + }) + } + }, + async oauthLogin ({ state, rootState, commit, dispatch }, next: RouteLocationRaw) { const app = await createOauthApp() commit('oauthApp', app) - const redirectUri = encodeURIComponent(`${location.origin}/auth/callback`) - const params = `response_type=code&scope=${encodeURIComponent(NEEDED_SCOPES)}&redirect_uri=${redirectUri}&state=${next}&client_id=${state.oauth.clientId}` + const redirectUrl = encodeURIComponent(`${location.origin}/auth/callback`) + const params = `response_type=code&scope=${encodeURIComponent(NEEDED_SCOPES)}&redirect_uri=${redirectUrl}&state=${next}&client_id=${state.oauth.clientId}` const authorizeUrl = `${rootState.instance.instanceUrl}authorize?${params}` - logger.log('Redirecting user...', authorizeUrl) - window.location.href = authorizeUrl + + if (isTauri()) { + const { WebviewWindow } = await import('@tauri-apps/api/webview') + + state.oauthWindow = new WebviewWindow('oauth', { + title: `Login to ${rootState.instance.settings.instance.name}`, + parent: 'main', + url: authorizeUrl + }) + + const token = await new Promise((resolve, reject) => { + state.oauthWindow?.once('tauri://error', reject) + state.oauthWindow?.once('tauri://destroyed', () => reject(new Error('Aborted by user'))) + state.oauthWindow?.once('oauthToken', async (event) => resolve(event.payload)) + }).finally(() => dispatch('tryFinishOAuthFlow')) + + commit('oauthToken', token) + await dispatch('fetchUser') + } else { + logger.log('Redirecting user...', authorizeUrl) + location.href = authorizeUrl + } }, async handleOauthCallback ({ state, commit, dispatch }, authorizationCode) { logger.log('Fetching token...') @@ -266,6 +299,18 @@ const store: Module<State, RootState> = { useFormData(payload), { headers: { 'Content-Type': 'multipart/form-data' } } ) + + if (isTauri()) { + const { getCurrent } = await import('@tauri-apps/api/window') + const currentWindow = getCurrent() + + // If the current window is the oauth window, pass the event to the main window + if (currentWindow.label === 'oauth') { + await currentWindow.emit('oauthToken', response.data) + return + } + } + commit('oauthToken', response.data) await dispatch('fetchUser') }, diff --git a/front/tauri/Cargo.lock b/front/tauri/Cargo.lock index 2e7413a6f..75c258109 100644 --- a/front/tauri/Cargo.lock +++ b/front/tauri/Cargo.lock @@ -567,6 +567,33 @@ dependencies = [ "objc", ] +[[package]] +name = "color-eyre" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1009,6 +1036,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -1099,6 +1136,7 @@ dependencies = [ name = "funkwhale" version = "0.1.0" dependencies = [ + "color-eyre", "serde", "serde_json", "tauri", @@ -1714,6 +1752,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" version = "1.9.3" @@ -2288,6 +2332,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + [[package]] name = "pango" version = "0.18.3" @@ -3908,6 +3958,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + [[package]] name = "tracing-log" version = "0.2.0" diff --git a/front/tauri/Cargo.toml b/front/tauri/Cargo.toml index f90ecf30a..163ac6a59 100644 --- a/front/tauri/Cargo.toml +++ b/front/tauri/Cargo.toml @@ -22,9 +22,10 @@ tauri-build = { version = "2.0.0-beta", features = [] } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tauri = { version = "2.0.0-beta", features = [] } +color-eyre = "0.6.2" [features] # this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. # If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes. # DO NOT REMOVE!! -custom-protocol = [ "tauri/custom-protocol" ] +custom-protocol = ["tauri/custom-protocol"] diff --git a/front/tauri/capabilities/migrated.json b/front/tauri/capabilities/migrated.json index 0fff22326..4abe92575 100644 --- a/front/tauri/capabilities/migrated.json +++ b/front/tauri/capabilities/migrated.json @@ -2,7 +2,7 @@ "identifier": "migrated", "description": "permissions that were migrated from v1", "context": "local", - "windows": ["main"], + "windows": ["main", "oauth"], "permissions": [ "path:default", "event:default", diff --git a/front/tauri/capabilities/oauth.json b/front/tauri/capabilities/oauth.json new file mode 100644 index 000000000..ac8ea9e66 --- /dev/null +++ b/front/tauri/capabilities/oauth.json @@ -0,0 +1,8 @@ +{ + "identifier": "oauth2", + "description": "permissions that required for OAuth2 login window", + "context": "local", + "windows": ["main"], + "permissions": ["webview:allow-create-webview-window", "window:allow-close"], + "platforms": ["linux", "macOS", "windows", "android", "iOS"] +} diff --git a/front/tauri/rust-toolchain.toml b/front/tauri/rust-toolchain.toml new file mode 100644 index 000000000..92ebe6655 --- /dev/null +++ b/front/tauri/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +profile = "minimal" +channel = "1.71.0" +components = ["rust-src", "rust-analyzer", "clippy"] diff --git a/front/tauri/src/main.rs b/front/tauri/src/main.rs index a406808a5..41ef8437d 100644 --- a/front/tauri/src/main.rs +++ b/front/tauri/src/main.rs @@ -1,6 +1,12 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -fn main() { +use color_eyre::Result; + +fn main() -> Result<()> { + color_eyre::install()?; + funkwhale_lib::run(); + + Ok(()) } diff --git a/front/tauri/tauri.conf.json b/front/tauri/tauri.conf.json index ef3861aa1..a999007af 100644 --- a/front/tauri/tauri.conf.json +++ b/front/tauri/tauri.conf.json @@ -10,11 +10,12 @@ }, "windows": [ { + "label": "main", "fullscreen": false, "height": 600, + "width": 800, "resizable": true, - "title": "Funkwhale", - "width": 800 + "title": "Funkwhale" } ] }, From e42646d8a1135d28a8794a7092b7957835a38fb1 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Sun, 18 Feb 2024 11:17:05 +0100 Subject: [PATCH 344/371] feat(instance-chooser): add dark mode support Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/src/assets/logo/logo-full-500-white.png | Bin 0 -> 9868 bytes front/src/components/auth/LoginForm.vue | 42 ++++++++++++++---- front/src/views/ChooseInstance.vue | 27 +++++++++-- 3 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 front/src/assets/logo/logo-full-500-white.png diff --git a/front/src/assets/logo/logo-full-500-white.png b/front/src/assets/logo/logo-full-500-white.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd22fb345a73b47cbb1b3de78d15abd4b3cc657 GIT binary patch literal 9868 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 literal 0 HcmV?d00001 diff --git a/front/src/components/auth/LoginForm.vue b/front/src/components/auth/LoginForm.vue index 44e9d0f90..3fb4b2119 100644 --- a/front/src/components/auth/LoginForm.vue +++ b/front/src/components/auth/LoginForm.vue @@ -77,14 +77,22 @@ const submit = async () => { </script> <template> - <form class="ui form" @submit.prevent="submit()"> - <div v-if="errors.length > 0" role="alert" class="ui negative message"> + <form + class="ui form" + @submit.prevent="submit()" + > + <div + v-if="errors.length > 0" + role="alert" + class="ui negative message" + > <h4 class="header"> {{ $t('components.auth.LoginForm.header.loginFailure') }} </h4> <ul class="list"> <li - v-if="errors[0] == 'invalid_credentials' && $store.state.instance.settings.moderation.signup_approval_enabled.value"> + v-if="errors[0] == 'invalid_credentials' && $store.state.instance.settings.moderation.signup_approval_enabled.value" + > {{ $t('components.auth.LoginForm.help.approvalRequired') }} </li> <li v-else-if="errors[0] == 'invalid_credentials'"> @@ -106,18 +114,33 @@ const submit = async () => { </router-link> </template> </label> - <input id="username-field" ref="username" v-model="credentials.username" required name="username" type="text" - autofocus :placeholder="labels.usernamePlaceholder"> + <input + id="username-field" + ref="username" + v-model="credentials.username" + required + name="username" + type="text" + autofocus + :placeholder="labels.usernamePlaceholder" + > </div> <div class="field"> <label for="password-field"> {{ $t('components.auth.LoginForm.label.password') }} <span class="middle pipe symbol" /> - <router-link tabindex="1" :to="{ name: 'auth.password-reset', query: { email: credentials.username } }"> + <router-link + tabindex="1" + :to="{ name: 'auth.password-reset', query: { email: credentials.username } }" + > {{ $t('components.auth.LoginForm.link.resetPassword') }} </router-link> </label> - <password-input v-model="credentials.password" field-id="password-field" required /> + <password-input + v-model="credentials.password" + field-id="password-field" + required + /> </div> </template> <template v-else> @@ -125,7 +148,10 @@ const submit = async () => { {{ $t('components.auth.LoginForm.message.redirect', { domain: $store.getters['instance/domain'] }) }} </p> </template> - <button :class="['ui', { 'loading': isLoading }, 'right', 'floated', buttonClasses, 'button']" type="submit"> + <button + :class="['ui', { 'loading': isLoading }, 'right', 'floated', buttonClasses, 'button']" + type="submit" + > {{ $t('components.auth.LoginForm.button.login') }} </button> </form> diff --git a/front/src/views/ChooseInstance.vue b/front/src/views/ChooseInstance.vue index 09e80d05d..9214317f4 100644 --- a/front/src/views/ChooseInstance.vue +++ b/front/src/views/ChooseInstance.vue @@ -57,7 +57,14 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA <template> <div class="instance-chooser"> - <img src="../assets/logo/logo-full-500.png"> + <img + class="light-logo" + src="../assets/logo/logo-full-500.png" + > + <img + class="dark-logo" + src="../assets/logo/logo-full-500-white.png" + > <div class="card"> <h3 class="header"> @@ -100,7 +107,7 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA <i class="external icon" /> </a> </i18n-t> - {{ t('', {url: store.state.instance.instanceUrl, hostname: store.getters['instance/domain']}) }} + {{ t('', { url: store.state.instance.instanceUrl, hostname: store.getters['instance/domain'] }) }} </p> <p v-else @@ -120,7 +127,7 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA > <button type="submit" - :class="['ui', 'icon', {loading: isLoading}, 'button']" + :class="['ui', 'icon', { loading: isLoading }, 'button']" > {{ t('views.ChooseInstance.button.submit') }} </button> @@ -172,7 +179,7 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA align-items: center; justify-content: center; - > .card { + >.card { margin-top: 2rem; max-width: 30rem; width: 100%; @@ -189,4 +196,16 @@ const isTauriInstance = computed(() => store.getters['instance/url'].href === TA } } } + +.theme-dark .instance-chooser>.card { + background: var(--sidebar-background); +} + +.theme-dark .instance-chooser>.light-logo { + display: none; +} + +.theme-light .instance-chooser>.dark-logo { + display: none; +} </style> From 37a1b008b3e66e61dbbe14f82e12648912e4a2ae Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Wed, 21 Feb 2024 10:55:32 +0100 Subject: [PATCH 345/371] ci: Upload Funkwhale Desktop AppImage into package registry Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .gitlab-ci.yml | 4 +++- Makefile | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 64833fb1b..387c58100 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -430,7 +430,7 @@ build_api: paths: - api -build_desktop: +build_tauri: stage: build rules: - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ @@ -538,6 +538,8 @@ package: artifacts: true - job: build_front artifacts: true + - job: build_tauri + artifacts: true rules: - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ diff --git a/Makefile b/Makefile index 5ffe3d6a2..9f07f488c 100644 --- a/Makefile +++ b/Makefile @@ -51,4 +51,7 @@ package: zip -q 'funkwhale-front.zip' -r front && \ rm -Rf front + cd '$(BUILD_DIR)' && \ + cp ../front/tauri/target/release/bundle/appimage/funkwhale_*.AppImage FunkwhaleDesktop.AppImage + cd '$(BUILD_DIR)' && sha256sum * > SHA256SUMS From 298ace1b72a6eb6e9dc6d040dae6f5578b56c8ee Mon Sep 17 00:00:00 2001 From: Georg Krause <georg@funkwhale.audio> Date: Wed, 21 Feb 2024 10:15:14 +0000 Subject: [PATCH 346/371] feat(tauri): add metadata to Cargo.toml Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/tauri/Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front/tauri/Cargo.toml b/front/tauri/Cargo.toml index 163ac6a59..1a73bf99f 100644 --- a/front/tauri/Cargo.toml +++ b/front/tauri/Cargo.toml @@ -2,9 +2,9 @@ name = "funkwhale" version = "0.1.0" description = "A Tauri App" -authors = ["you"] -license = "" -repository = "" +authors = ["Funkwhale Collective"] +license = "AGPLv3" +repository = "https://dev.funkwhale.audio/funkwhale/funkwhale/" default-run = "funkwhale" edition = "2021" rust-version = "1.60" From ad1bb6a220a7f249d136b48d939f1495f176f8fe Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 21 Feb 2024 11:26:48 +0100 Subject: [PATCH 347/371] feat(nix): remove flake Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- .envrc | 2 - .gitignore | 5 ++- flake.lock | 130 ----------------------------------------------------- flake.nix | 96 --------------------------------------- 4 files changed, 4 insertions(+), 229 deletions(-) delete mode 100644 .envrc delete mode 100644 flake.lock delete mode 100644 flake.nix diff --git a/.envrc b/.envrc deleted file mode 100644 index 03bb5edd5..000000000 --- a/.envrc +++ /dev/null @@ -1,2 +0,0 @@ -watch_file flake.nix -use flake diff --git a/.gitignore b/.gitignore index fe0dd038f..97ef7bf6c 100644 --- a/.gitignore +++ b/.gitignore @@ -111,5 +111,8 @@ tsconfig.tsbuildinfo # Vscode .vscode/ -# Direnv +# Nix .direnv/ +.envrc +flake.nix +flake.lock diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 040ba3368..000000000 --- a/flake.lock +++ /dev/null @@ -1,130 +0,0 @@ -{ - "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1705309234, - "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1681202837, - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1705856552, - "narHash": "sha256-JXfnuEf5Yd6bhMs/uvM67/joxYKoysyE3M2k6T3eWbg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "612f97239e2cc474c13c9dafa0df378058c5ad8d", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1681358109, - "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - } - }, - "rust-overlay": { - "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1705889935, - "narHash": "sha256-77KPBK5e0ACNzIgJDMuptTtEqKvHBxTO3ksqXHHVO+4=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "e36f66bb10b09f5189dc3b1706948eaeb9a1c555", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 6c38d298f..000000000 --- a/flake.nix +++ /dev/null @@ -1,96 +0,0 @@ -{ - description = "Build tauri desktop application"; - - inputs = { - nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; - flake-utils = { - url = "github:numtide/flake-utils"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - rust-overlay.url = "github:oxalica/rust-overlay"; - }; - - outputs = inputs: with inputs; flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - overlays = [ - rust-overlay.overlays.default - ]; - }; - lib = nixpkgs.lib; - - commonLibraries = with pkgs;[ - # Tauri dependencies - webkitgtk_4_1 - gtk3 - cairo - gdk-pixbuf - glib - dbus - openssl_3 - librsvg - libclang - libappindicator - - # GStreamer required for audio playback JS-side - gst_all_1.gstreamer - gst_all_1.gst-vaapi - gst_all_1.gst-plugins-bad - gst_all_1.gst-plugins-ugly - gst_all_1.gst-plugins-good - gst_all_1.gst-plugins-base - ]; - - - packages = with pkgs; [ - # More tauri dependencies - curl - wget - pkg-config - libsoup_3 - clang - rustup - - # Frontend dependencies - nodejs - corepack - - # API dependencies / Frontend scripts - python3 - pre-commit - ]; - - in { - devShell = pkgs.mkShell { - buildInputs = commonLibraries ++ packages; - - shellHook = '' - pre-commit install - ''; - - LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath commonLibraries; - - XDG_DATA_DIRS = let - base = pkgs.lib.concatMapStringsSep ":" (x: "${x}/share") [ - pkgs.gnome.adwaita-icon-theme - pkgs.shared-mime-info - ]; - - gsettings-schema = pkgs.lib.concatMapStringsSep ":" (x: "${x}/share/gsettings-schemas/${x.name}") [ - pkgs.glib - pkgs.gsettings-desktop-schemas - pkgs.gtk3 - ]; - - in "${base}:${gsettings-schema}:$XDG_DATA_DIRS"; - - GIO_MODULE_DIR = "${pkgs.glib-networking}/lib/gio/modules/"; - - - # Avoid white screen running with Nix - # https://github.com/tauri-apps/tauri/issues/4315#issuecomment-1207755694 - WEBKIT_DISABLE_COMPOSITING_MODE = 1; - }; - }); -} From fe4af475af55884e6fa732cc705668848c7ee253 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 21 Feb 2024 11:27:31 +0100 Subject: [PATCH 348/371] style(tauri): format the code with rustfmt Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/tauri/build.rs | 2 +- front/tauri/src/lib.rs | 6 +++--- front/tauri/src/main.rs | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/front/tauri/build.rs b/front/tauri/build.rs index 795b9b7c8..d860e1e6a 100644 --- a/front/tauri/build.rs +++ b/front/tauri/build.rs @@ -1,3 +1,3 @@ fn main() { - tauri_build::build() + tauri_build::build() } diff --git a/front/tauri/src/lib.rs b/front/tauri/src/lib.rs index cfef8d12b..3b48e91a2 100644 --- a/front/tauri/src/lib.rs +++ b/front/tauri/src/lib.rs @@ -1,6 +1,6 @@ #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - tauri::Builder::default() - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + tauri::Builder::default() + .run(tauri::generate_context!()) + .expect("error while running tauri application"); } diff --git a/front/tauri/src/main.rs b/front/tauri/src/main.rs index 41ef8437d..e32a8da75 100644 --- a/front/tauri/src/main.rs +++ b/front/tauri/src/main.rs @@ -4,9 +4,9 @@ use color_eyre::Result; fn main() -> Result<()> { - color_eyre::install()?; + color_eyre::install()?; - funkwhale_lib::run(); + funkwhale_lib::run(); - Ok(()) + Ok(()) } From 673fe8b82870bd33bc2b996585351b65a475c37e Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 21 Feb 2024 14:30:11 +0100 Subject: [PATCH 349/371] feat: update dependencies Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/package.json | 4 +- front/src/components/auth/LoginForm.vue | 2 +- front/src/store/auth.ts | 28 +- front/tauri/Cargo.lock | 366 ++++++++++++------------ front/yarn.lock | 116 ++++---- 5 files changed, 267 insertions(+), 249 deletions(-) diff --git a/front/package.json b/front/package.json index 55bb90cde..3594074da 100644 --- a/front/package.json +++ b/front/package.json @@ -21,7 +21,7 @@ "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", - "@tauri-apps/api": "2.0.0-beta.0", + "@tauri-apps/api": "2.0.0-beta.1", "@vitest/coverage-v8": "1.2.2", "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", @@ -63,7 +63,7 @@ "@faker-js/faker": "8.4.1", "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "2.0.0", - "@tauri-apps/cli": "2.0.0-beta.1", + "@tauri-apps/cli": "2.0.0-beta.2", "@types/diff": "5.0.9", "@types/dompurify": "3.0.5", "@types/jquery": "3.5.29", diff --git a/front/src/components/auth/LoginForm.vue b/front/src/components/auth/LoginForm.vue index 3fb4b2119..ebdd917c3 100644 --- a/front/src/components/auth/LoginForm.vue +++ b/front/src/components/auth/LoginForm.vue @@ -68,7 +68,7 @@ const submit = async () => { if (backendError.response?.status === 400) { errors.value = ['invalid_credentials'] } else { - errors.value = backendError.backendErrors ?? error.message ?? error + errors.value = backendError.backendErrors ?? [error.message ?? error] } } diff --git a/front/src/store/auth.ts b/front/src/store/auth.ts index a4a9d364b..34d20073d 100644 --- a/front/src/store/auth.ts +++ b/front/src/store/auth.ts @@ -2,7 +2,7 @@ import type { BackendError, User } from '~/types' import type { Module } from 'vuex' import type { RootState } from '~/store/index' import type { RouteLocationRaw } from 'vue-router' -import type { WebviewWindow } from '@tauri-apps/api/webview' +import type { WebviewWindow } from '@tauri-apps/api/webviewWindow' import axios from 'axios' import useLogger from '~/composables/useLogger' @@ -251,7 +251,7 @@ const store: Module<State, RootState> = { }, async tryFinishOAuthFlow ({ state }) { if (isTauri()) { - return state.oauthWindow?.close().catch(() => { + return state.oauthWindow?.close?.().catch(() => { // Ignore the error in case of window being already closed }) } @@ -264,7 +264,7 @@ const store: Module<State, RootState> = { const authorizeUrl = `${rootState.instance.instanceUrl}authorize?${params}` if (isTauri()) { - const { WebviewWindow } = await import('@tauri-apps/api/webview') + const { WebviewWindow, getCurrent } = await import('@tauri-apps/api/webviewWindow') state.oauthWindow = new WebviewWindow('oauth', { title: `Login to ${rootState.instance.settings.instance.name}`, @@ -273,9 +273,21 @@ const store: Module<State, RootState> = { }) const token = await new Promise((resolve, reject) => { - state.oauthWindow?.once('tauri://error', reject) - state.oauthWindow?.once('tauri://destroyed', () => reject(new Error('Aborted by user'))) - state.oauthWindow?.once('oauthToken', async (event) => resolve(event.payload)) + if (!state.oauthWindow) return + + const stop = getCurrent().once<string>('oauthToken', async (event) => { + resolve(event.payload) + }) + + state.oauthWindow.once('tauri://error', async (error) => { + (await stop)() + reject(error) + }) + + state.oauthWindow.once('tauri://destroyed', async () => { + (await stop)() + reject(new Error('Aborted by user')) + }) }).finally(() => dispatch('tryFinishOAuthFlow')) commit('oauthToken', token) @@ -301,12 +313,12 @@ const store: Module<State, RootState> = { ) if (isTauri()) { - const { getCurrent } = await import('@tauri-apps/api/window') + const { getCurrent } = await import('@tauri-apps/api/webviewWindow') const currentWindow = getCurrent() // If the current window is the oauth window, pass the event to the main window if (currentWindow.label === 'oauth') { - await currentWindow.emit('oauthToken', response.data) + await currentWindow.emitTo('main', 'oauthToken', response.data) return } } diff --git a/front/tauri/Cargo.lock b/front/tauri/Cargo.lock index 75c258109..3132f4f08 100644 --- a/front/tauri/Cargo.lock +++ b/front/tauri/Cargo.lock @@ -58,9 +58,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" [[package]] name = "as-raw-xcb-connection" @@ -80,13 +80,13 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" dependencies = [ "concurrent-queue", - "event-listener 4.0.3", - "event-listener-strategy", + "event-listener 5.1.0", + "event-listener-strategy 0.5.0", "futures-core", "pin-project-lite", ] @@ -149,7 +149,7 @@ dependencies = [ "futures-io", "futures-lite 2.2.0", "parking", - "polling 3.3.2", + "polling 3.5.0", "rustix 0.38.31", "slab", "tracing", @@ -172,7 +172,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ "event-listener 4.0.3", - "event-listener-strategy", + "event-listener-strategy 0.4.0", "pin-project-lite", ] @@ -201,7 +201,7 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -236,7 +236,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -364,15 +364,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "c764d619ca78fccbf3069b37bd7af92577f044bb15236036662d79b6559f25b7" [[package]] name = "bytemuck" -version = "1.14.1" +version = "1.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" dependencies = [ "bytemuck_derive", ] @@ -385,7 +385,7 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -439,9 +439,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" dependencies = [ "serde", ] @@ -467,17 +467,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.8.9", + "toml 0.8.2", ] [[package]] name = "cc" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "7f9fa1897e4325be0d68d48df6aa1a71ac2ed4d27723887e7754192705350730" [[package]] name = "cesu8" @@ -498,9 +495,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.6" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" dependencies = [ "smallvec", "target-lexicon", @@ -526,9 +523,9 @@ checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" [[package]] name = "chrono" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", @@ -676,9 +673,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", ] @@ -732,7 +729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -742,14 +739,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" dependencies = [ "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] name = "darling" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" +checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955" dependencies = [ "darling_core", "darling_macro", @@ -757,27 +754,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" +checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] name = "darling_macro" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" +checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be" dependencies = [ "darling_core", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -941,7 +938,7 @@ dependencies = [ "cc", "memchr", "rustc_version", - "toml 0.8.9", + "toml 0.8.2", "vswhom", "winreg 0.51.0", ] @@ -963,9 +960,9 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" dependencies = [ "enumflags2_derive", "serde", @@ -973,13 +970,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1026,6 +1023,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "event-listener" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ad6fd685ce13acd6d9541a30f6db6567a7a24c9ffd4ba2955d29e3f22c8b27" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + [[package]] name = "event-listener-strategy" version = "0.4.0" @@ -1036,6 +1044,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.1.0", + "pin-project-lite", +] + [[package]] name = "eyre" version = "0.6.12" @@ -1114,7 +1132,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1221,7 +1239,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1484,11 +1502,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ "heck", - "proc-macro-crate 2.0.0", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1567,7 +1585,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -1582,7 +1600,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.2", + "indexmap 2.2.3", "slab", "tokio", "tokio-util", @@ -1609,9 +1627,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" [[package]] name = "hex" @@ -1771,9 +1789,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.2" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -1874,9 +1892,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] @@ -2148,9 +2166,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e406691fa7749604bbc7964bde28a300572d52621bb84540f6907c0f8fe08737" +checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453" dependencies = [ "cocoa", "crossbeam-channel", @@ -2235,9 +2253,9 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -2502,7 +2520,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -2557,9 +2575,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plist" @@ -2568,7 +2586,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ "base64", - "indexmap 2.2.2", + "indexmap 2.2.3", "line-wrap", "quick-xml", "serde", @@ -2577,9 +2595,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.11" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6c3c3e617595665b8ea2ff95a86066be38fb121ff920a9c0eb282abcd1da5a" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -2606,9 +2624,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.3.2" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" dependencies = [ "cfg-if", "concurrent-queue", @@ -2648,11 +2666,12 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" dependencies = [ - "toml_edit 0.20.7", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -2957,9 +2976,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "safemem" @@ -3036,31 +3055,31 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.196" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.196" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -3076,9 +3095,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.113" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa 1.0.10", "ryu", @@ -3093,7 +3112,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -3119,16 +3138,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.6.0" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b0ed1662c5a68664f45b76d18deb0e234aff37207086803165c961eb695e981" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.2", + "indexmap 2.2.3", "serde", + "serde_derive", "serde_json", "serde_with_macros", "time", @@ -3136,14 +3156,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.6.0" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568577ff0ef47b879f736cd66740e022f3672788cdf002a05a4e609ea5a6fb15" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -3399,9 +3419,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" dependencies = [ "proc-macro2", "quote", @@ -3444,7 +3464,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml 0.8.9", + "toml 0.8.2", "version-compare", ] @@ -3477,7 +3497,6 @@ dependencies = [ "once_cell", "parking_lot", "png", - "raw-window-handle 0.5.2", "raw-window-handle 0.6.0", "scopeguard", "tao-macros", @@ -3509,9 +3528,9 @@ checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" [[package]] name = "tauri" -version = "2.0.0-beta.2" +version = "2.0.0-beta.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a584d146c38bf174398dee0ec2cdd8f8fce142daee0306c370cf78f050304c60" +checksum = "66497d130e3fb9889d738a3cffe1134a42ac1ce2177eca7fa0574a411000afde" dependencies = [ "anyhow", "bytes", @@ -3529,10 +3548,9 @@ dependencies = [ "log", "mime", "muda", - "nix", "objc", "percent-encoding", - "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "reqwest", "serde", "serde_json", @@ -3558,9 +3576,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314089a25d92a62f33f60d2a19c277f465e9088ee3ea251032ae914d6f2b1ce0" +checksum = "2932ca516808980f551fae4eb54009fd743648966ba4ce06a54f231cedefa2a0" dependencies = [ "anyhow", "cargo_toml", @@ -3574,15 +3592,15 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", - "toml 0.8.9", + "toml 0.8.2", "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6ff13874390499976f01decf75103f28e7609abc5c155c6bfb56cf574a5628" +checksum = "2f02a9d089133557849d11dfc30ad4be675ee05a4c191b7321da1e8d8dabd634" dependencies = [ "base64", "brotli", @@ -3596,6 +3614,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "syn 2.0.50", "tauri-utils", "thiserror", "time", @@ -3606,28 +3625,28 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18707774f70a8ec20dbf653f07d12af1e0d7c1e3a625b7bd5a2cfe72c2b2549b" +checksum = "115afb62760852e70cd25633008c761999527d8e38352f335761dfb9c8f735dc" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-runtime" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d72194de56e885dbd9fd8c493ccf95012e584c928900188da248f9ea4223b23" +checksum = "014f1f9253ceaa503f5e07c1ca5d06271241090517b545c00cc6afb96a3d218e" dependencies = [ "gtk", "http", "jni", - "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "serde", "serde_json", "tauri-utils", @@ -3638,17 +3657,16 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74a71bd248a7ce857835b1f65845a9de22171e30d8129e018b42961502565efb" +checksum = "e117db5f0f3b2f233063805d71459b096711fe803cabd32f19c6f5cf15b6d7ab" dependencies = [ "cocoa", "gtk", "http", "jni", - "nix", "percent-encoding", - "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "softbuffer", "tao", "tauri-runtime", @@ -3661,9 +3679,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-beta.1" +version = "2.0.0-beta.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7104f0639a1f3a7ebd7aac793be47d7924f569e7c10c6853083529bf9bb3fe6" +checksum = "6bbd83e66dab28c32a35e44ea71c02da16aca2259731b8b25d4c9476613f1681" dependencies = [ "brotli", "cargo_metadata", @@ -3687,7 +3705,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror", - "toml 0.8.9", + "toml 0.8.2", "url", "walkdir", ] @@ -3704,13 +3722,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ "cfg-if", "fastrand 2.0.1", - "redox_syscall", "rustix 0.38.31", "windows-sys 0.52.0", ] @@ -3734,29 +3751,29 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -3864,21 +3881,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.9" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6a4b9e8023eb94392d3dca65d717c53abc5dad49c07cb65bb8fcd87115fa325" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.1", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] @@ -3889,7 +3906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.2", + "indexmap 2.2.3", "serde", "serde_spanned", "toml_datetime", @@ -3898,22 +3915,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.20.7" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.2.2", - "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.2.2", + "indexmap 2.2.3", "serde", "serde_spanned", "toml_datetime", @@ -3945,7 +3951,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -3999,9 +4005,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd26786733426b0bf632ebab410c162859a911f26c7c9e208b9e329a8ca94481" +checksum = "7a4d9ddd4a7c0f3b6862af1c4911b529a49db4ee89310d3a258859c2f5053fdd" dependencies = [ "cocoa", "core-graphics", @@ -4063,18 +4069,18 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "url" @@ -4180,9 +4186,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4190,24 +4196,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -4217,9 +4223,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4227,22 +4233,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wasm-streams" @@ -4308,9 +4314,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -4382,7 +4388,7 @@ checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -4429,13 +4435,13 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-vibrancy" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6abc2b9c56bd95887825a1ce56cde49a2a97c07e28db465d541f5098a2656c" +checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" dependencies = [ "cocoa", "objc", - "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "windows-sys 0.52.0", "windows-version", ] @@ -4478,7 +4484,7 @@ checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -4489,7 +4495,7 @@ checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.50", ] [[package]] @@ -4701,9 +4707,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.37" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -4730,9 +4736,9 @@ dependencies = [ [[package]] name = "wry" -version = "0.35.2" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3016c47c9b6f7029a9da7cd48af8352327226bba0e955f3c92e2966651365a9" +checksum = "3a9e7b81968555303086ef882a0c213896a76099de4ed0b86a798775c2d54304" dependencies = [ "base64", "block", @@ -4756,7 +4762,7 @@ dependencies = [ "objc", "objc_id", "once_cell", - "raw-window-handle 0.5.2", + "raw-window-handle 0.6.0", "serde", "serde_json", "sha2", diff --git a/front/yarn.lock b/front/yarn.lock index f2632f80d..5746df821 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -761,76 +761,76 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== -"@tauri-apps/api@2.0.0-beta.0": - version "2.0.0-beta.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.0.tgz#36b10e6f459fd125530ac083262a355b84ce9b95" - integrity sha512-WLoh/Vk8cgY7XrJV7Vpb6PssReBZWQCATfYBb1aCRDk+sp0NyPwumx6fZ2ECAKzAcs3OeanluwZcajruIW4CPQ== - -"@tauri-apps/cli-darwin-arm64@2.0.0-beta.1": +"@tauri-apps/api@2.0.0-beta.1": version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz#ad90a2b82dc0b3f2e08b4bcff2d95797120fc9ea" - integrity sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw== + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.1.tgz#8f033495632c5d8b2abeab820d4a2efe4e4a9b32" + integrity sha512-Zok1HA5s38E951CD2Osg7qi1/NlT7K1zOK6/nf5t/SKkoRT8KPrPZlJ4zBOImLQpHdaLtEANjcjBfYcbM2noxQ== -"@tauri-apps/cli-darwin-x64@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz#8212d9d2c0d4492f23e4562588c2b1113cb6cd50" - integrity sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg== +"@tauri-apps/cli-darwin-arm64@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.2.tgz#1a1b289ffda7b0c7fdfe703283f0de0284a3d239" + integrity sha512-bAchrSNhFlj1U1rBZ3WJYQU5urN9bpaHlSW8UnTEkkDK0bwcLQyf+AYtRFCy8mWHq6n1RhXxVa6nbTg4DZl7RA== -"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz#9713c073b473a9dee8c4b4951e5aa6e0e87febf5" - integrity sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA== +"@tauri-apps/cli-darwin-x64@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.2.tgz#031690c6c85015753ff379f93305444c1586fccc" + integrity sha512-29Zn0GXIID1fQ8PjVBjQ/X1Ho3HcVF7a6BPYRBe1zEUfTKyrKFtHP/RD0tROw+iMh17dl3Li23aV9CCQuhfW5Q== -"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz#81d83894c3d08c52698da700f127d9d35dc2128a" - integrity sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g== +"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.2.tgz#38bc667bf964ff34bba655fc239d52194fa7e8eb" + integrity sha512-o5esvaBOn7Wr/tQz9HY9CrjeIT7/3bGO3reJk9MUOU6VpwOElGlM7bl7U2I2z1EmZn7GUa7yG2E+p7CMDV9a3w== -"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz#5239d2dc67e1dafac6a9deb64054028e099957e7" - integrity sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q== +"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.2.tgz#cada29cb2053e364de67bbefa6c1ca24e247d24f" + integrity sha512-YIA9OZ9+Mf3LW1iQZveUeMySvM3jgf5b0a1MUawYCcuhUJ/FFGaDiia4Z6hOO+p1d8DsswEelzzKyvlBiBJYGA== -"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz#639c801e431816f1548c5a6a0e63b8449cc80db4" - integrity sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw== +"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.2.tgz#84595a256c3de1f33ad603f4740ee3449839e811" + integrity sha512-UNminCTRybPkb9BNyAPo8v4bJ45q9anaIisw7PfGXeuDeHMc2W/fjLlQXipsijMvQ7lakUAjO3ttEM6ctOYJiQ== -"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz#d0e07f10ab9de95d117acce1d9787eb6a625013a" - integrity sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ== +"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.2.tgz#7e8edf156088600916806f0441a79028557e2477" + integrity sha512-o0eStDWpKkPdEsbbn98kiA/lOo4vBXnjFrov16lq88h2OThJS7idhSUqBRgqYpsIENMrvjtPJLutBkF9fuTOsw== -"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz#9b7e964413031cab6bc938468983e4bb80b44d38" - integrity sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A== +"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.2.tgz#125f8366cdcf9c992bd35026926730586d9d3a23" + integrity sha512-zUhyeIBqIQJ9oy04kNffz7QxxXw32/0l+EEPCwFfhhCQq7y6k34G/br/yjHXXYdNytNn4kYcjwjzXnohUYTu3w== -"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz#7c390f30135e9c26b6685296bb7890447a92a5f7" - integrity sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ== +"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.2.tgz#a1fecd90cbb6c8877537db5ad2ead34677074cfc" + integrity sha512-YIq7LsgSeUgSbwVDbwZBHzM9/gxWlcIxwMTgmwfSCszZmrzFfxP7JgzVG0VnK1N8UYymunWd9WIX9uUT3XhetQ== -"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz#a82890bcd8b15feded016a2bfa51a1d199dc17f5" - integrity sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ== +"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.2.tgz#1115a1b531b18f306f94f763da3fa17baa532073" + integrity sha512-i2p7OS4R9Tq0EQbjU8VldWNLPXuzbWCsDJe78/pCU0nV1OTjjxXv0tzR8d5R2VElC8eOMGnfZr7mRMrKGcZoHQ== -"@tauri-apps/cli@2.0.0-beta.1": - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz#d9e42dd2d2f9319dffcceacb82d18e19b4acf840" - integrity sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw== +"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.2.tgz#20435b171c08f0af87318173422e0040a222fe3b" + integrity sha512-5FYOA/u4xyj1Q/NKvFEEywPsUwBeLEarN/08+5JIjk7xmEIPylaxYxFnfSH0QZiLBDZAFbGIAWt0MRi97eNN5A== + +"@tauri-apps/cli@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.2.tgz#f949aad7f47691ff1db4fc83a3ab96003bf552ee" + integrity sha512-sc5fz1MEqncn8trOaUGn9DeZy7ND3QnGEb3lCPgghjifzceN/UZe69fDUN1N24iJxOhKs5Y2UI1uYK5em8GOGQ== optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "2.0.0-beta.1" - "@tauri-apps/cli-darwin-x64" "2.0.0-beta.1" - "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.1" - "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.1" - "@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.1" - "@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.1" - "@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.1" - "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.1" - "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.1" - "@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.1" + "@tauri-apps/cli-darwin-arm64" "2.0.0-beta.2" + "@tauri-apps/cli-darwin-x64" "2.0.0-beta.2" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.2" + "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.2" + "@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.2" + "@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.2" + "@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.2" + "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.2" + "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.2" + "@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.2" "@types/cookie@^0.3.3": version "0.3.3" From 30540ec186f433a4d920abea80243a7afeca72a5 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 21 Feb 2024 15:47:19 +0100 Subject: [PATCH 350/371] fix: resolve rebase mistakes Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/package.json | 2 +- front/yarn.lock | 1617 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1584 insertions(+), 35 deletions(-) diff --git a/front/package.json b/front/package.json index 3594074da..0fe6183ba 100644 --- a/front/package.json +++ b/front/package.json @@ -22,7 +22,6 @@ "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", "@tauri-apps/api": "2.0.0-beta.1", - "@vitest/coverage-v8": "1.2.2", "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", @@ -46,6 +45,7 @@ "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", + "vite-plugin-pwa": "0.14.4", "vue": "3.3.11", "vue-gettext": "2.1.12", "vue-i18n": "9.9.1", diff --git a/front/yarn.lock b/front/yarn.lock index 5746df821..b4e2e3ef9 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.1": +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -20,6 +20,15 @@ resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb" integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + "@apidevtools/json-schema-ref-parser@9.0.6": version "9.0.6" resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" @@ -57,7 +66,7 @@ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== -"@babel/code-frame@^7.0.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -65,6 +74,198 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.1": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" + integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== + dependencies: + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" @@ -75,6 +276,29 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== + dependencies: + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + "@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" @@ -89,14 +313,683 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.23.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" + +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== + dependencies: + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.23.3" + +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.11.0": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" + integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.23.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.8.4": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.17", "@babel/types@^7.22.5", "@babel/types@^7.23.6": +"@babel/template@^7.22.15", "@babel/template@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== @@ -462,7 +1355,7 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jridgewell/gen-mapping@^0.3.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== @@ -481,12 +1374,20 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.22" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== @@ -560,7 +1461,52 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== -"@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/plugin-replace@^5.0.1": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" + integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + magic-string "^0.30.3" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== @@ -761,6 +1707,16 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + "@tauri-apps/api@2.0.0-beta.1": version "2.0.0-beta.1" resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.1.tgz#8f033495632c5d8b2abeab820d4a2efe4e4a9b32" @@ -854,6 +1810,11 @@ dependencies: "@types/trusted-types" "*" +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/estree@1.0.5", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" @@ -942,6 +1903,13 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + "@types/semantic-ui-accordion@*": version "2.2.5" resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.5.tgz#09591490950492705853410f00bf7d8af66e11f9" @@ -1138,7 +2106,7 @@ resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315" integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== -"@types/trusted-types@*": +"@types/trusted-types@*", "@types/trusted-types@^2.0.2": version "2.0.7" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== @@ -1331,10 +2299,10 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== -"@vitest/coverage-v8@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.2.2.tgz#681f4f76de896d0d2484cca32285477e288fec3a" - integrity sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw== +"@vitest/coverage-v8@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz#cf5ed8eb5bff6658cea126d0f8fcd2872de0b59f" + integrity sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg== dependencies: "@ampproject/remapping" "^2.2.1" "@bcoe/v8-coverage" "^0.2.3" @@ -2024,7 +2992,7 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.6.3: +ajv@^8.6.0, ajv@^8.6.3: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2237,7 +3205,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async@^3.2.0: +async@^3.2.0, async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== @@ -2308,6 +3276,30 @@ axios@>=0.13.0: form-data "^4.0.0" proxy-from-env "^1.1.0" +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.5.0" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" + +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -2367,11 +3359,26 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +browserslist@^4.22.2, browserslist@^4.22.3: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -2380,7 +3387,7 @@ buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^3.3.0: +builtin-modules@^3.1.0, builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== @@ -2440,6 +3447,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +caniuse-lite@^1.0.30001587: + version "1.0.30001588" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -2467,7 +3479,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2601,6 +3613,11 @@ command-line-args@^5.2.1: lodash.camelcase "^4.3.0" typical "^4.0.0" +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -2636,6 +3653,13 @@ cookie@^0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== + dependencies: + browserslist "^4.22.3" + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2661,6 +3685,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + css-selector-parser@^1.3: version "1.4.1" resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" @@ -2756,7 +3785,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2921,6 +3950,18 @@ eel-wasm@^0.0.15: resolved "https://registry.yarnpkg.com/eel-wasm/-/eel-wasm-0.0.15.tgz#d7767081e16591ca02a223c2a62cc84d304021c5" integrity sha512-FSTWf6lwGn7Zc3QiV+KxWTznIqq4j9eST/aXmyN/cC39+1Arqs13YOMosHQ7tqUt+OjQmG79Vd41f9gu+w1lvA== +ejs@^3.1.6: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.668: + version "1.4.677" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz#49ee77713516740bdde32ac2d1443c444f0dafe7" + integrity sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -3398,6 +4439,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -3499,7 +4545,7 @@ fast-glob@^3.2.12, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -3542,6 +4588,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3627,7 +4680,7 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -fs-extra@^9.1.0: +fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -3667,6 +4720,11 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -3688,6 +4746,11 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -3757,7 +4820,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -"glob@5 - 7", glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +"glob@5 - 7", glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3787,6 +4850,11 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.19.0, globals@^13.24.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" @@ -3975,6 +5043,11 @@ idb-keyval@6.2.1: resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -4026,7 +5099,7 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -internal-slot@^1.0.7: +internal-slot@^1.0.5, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -4140,6 +5213,11 @@ is-language-code@^3.1.0: dependencies: "@babel/runtime" "^7.14.0" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + is-negative-zero@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" @@ -4162,6 +5240,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -4180,6 +5263,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + is-shared-array-buffer@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" @@ -4288,6 +5376,25 @@ istanbul-reports@^3.1.6: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jquery@^3.4.0: version "3.7.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" @@ -4355,6 +5462,16 @@ jsdom@24.0.0: ws "^8.16.0" xml-name-validator "^5.0.0" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -4375,7 +5492,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: +json-schema@0.4.0, json-schema@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -4397,7 +5514,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.3, json5@^2.2.3: +json5@^2.1.3, json5@^2.2.0, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -4436,6 +5553,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + jsprim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" @@ -4463,6 +5585,11 @@ lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4520,6 +5647,11 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -4535,7 +5667,12 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash@^4.17.11, lodash@^4.17.21: +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4570,6 +5707,13 @@ lru-cache@10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -4584,7 +5728,14 @@ magic-string-ast@^0.3.0: dependencies: magic-string "^0.30.2" -magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.5, magic-string@^0.30.6: +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5, magic-string@^0.30.6: version "0.30.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== @@ -4805,6 +5956,11 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -5118,7 +6274,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -5179,11 +6335,16 @@ prettier@3.1.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== -pretty-bytes@^5.6.0: +pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== +pretty-bytes@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" + integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== + pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -5243,6 +6404,13 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" @@ -5260,12 +6428,31 @@ reftools@^1.1.9: resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexp.prototype.flags@^1.5.2: +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -5280,6 +6467,25 @@ regexpp@^3.0.0, regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" @@ -5317,7 +6523,7 @@ resolve.exports@^2.0.2: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.1, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -5351,6 +6557,16 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + rollup-plugin-visualizer@5.9.0: version "5.9.0" resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz#013ac54fb6a9d7c9019e7eb77eced673399e5a0b" @@ -5361,7 +6577,14 @@ rollup-plugin-visualizer@5.9.0: source-map "^0.7.4" yargs "^17.5.1" -rollup@^3.29.1: +rollup@^2.43.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +rollup@^3.29.1, rollup@^3.7.2: version "3.29.4" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== @@ -5424,7 +6647,7 @@ safe-array-concat@^1.1.0: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5471,6 +6694,13 @@ semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semve dependencies: lru-cache "^6.0.0" +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + set-function-length@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" @@ -5483,7 +6713,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-name@^2.0.1: +set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -5652,12 +6882,20 @@ sortablejs@1.14.0: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -5667,6 +6905,18 @@ source-map@^0.7.4: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -5775,6 +7025,21 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.matchall@^4.0.6: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" + side-channel "^1.0.4" + string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -5802,6 +7067,15 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -5814,6 +7088,11 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -5843,7 +7122,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0, supports-color@^7.2.0: +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -5889,6 +7168,31 @@ tabbable@^6.0.1: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terser@^5.0.0: + version "5.27.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.2.tgz#577a362515ff5635f98ba149643793a3973ba77e" + integrity sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -5967,6 +7271,13 @@ tough-cookie@^4.1.3: universalify "^0.2.0" url-parse "^1.5.3" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + tr46@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" @@ -6035,6 +7346,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -6129,6 +7445,36 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + universal-cookie@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" @@ -6209,6 +7555,19 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -6277,6 +7636,19 @@ vite-node@1.3.1: picocolors "^1.0.0" vite "^5.0.0" +vite-plugin-pwa@0.14.4: + version "0.14.4" + resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" + integrity sha512-M7Ct0so8OlouMkTWgXnl8W1xU95glITSKIe7qswZf1tniAstO2idElGCnsrTJ5NPNSx1XqfTCOUj8j94S6FD7Q== + dependencies: + "@rollup/plugin-replace" "^5.0.1" + debug "^4.3.4" + fast-glob "^3.2.12" + pretty-bytes "^6.0.0" + rollup "^3.7.2" + workbox-build "^6.5.4" + workbox-window "^6.5.4" + vite@5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" @@ -6493,6 +7865,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -6536,6 +7913,15 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -6573,11 +7959,106 @@ why-is-node-running@^2.2.2: siginfo "^2.0.0" stackback "0.0.2" +workbox-background-sync@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" + integrity sha512-trJd3ovpWCvzu4sW0E8rV3FUyIcC0W8G+AZ+VcqzzA890AsWZlUGOTSxIMmIHVusUw/FDq1HFWfy/kC/WTRqSg== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-broadcast-update@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.6.1.tgz#0fad9454cf8e4ace0c293e5617c64c75d8a8c61e" + integrity sha512-fBhffRdaANdeQ1V8s692R9l/gzvjjRtydBOvR6WCSB0BNE2BacA29Z4r9/RHd9KaXCPl6JTdI9q0bR25YKP8TQ== + dependencies: + workbox-core "6.6.1" + +workbox-build@^6.5.4: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.6.1.tgz#6010e9ce550910156761448f2dbea8cfcf759cb0" + integrity sha512-INPgDx6aRycAugUixbKgiEQBWD0MPZqU5r0jyr24CehvNuLPSXp/wGOpdRJmts656lNiXwqV7dC2nzyrzWEDnw== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.6.1" + workbox-broadcast-update "6.6.1" + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-google-analytics "6.6.1" + workbox-navigation-preload "6.6.1" + workbox-precaching "6.6.1" + workbox-range-requests "6.6.1" + workbox-recipes "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + workbox-streams "6.6.1" + workbox-sw "6.6.1" + workbox-window "6.6.1" + +workbox-cacheable-response@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.6.1.tgz#284c2b86be3f4fd191970ace8c8e99797bcf58e9" + integrity sha512-85LY4veT2CnTCDxaVG7ft3NKaFbH6i4urZXgLiU4AiwvKqS2ChL6/eILiGRYXfZ6gAwDnh5RkuDbr/GMS4KSag== + dependencies: + workbox-core "6.6.1" + workbox-core@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== +workbox-core@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.6.1.tgz#7184776d4134c5ed2f086878c882728fc9084265" + integrity sha512-ZrGBXjjaJLqzVothoE12qTbVnOAjFrHDXpZe7coCb6q65qI/59rDLwuFMO4PcZ7jcbxY+0+NhUVztzR/CbjEFw== + +workbox-expiration@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.6.1.tgz#a841fa36676104426dbfb9da1ef6a630b4f93739" + integrity sha512-qFiNeeINndiOxaCrd2DeL1Xh1RFug3JonzjxUHc5WkvkD2u5abY3gZL1xSUNt3vZKsFFGGORItSjVTVnWAZO4A== + dependencies: + idb "^7.0.1" + workbox-core "6.6.1" + +workbox-google-analytics@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.6.1.tgz#a07a6655ab33d89d1b0b0a935ffa5dea88618c5d" + integrity sha512-1TjSvbFSLmkpqLcBsF7FuGqqeDsf+uAXO/pjiINQKg3b1GN0nBngnxLcXDYo1n/XxK4N7RaRrpRlkwjY/3ocuA== + dependencies: + workbox-background-sync "6.6.1" + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-navigation-preload@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.6.1.tgz#61a34fe125558dd88cf09237f11bd966504ea059" + integrity sha512-DQCZowCecO+wRoIxJI2V6bXWK6/53ff+hEXLGlQL4Rp9ZaPDLrgV/32nxwWIP7QpWDkVEtllTAK5h6cnhxNxDA== + dependencies: + workbox-core "6.6.1" + workbox-precaching@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" @@ -6587,6 +8068,34 @@ workbox-precaching@6.5.4: workbox-routing "6.5.4" workbox-strategies "6.5.4" +workbox-precaching@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.6.1.tgz#dedeeba10a2d163d990bf99f1c2066ac0d1a19e2" + integrity sha512-K4znSJ7IKxCnCYEdhNkMr7X1kNh8cz+mFgx9v5jFdz1MfI84pq8C2zG+oAoeE5kFrUf7YkT5x4uLWBNg0DVZ5A== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + +workbox-range-requests@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.6.1.tgz#ddaf7e73af11d362fbb2f136a9063a4c7f507a39" + integrity sha512-4BDzk28govqzg2ZpX0IFkthdRmCKgAKreontYRC5YsAPB2jDtPNxqx3WtTXgHw1NZalXpcH/E4LqUa9+2xbv1g== + dependencies: + workbox-core "6.6.1" + +workbox-recipes@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.6.1.tgz#ea70d2b2b0b0bce8de0a9d94f274d4a688e69fae" + integrity sha512-/oy8vCSzromXokDA+X+VgpeZJvtuf8SkQ8KL0xmRivMgJZrjwM3c2tpKTJn6PZA6TsbxGs3Sc7KwMoZVamcV2g== + dependencies: + workbox-cacheable-response "6.6.1" + workbox-core "6.6.1" + workbox-expiration "6.6.1" + workbox-precaching "6.6.1" + workbox-routing "6.6.1" + workbox-strategies "6.6.1" + workbox-routing@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" @@ -6594,6 +8103,13 @@ workbox-routing@6.5.4: dependencies: workbox-core "6.5.4" +workbox-routing@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.6.1.tgz#cba9a1c7e0d1ea11e24b6f8c518840efdc94f581" + integrity sha512-j4ohlQvfpVdoR8vDYxTY9rA9VvxTHogkIDwGdJ+rb2VRZQ5vt1CWwUUZBeD/WGFAni12jD1HlMXvJ8JS7aBWTg== + dependencies: + workbox-core "6.6.1" + workbox-strategies@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" @@ -6601,6 +8117,34 @@ workbox-strategies@6.5.4: dependencies: workbox-core "6.5.4" +workbox-strategies@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.6.1.tgz#38d0f0fbdddba97bd92e0c6418d0b1a2ccd5b8bf" + integrity sha512-WQLXkRnsk4L81fVPkkgon1rZNxnpdO5LsO+ws7tYBC6QQQFJVI6v98klrJEjFtZwzw/mB/HT5yVp7CcX0O+mrw== + dependencies: + workbox-core "6.6.1" + +workbox-streams@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.6.1.tgz#b2f7ba7b315c27a6e3a96a476593f99c5d227d26" + integrity sha512-maKG65FUq9e4BLotSKWSTzeF0sgctQdYyTMq529piEN24Dlu9b6WhrAfRpHdCncRS89Zi2QVpW5V33NX8PgH3Q== + dependencies: + workbox-core "6.6.1" + workbox-routing "6.6.1" + +workbox-sw@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.6.1.tgz#d4c4ca3125088e8b9fd7a748ed537fa0247bd72c" + integrity sha512-R7whwjvU2abHH/lR6kQTTXLHDFU2izht9kJOvBRYK65FbwutT4VvnUAJIgHvfWZ/fokrOPhfoWYoPCMpSgUKHQ== + +workbox-window@6.6.1, workbox-window@^6.5.4: + version "6.6.1" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.6.1.tgz#f22a394cbac36240d0dadcbdebc35f711bb7b89e" + integrity sha512-wil4nwOY58nTdCvif/KEZjQ2NP8uk3gGeRNy2jPBbzypU4BT4D9L8xiwbmDBpZlSgJd2xsT9FvSNU0gsxV51JQ== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.6.1" + wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -6649,6 +8193,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" From d2ca28ca47f0f59299d483684ccf2b304dba45d6 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Wed, 21 Feb 2024 16:03:18 +0100 Subject: [PATCH 351/371] fix(tests): fix localhost test Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2701> --- front/test/specs/store/instance.spec.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/front/test/specs/store/instance.spec.ts b/front/test/specs/store/instance.spec.ts index 61ccd79b4..cd1dbae48 100644 --- a/front/test/specs/store/instance.spec.ts +++ b/front/test/specs/store/instance.spec.ts @@ -7,7 +7,6 @@ import { findDefaultInstanceUrl, TAURI_DEFAULT_INSTANCE_URL } from '~/store/inst afterEach(() => { vi.unstubAllEnvs() - vi.unstubAllGlobals() }) describe('findDefaultInstanceUrl', () => { @@ -22,7 +21,6 @@ describe('findDefaultInstanceUrl', () => { }) test('location origin', () => { - vi.stubGlobal('location', new URL('https://example.com')) - expect(findDefaultInstanceUrl()).toBe('https://example.com/') + expect(findDefaultInstanceUrl()).toBe('http://localhost:3000/') }) }) From c67884a2454706e1e7804c14b9807918b2aa28a9 Mon Sep 17 00:00:00 2001 From: Tron <cocipop402@xgh6.com> Date: Sat, 24 Feb 2024 09:00:51 +0000 Subject: [PATCH 352/371] Added translation using Weblate (Bengali) --- front/src/locales/bn.json | 4615 +++++++++++++++++++++++++++++++++++++ 1 file changed, 4615 insertions(+) create mode 100644 front/src/locales/bn.json diff --git a/front/src/locales/bn.json b/front/src/locales/bn.json new file mode 100644 index 000000000..c7cc4c240 --- /dev/null +++ b/front/src/locales/bn.json @@ -0,0 +1,4615 @@ +{ + "App": { + "loading": "" + }, + "components": { + "About": { + "description": { + "findApp": "", + "funkwhale": "", + "publicContent": "", + "quota": "", + "signup": "" + }, + "header": { + "aboutPod": "", + "findApp": "", + "funkwhale": "", + "publicContent": "", + "signup": "" + }, + "help": { + "closedRegistrations": "" + }, + "link": { + "findOtherPod": "", + "learnMore": "" + }, + "message": { + "greeting": "", + "loggedIn": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "AboutPod": { + "feature": { + "allowList": "", + "anonymousAccess": "", + "federation": "", + "quota": "", + "registrations": "", + "status": { + "closed": "", + "disabled": "", + "enabled": "", + "open": "" + }, + "version": "" + }, + "header": { + "about": "", + "contact": "", + "features": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "link": { + "about": "", + "features": "", + "introduction": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "message": { + "contact": "" + }, + "notApplicable": "", + "placeholder": { + "noDescription": "", + "noRules": "", + "noTerms": "" + }, + "stat": { + "activeUsers": "", + "albumsCount": "", + "artistsCount": "", + "hoursOfMusic": "", + "listeningsCount": "", + "tracksCount": "" + }, + "title": "" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "", + "paragraph2": "" + }, + "quota": "", + "signup": "" + }, + "header": { + "about": "", + "aboutFunkwhale": "", + "contact": "", + "links": "", + "login": "", + "newAlbums": "", + "newChannels": "", + "signup": "", + "statistics": "", + "welcome": "" + }, + "help": { + "registrationsClosed": "" + }, + "link": { + "findOtherPod": "", + "funkwhale": "", + "learnMore": "", + "mobileApps": { + "description": "", + "label": "" + }, + "publicContent": { + "description": "", + "label": "" + }, + "rules": "", + "userGuides": { + "description": "", + "label": "" + }, + "viewMore": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "PageNotFound": { + "header": { + "pageNotFound": "" + }, + "link": { + "home": "" + }, + "message": { + "pageNotFound": "" + }, + "title": "" + }, + "Queue": { + "button": { + "clear": "", + "close": "", + "stopRadio": "" + }, + "header": { + "failure": "", + "noSources": "", + "radio": "" + }, + "label": { + "addArtistContentFilter": "", + "duration": "", + "enterFullscreen": "", + "exitFullscreen": "", + "favorite": "", + "next": "", + "pause": "", + "play": "", + "populatingRadio": "", + "previous": "", + "queue": "", + "remove": "", + "restart": "", + "selectTrack": "", + "showCoverArt": "", + "showVisualizer": "" + }, + "message": { + "automaticPlay": "", + "radio": "", + "webglUnsupported": "" + }, + "meta": { + "end": "", + "queuePosition": "", + "startTime": "", + "unknownAlbum": "", + "unknownArtist": "" + }, + "warning": { + "connectivity": "" + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "", + "rss": "", + "search": "" + }, + "description": { + "fediverse": "", + "rss": "" + }, + "error": { + "fetchFailed": "" + }, + "header": { + "fetchFailed": "" + }, + "label": { + "fediverse": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + }, + "rss": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + } + }, + "warning": { + "unsupported": "" + } + }, + "ShortcutsModal": { + "button": { + "close": "" + }, + "header": { + "modal": "" + }, + "shortcut": { + "audio": { + "clearQueue": "", + "decreaseVolume": "", + "expandQueue": "", + "increaseVolume": "", + "label": "", + "playNext": "", + "playPause": "", + "playPrevious": "", + "seekBack30": "", + "seekBack5": "", + "seekForward30": "", + "seekForward5": "", + "shuffleQueue": "", + "toggleFavorite": "", + "toggleLoop": "", + "toggleMute": "" + }, + "general": { + "focus": "", + "label": "", + "show": "", + "unfocus": "" + } + } + }, + "Sidebar": { + "header": { + "administration": "", + "explore": "", + "library": "", + "main": "", + "more": "" + }, + "label": { + "add": "", + "administration": "", + "edits": "", + "follows": "", + "language": "", + "main": "", + "play": "", + "reports": "", + "theme": "" + }, + "link": { + "about": "", + "albums": "", + "artists": "", + "browse": "", + "channels": "", + "createAccount": "", + "favorites": "", + "home": "", + "library": "", + "login": "", + "moderation": "", + "playlists": "", + "podcasts": "", + "radios": "", + "search": "", + "settings": "", + "switchInstance": "", + "users": "" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "" + }, + "header": { + "error": "", + "image": "" + }, + "message": { + "success": "" + } + }, + "SignupFormBuilder": { + "button": { + "add": "", + "edit": "", + "preview": "" + }, + "help": { + "additionalFields": "", + "helpText": "" + }, + "label": { + "additionalField": "", + "additionalFields": "", + "delete": "", + "helpText": "", + "moveDown": "", + "moveUp": "" + }, + "table": { + "additionalFields": { + "header": { + "actions": "", + "label": "", + "required": "", + "type": "" + }, + "required": { + "false": "", + "true": "" + }, + "type": { + "long": "", + "short": "" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "ChannelEntries": { + "help": { + "subscribe": "" + } + }, + "ChannelForm": { + "header": { + "error": "" + }, + "help": { + "discography": "", + "podcast": "", + "podcastFields": "", + "username": "" + }, + "label": { + "category": "", + "description": "", + "discography": "", + "email": "", + "image": "", + "language": "", + "name": "", + "owner": "", + "podcast": "", + "subcategory": "", + "tags": "", + "username": "" + }, + "legend": { + "purpose": "" + }, + "loader": { + "loading": "" + }, + "placeholder": { + "name": "", + "username": "" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "" + } + }, + "ChannelSeries": { + "button": { + "showMore": "" + }, + "help": { + "subscribe": "" + } + }, + "ChannelsWidget": { + "button": { + "showMore": "" + } + }, + "EmbedWizard": { + "button": { + "copy": "" + }, + "header": { + "preview": "" + }, + "help": { + "anonymous": "", + "embed": "", + "width": "" + }, + "label": { + "embed": "", + "height": "", + "width": "" + }, + "message": { + "copy": "" + }, + "warning": { + "anonymous": "" + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "", + "follow": "", + "unfollow": "" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "", + "addToQueue": "", + "discretePlay": "", + "episodeDetails": "", + "hideArtist": "", + "playAlbum": "", + "playArtist": "", + "playNext": "", + "playNow": "", + "playPlaylist": "", + "playTrack": "", + "playTracks": "", + "report": "", + "startRadio": "", + "trackDetails": "" + }, + "title": { + "more": "", + "unavailable": "" + } + }, + "Player": { + "header": { + "player": "" + }, + "label": { + "addArtistContentFilter": "", + "audioPlayer": "", + "clearQueue": "", + "expandQueue": "", + "loopingDisabled": "", + "loopingSingle": "", + "loopingWholeQueue": "", + "mute": "", + "nextTrack": "", + "pause": "", + "play": "", + "previousTrack": "", + "shuffleQueue": "", + "unmute": "" + }, + "meta": { + "position": "", + "unknownAlbum": "", + "unknownArtist": "" + } + }, + "PlayerControls": { + "labels": { + "next": "", + "pause": "", + "play": "", + "previous": "" + } + }, + "Search": { + "empty": { + "noAlbums": "", + "noArtists": "" + }, + "header": { + "albums": "", + "artists": "", + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "SearchBar": { + "empty": { + "noResults": "" + }, + "header": { + "noResults": "" + }, + "label": { + "album": "", + "artist": "", + "category": { + "federation": "", + "podcasts": "" + }, + "search": "", + "tag": "", + "track": "" + }, + "link": { + "fediverse": "", + "more": "", + "rss": "" + }, + "placeholder": { + "search": "" + } + }, + "VolumeControl": { + "button": { + "mute": "", + "unmute": "" + }, + "label": { + "slider": "" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "", + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + }, + "Table": { + "table": { + "header": { + "album": "", + "artist": "", + "title": "" + } + } + }, + "Widget": { + "button": { + "more": "" + }, + "empty": { + "noResults": "" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "" + }, + "header": { + "appDetails": "", + "appSecretWarning": "", + "editApp": "" + }, + "help": { + "appDetails": "" + }, + "label": { + "accessToken": "", + "appId": "", + "appSecret": "" + }, + "link": { + "settings": "" + }, + "message": { + "appSecretWarning": "" + }, + "title": "" + }, + "ApplicationForm": { + "button": { + "create": "", + "update": "" + }, + "header": { + "failure": "" + }, + "help": { + "redirectUri": "" + }, + "label": { + "name": "", + "redirectUri": "", + "scopes": { + "description": "", + "label": "", + "read": { + "description": "", + "label": "" + }, + "write": { + "description": "", + "label": "" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "" + }, + "title": "" + }, + "Authorize": { + "button": { + "authorize": "" + }, + "header": { + "access": "", + "allScopes": "", + "authorize": "", + "authorizeFailure": "", + "fetchFailure": "", + "readOnly": "", + "writeOnly": "" + }, + "help": { + "copyCode": "", + "pasteCode": "", + "redirect": "" + }, + "message": { + "unknownPermissions": "" + }, + "title": "" + }, + "LoginForm": { + "button": { + "login": "" + }, + "header": { + "loginFailure": "" + }, + "help": { + "approvalRequired": "", + "invalidCredentials": "" + }, + "label": { + "password": "", + "username": "" + }, + "link": { + "createAccount": "", + "resetPassword": "" + }, + "message": { + "redirect": "" + }, + "placeholder": { + "username": "" + } + }, + "Logout": { + "button": { + "logout": "" + }, + "header": { + "confirm": "", + "unauthenticated": "" + }, + "link": { + "login": "" + }, + "message": { + "loggedIn": "" + }, + "title": "" + }, + "Plugin": { + "button": { + "save": "", + "scan": "" + }, + "description": { + "library": "" + }, + "header": { + "failure": "" + }, + "label": { + "library": "", + "pluginEnabled": "" + }, + "link": { + "documentation": "" + } + }, + "Settings": { + "button": { + "delete": "", + "deleteAccount": "", + "deleteAccountConfirm": "", + "disableSubsonic": "", + "edit": "", + "password": "", + "refresh": "", + "remove": "", + "removeApp": "", + "revoke": "", + "revokeAccess": "", + "update": "", + "updateSettings": "" + }, + "description": { + "authorizedApps": "", + "changeEmail": "", + "changePassword": { + "paragraph1": "", + "paragraph2": "" + }, + "contentFilters": "", + "deleteAccount": "", + "plugins": "", + "yourApps": "" + }, + "header": { + "accountFailure": "", + "accountSettings": "", + "authorizedApps": "", + "avatar": "", + "avatarFailure": "", + "changeEmail": "", + "changePassword": "", + "contentFilters": "", + "deleteAccount": "", + "emailFailure": "", + "hiddenArtists": "", + "noApps": "", + "noPersonalApps": "", + "passwordFailure": "", + "plugins": "", + "settingsUpdated": "", + "updateFailure": "", + "yourApps": "" + }, + "help": { + "changePassword": "", + "noApps": "", + "noPersonalApps": "" + }, + "label": { + "avatar": "", + "currentPassword": "", + "newEmail": "", + "newPassword": "", + "password": "" + }, + "link": { + "managePlugins": "", + "newApp": "" + }, + "message": { + "confirmDelete": "", + "currentEmail": "" + }, + "modal": { + "changePassword": { + "content": { + "logout": "", + "subsonic": "", + "warning": "" + }, + "header": "" + }, + "deleteAccount": { + "content": { + "warning": "" + }, + "header": "" + }, + "deleteApp": { + "content": { + "warning": "" + }, + "header": "" + }, + "revokeApp": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "", + "name": "" + } + }, + "authorizedApps": { + "header": { + "application": "", + "permissions": "" + } + }, + "yourApps": { + "header": { + "application": "", + "creationDate": "", + "scopes": "" + } + } + }, + "title": "", + "warning": { + "deleteAccount": "" + } + }, + "SignupForm": { + "button": { + "create": "" + }, + "header": { + "login": "", + "signupFailure": "" + }, + "label": { + "email": "", + "invitation": "", + "password": "", + "username": "" + }, + "message": { + "accountCreated": "", + "awaitingReview": "", + "registrationClosed": "", + "requiresReview": "" + }, + "placeholder": { + "email": "", + "invitation": "", + "username": "" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "", + "confirmNewPassword": "", + "disable": "", + "newPassword": "" + }, + "description": { + "subsonic": { + "paragraph1": "", + "paragraph2": "", + "paragraph3": "" + } + }, + "header": { + "error": "", + "subsonic": "" + }, + "label": { + "subsonicField": "" + }, + "link": { + "apps": "" + }, + "message": { + "accessDisabled": "", + "passwordUpdated": "", + "unavailable": "" + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "" + }, + "header": "" + }, + "newPassword": { + "content": { + "warning": "" + }, + "header": "" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "" + }, + "label": { + "albumTitle": "" + } + }, + "AlbumModal": { + "button": { + "cancel": "", + "create": "" + }, + "header": { + "newAlbum": "", + "newSeries": "" + } + }, + "AlbumSelect": { + "label": { + "album": "", + "series": "" + }, + "meta": { + "tracks": "" + }, + "option": { + "none": "" + } + }, + "LicenseSelect": { + "label": { + "license": "" + }, + "link": { + "license": "" + }, + "option": { + "none": "" + } + }, + "SubscribeButton": { + "help": { + "auth": "" + }, + "title": { + "subscribe": "", + "unsubscribe": "" + } + }, + "UploadForm": { + "button": { + "edit": "", + "ignore": "", + "remove": "", + "resume": "", + "retry": "" + }, + "description": { + "extensions": "" + }, + "header": { + "error": "" + }, + "help": { + "license": "" + }, + "label": { + "channel": "", + "openBrowser": "" + }, + "message": { + "dragAndDrop": "", + "pending": "" + }, + "status": { + "errored": "", + "pending": "", + "uploading": "" + }, + "warning": { + "quota": "" + } + }, + "UploadMetadataForm": { + "label": { + "description": "", + "image": "", + "position": "", + "tags": "", + "title": "" + } + }, + "UploadModal": { + "button": { + "cancel": "", + "close": "", + "finishLater": "", + "next": "", + "previous": "", + "publish": "", + "update": "" + }, + "header": { + "processing": "", + "publish": "", + "uploadDetails": "", + "uploadFiles": "" + }, + "meta": { + "files": "", + "quota": "" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "", + "go": "", + "launch": "", + "refresh": "", + "select": "", + "selectAll": "", + "selectCurrentPage": "", + "selectElement": "", + "selected": "" + }, + "header": { + "error": "" + }, + "label": { + "actions": "", + "performAction": "" + }, + "message": { + "needsRefresh": "", + "success": "" + }, + "modal": { + "performAction": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "" + }, + "header": { + "failure": "" + }, + "help": { + "upload": "" + }, + "label": { + "upload": "" + }, + "loader": { + "uploading": "" + } + }, + "CollapseLink": { + "button": { + "collapse": "", + "expand": "" + } + }, + "ContentForm": { + "button": { + "preview": "", + "write": "" + }, + "empty": { + "noContent": "" + }, + "help": { + "markdown": "" + }, + "placeholder": { + "input": "" + } + }, + "CopyInput": { + "button": { + "copy": "" + }, + "message": { + "success": "" + } + }, + "DangerousButton": { + "button": { + "cancel": "", + "confirm": "" + }, + "header": { + "confirm": "" + } + }, + "Duration": { + "meta": { + "hours": "", + "minutes": "" + } + }, + "EmptyState": { + "button": { + "refresh": "" + }, + "header": { + "noResults": "" + } + }, + "ExpandableDiv": { + "button": { + "less": "", + "more": "" + } + }, + "InlineSearchBar": { + "button": { + "clear": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "LoginModal": { + "description": { + "noAccess": "" + }, + "header": { + "unauthenticated": "" + }, + "link": { + "login": "", + "signup": "" + } + }, + "RenderedDescription": { + "button": { + "cancel": "", + "edit": "", + "less": "", + "more": "", + "update": "" + }, + "empty": { + "noDescription": "" + }, + "header": { + "failure": "" + } + }, + "UserLink": { + "link": { + "username": "" + } + }, + "UserMenu": { + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + }, + "UserModal": { + "button": { + "switchInstance": "" + }, + "header": { + "options": "" + }, + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "" + }, + "header": { + "favorites": "" + }, + "link": { + "library": "" + }, + "loader": { + "loading": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "title": "" + }, + "TrackFavoriteIcon": { + "button": { + "add": "", + "remove": "" + }, + "label": { + "inFavorites": "" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "", + "reload": "" + }, + "description": { + "failure": "", + "pending": "", + "skipped": "", + "success": "" + }, + "header": { + "failure": "", + "pending": "", + "refresh": "", + "saveFailure": "", + "skipped": "", + "success": "" + }, + "loader": { + "awaitingResult": "", + "fetchRequest": "" + }, + "table": { + "error": { + "label": { + "detail": "", + "type": "" + }, + "value": { + "connectionError": "", + "httpError": "", + "httpStatus": "", + "invalidAttributesError": "", + "invalidJsonError": "", + "timeoutError": "", + "unknownError": "" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "" + }, + "empty": { + "noMatch": "" + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "" + }, + "message": { + "copy": "" + }, + "title": "" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "" + }, + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "AlbumDetail": { + "description": { + "libraries": "" + }, + "header": { + "episodes": "", + "libraries": "", + "tracks": "" + }, + "meta": { + "volume": "" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "", + "delete": "", + "edit": "", + "embed": "", + "more": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Albums": { + "button": { + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "link": { + "addMusic": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "ArtistBase": { + "button": { + "cancel": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "", + "wikipedia": "" + }, + "meta": { + "albums": "", + "tracks": "" + }, + "modal": { + "embed": { + "header": "" + } + }, + "title": "" + }, + "ArtistDetail": { + "button": { + "filter": "", + "more": "" + }, + "description": { + "library": "" + }, + "header": { + "album": "", + "library": "", + "track": "" + }, + "link": { + "filter": "" + }, + "message": { + "filter": "" + } + }, + "ArtistEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Artists": { + "button": { + "search": "", + "upload": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "excludeCompilation": "", + "search": "", + "tags": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "EditCard": { + "button": { + "approve": "", + "delete": "", + "reject": "" + }, + "header": { + "modification": "" + }, + "link": { + "track": "" + }, + "modal": { + "content": { + "warning": "" + }, + "delete": { + "header": "" + } + }, + "status": { + "applied": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "table": { + "update": { + "header": { + "field": "", + "newValue": "", + "oldValue": "" + }, + "notApplicable": "" + } + } + }, + "EditForm": { + "button": { + "cancel": "", + "clear": "", + "new": "", + "reset": "", + "showAll": "", + "showUnreviewed": "", + "submit": "", + "suggest": "" + }, + "empty": { + "suggestEdit": "" + }, + "header": { + "failure": "", + "recentEdits": "", + "success": "", + "unreviewed": "" + }, + "label": { + "summary": "" + }, + "message": { + "noPermission": "" + }, + "notApplicable": "", + "placeholder": { + "summary": "" + } + }, + "FileUpload": { + "button": { + "cancel": "", + "retry": "" + }, + "description": { + "import": "", + "previousImport": "" + }, + "empty": { + "noFiles": "" + }, + "header": { + "failure": "", + "local": "", + "server": "", + "status": "" + }, + "label": { + "extensions": "", + "remainingSpace": "", + "uploadWidget": "" + }, + "link": { + "picard": "", + "processing": "", + "uploading": "" + }, + "message": { + "listener": "", + "local": { + "copyright": "", + "format": "", + "message": "", + "tag": "" + } + }, + "table": { + "upload": { + "header": { + "actions": "", + "filename": "", + "size": "", + "status": "" + }, + "progress": "", + "status": { + "pending": "", + "uploaded": "", + "uploading": "" + } + } + }, + "tooltip": { + "denied": "", + "extension": "", + "network": "", + "retry": "", + "size": "", + "timeout": "" + } + }, + "FsBrowser": { + "button": { + "import": "" + } + }, + "FsLogs": { + "empty": { + "notStarted": "" + } + }, + "Home": { + "header": { + "newChannels": "", + "playlists": "", + "recentlyAdded": "", + "recentlyFavorited": "", + "recentlyListened": "" + }, + "title": "" + }, + "ImportStatusModal": { + "button": { + "close": "" + }, + "error": { + "importFailure": "", + "invalidMetadata": { + "label": "", + "message": "" + }, + "unknownError": { + "label": "", + "message": "" + } + }, + "header": { + "importDetail": "" + }, + "link": { + "documentation": "", + "support": "" + }, + "message": { + "importDetail": "", + "importSuccess": "" + }, + "table": { + "error": { + "debug": "", + "errorDetail": "", + "errorType": "", + "help": "" + } + }, + "warning": { + "importSkipped": "" + } + }, + "Podcasts": { + "button": { + "cancel": "", + "channel": "", + "feed": "", + "search": "", + "subscribe": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "Radios": { + "button": { + "add": "", + "create": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "instance": "", + "user": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "TagDetail": { + "header": { + "channels": "", + "tracks": "" + }, + "link": { + "albums": "", + "artists": "", + "moderation": "" + } + }, + "TagSelector": { + "placeholder": { + "search": "" + } + }, + "TrackBase": { + "button": { + "cancel": "", + "delete": "", + "download": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "wikipedia": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "subtitle": { + "with-uploader": "", + "without-uploader": "" + }, + "title": "" + }, + "TrackDetail": { + "description": { + "library": "" + }, + "header": { + "episode": "", + "library": "", + "playlists": "", + "release": "", + "track": "" + }, + "link": { + "musicbrainz": "" + }, + "notApplicable": "", + "table": { + "release": { + "album": "", + "artist": "", + "copyright": "", + "license": "", + "series": "", + "url": "", + "year": "" + }, + "track": { + "bitrate": { + "label": "", + "value": "" + }, + "codec": "", + "downloads": "", + "duration": "", + "size": "" + } + } + }, + "TrackEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "radios": { + "Builder": { + "button": { + "filter": "", + "save": "" + }, + "description": { + "builder": "" + }, + "header": { + "builder": "", + "created": "", + "matches": "", + "updated": "" + }, + "label": { + "description": "", + "filter": "", + "name": "", + "public": "" + }, + "option": { + "filter": "" + }, + "placeholder": { + "description": "", + "name": "" + }, + "table": { + "filter": { + "header": { + "actions": "", + "candidates": "", + "config": "", + "exclude": "", + "name": "" + } + } + }, + "title": "" + }, + "Filter": { + "cancelButton": "", + "excludeLabel": "", + "matchingTracks": "", + "matchingTracksModalHeader": "", + "removeButton": "" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "channel": { + "header": { + "account": "", + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "album": { + "header": { + "artist": "", + "creationDate": "", + "domain": "", + "name": "", + "releaseDate": "", + "tracks": "" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "artist": { + "header": { + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "", + "status": "" + }, + "option": { + "all": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "library": { + "header": { + "account": "", + "creationDate": "", + "domain": "", + "followers": "", + "name": "", + "uploads": "", + "visibility": "" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "tag": { + "header": { + "albums": "", + "artists": "", + "creationDate": "", + "name": "", + "tracks": "" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "track": { + "header": { + "album": "", + "artist": "", + "creationDate": "", + "domain": "", + "license": "", + "title": "" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "status": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "option": { + "all": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "upload": { + "header": { + "accessedDate": "", + "account": "", + "creationDate": "", + "domain": "", + "importStatus": "", + "library": "", + "name": "", + "size": "", + "visibility": "" + } + } + } + } + }, + "moderation": { + "AccountsTable": { + "action": { + "purge": { + "label": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "account": { + "header": { + "domain": "", + "firstSeen": "", + "lastSeen": "", + "moderationRule": "", + "name": "", + "uploads": "" + }, + "moderationRule": "" + } + } + }, + "DomainsTable": { + "action": { + "add": { + "label": "" + }, + "purge": { + "label": "" + }, + "remove": { + "label": "" + } + }, + "empty": { + "noPods": "" + }, + "label": { + "inList": "", + "search": "" + }, + "link": { + "list": "" + }, + "option": { + "all": "", + "no": "", + "yes": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "domain": { + "header": { + "firstSeen": "", + "moderationRule": "", + "name": "", + "receivedMessages": "", + "users": "" + }, + "moderationRule": "" + } + } + }, + "InstancePolicyCard": { + "button": { + "edit": "" + }, + "header": { + "rule": "" + }, + "label": { + "blockAll": "", + "muteActivity": "", + "muteNotifications": "", + "reason": "", + "rejectMedia": "" + }, + "status": { + "enabled": "", + "paused": "" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "", + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "header": { + "addRule": "", + "editRule": "", + "failure": "" + }, + "label": { + "blockAll": "", + "customizeRule": "", + "policyDisabled": "", + "policyEnabled": "", + "policyReason": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "blockAll": "", + "isActive": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "", + "summary": "" + } + }, + "InstancePolicyModal": { + "button": { + "close": "", + "show": "" + }, + "modal": { + "manage": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "NoteForm": { + "button": { + "add": "" + }, + "header": { + "failure": "" + }, + "placeholder": { + "summary": "" + } + }, + "NotesThread": { + "button": { + "delete": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "ReportCard": { + "button": { + "confirmDelete": "", + "delete": "", + "resolve": "", + "unresolve": "" + }, + "header": { + "actions": "", + "message": "", + "notes": "", + "reportedObject": "" + }, + "link": { + "moderation": "", + "publicPage": "", + "report": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "object": { + "account": "", + "domain": "", + "local": "", + "owner": "", + "type": "" + }, + "report": { + "category": "", + "creationDate": "", + "submittedBy": "" + }, + "status": { + "assignedTo": "", + "internalNotes": "", + "resolutionDate": "", + "resolved": "", + "status": "", + "unresolved": "" + } + }, + "warning": { + "objectDeleted": "" + } + }, + "UserRequestCard": { + "button": { + "approve": "", + "reject": "" + }, + "header": { + "actions": "", + "notes": "", + "signup": "" + }, + "link": { + "request": "" + }, + "message": { + "signup": "" + }, + "notApplicable": "", + "table": { + "request": { + "creationDate": "", + "submittedBy": "" + }, + "status": { + "approved": "", + "assignedTo": "", + "internalNotes": "", + "pending": "", + "refused": "", + "resolutionDate": "", + "status": "" + } + } + } + }, + "users": { + "InvitationForm": { + "button": { + "clear": "", + "new": "" + }, + "header": { + "failure": "" + }, + "label": { + "invite": "" + }, + "placeholder": { + "invitation": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "link": "" + } + } + } + }, + "InvitationsTable": { + "action": { + "delete": "" + }, + "label": { + "expired": "", + "search": "", + "status": "", + "unused": "", + "used": "" + }, + "option": { + "all": "", + "expired": "", + "open": "" + }, + "ordering": { + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "creationDate": "", + "expirationDate": "", + "owner": "", + "status": "", + "user": "" + } + } + } + }, + "UsersTable": { + "label": { + "search": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "permission": { + "library": "", + "moderation": "", + "settings": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "user": { + "accountStatus": { + "active": "", + "inactive": "" + }, + "header": { + "accountStatus": "", + "email": "", + "lastActivity": "", + "permissions": "", + "signup": "", + "status": "", + "username": "" + }, + "status": { + "admin": "", + "regular": "", + "staff": "" + } + } + } + } + } + }, + "moderation": { + "FilterModal": { + "button": { + "cancel": "", + "hide": "" + }, + "header": { + "failure": "", + "modal": "" + }, + "help": { + "createFilter": "" + }, + "message": { + "success": "" + }, + "warning": { + "createFilter": { + "listIntro": "", + "listItem1": "", + "listItem2": "", + "listItem3": "", + "listItem4": "" + } + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "" + }, + "option": { + "all": "" + } + }, + "ReportModal": { + "button": { + "cancel": "", + "submit": "" + }, + "description": { + "email": "", + "forwardToDomain": "", + "message": "", + "modal": "" + }, + "error": { + "nodeinfoFetch": "" + }, + "header": { + "disabled": "", + "modal": "", + "submissionFailure": "" + }, + "label": { + "email": "", + "forwardToDomain": "", + "message": "" + }, + "message": { + "submissionSuccess": "" + } + } + }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "", + "markRead": "", + "markUnread": "", + "reject": "" + }, + "message": { + "libraryAcceptFollow": "", + "libraryFollow": "", + "libraryPendingFollow": "", + "libraryReject": "" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Editor": { + "button": { + "addDuplicate": "", + "clear": "", + "copy": "", + "insertFromQueue": "" + }, + "error": { + "sync": "" + }, + "header": { + "editor": "" + }, + "help": { + "reorder": "" + }, + "loading": { + "sync": "" + }, + "message": { + "sync": "" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "warning": { + "duplicate": "" + } + }, + "Form": { + "button": { + "create": "", + "update": "" + }, + "header": { + "createFailure": "", + "createPlaylist": "", + "createSuccess": "", + "updateSuccess": "" + }, + "label": { + "name": "", + "visibility": "" + }, + "placeholder": { + "name": "" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "", + "addToPlaylist": "", + "addTrack": "", + "cancel": "", + "edit": "" + }, + "empty": { + "noPlaylists": "" + }, + "header": { + "addFailure": "", + "addToPlaylist": "", + "available": "", + "manage": "", + "noResults": "", + "track": "" + }, + "label": { + "filter": "" + }, + "placeholder": { + "filterPlaylist": "" + }, + "table": { + "edit": { + "header": { + "edit": "", + "lastModification": "", + "name": "", + "tracks": "" + } + } + }, + "warning": { + "duplicate": "" + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "" + } + }, + "Widget": { + "button": { + "create": "", + "more": "" + }, + "placeholder": { + "noPlaylists": "" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "", + "startPlaylistsRadio": "", + "startRadio": "", + "startTagsRadio": "", + "stopArtistsRadio": "", + "stopPlaylistsRadio": "", + "stopRadio": "", + "stopTagsRadio": "" + }, + "Card": { + "button": { + "edit": "" + } + } + }, + "tags": { + "List": { + "button": { + "more": "" + } + } + }, + "vui": { + "Pagination": { + "label": "", + "next": "", + "previous": "" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "", + "other": "", + "podcast": "" + }, + "label": "" + }, + "importStatus": { + "choices": { + "draft": { + "help": "", + "label": "" + }, + "errored": { + "help": "", + "label": "" + }, + "finished": { + "help": "", + "label": "" + }, + "pending": { + "help": "", + "label": "" + }, + "skipped": { + "help": "", + "label": "" + } + }, + "label": "" + }, + "privacyLevel": { + "choices": { + "instance": "", + "private": "", + "public": "" + }, + "help": "", + "label": "", + "shortChoices": { + "instance": "", + "private": "", + "public": "" + } + }, + "reportType": { + "choices": { + "illegalContent": "", + "invalidMetadata": "", + "offensiveContent": "", + "other": "", + "takedownRequest": "" + }, + "label": "" + }, + "summary": { + "label": "" + } + }, + "filters": { + "accessedDate": "", + "albumTitle": "", + "appliedDate": "", + "artistName": "", + "bitrate": "", + "creationDate": "", + "dateJoined": "", + "domain": "", + "duration": "", + "expirationDate": "", + "firstSeen": "", + "followers": "", + "handledDate": "", + "itemsCount": "", + "lastActivity": "", + "lastSeen": "", + "modificationDate": "", + "name": "", + "receivedMessages": "", + "releaseDate": "", + "size": "", + "trackTitle": "", + "uploads": "", + "username": "", + "users": "" + }, + "scopes": { + "edits": { + "description": "", + "label": "" + }, + "favorites": { + "description": "", + "label": "" + }, + "filters": { + "description": "", + "label": "" + }, + "follows": { + "description": "", + "label": "" + }, + "libraries": { + "description": "", + "label": "" + }, + "listenings": { + "description": "", + "label": "" + }, + "notifications": { + "description": "", + "label": "" + }, + "playlists": { + "description": "", + "label": "" + }, + "profile": { + "description": "", + "label": "" + }, + "radios": { + "description": "", + "label": "" + }, + "reports": { + "description": "", + "label": "" + }, + "security": { + "description": "", + "label": "" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "", + "title": "" + }, + "artist": { + "name": "" + }, + "cover": { + "label": "" + }, + "description": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "license": "", + "position": "", + "title": "" + } + }, + "useReport": { + "account": { + "label": "", + "typeLabel": "" + }, + "album": { + "label": "", + "typeLabel": "" + }, + "artist": { + "label": "", + "typeLabel": "", + "unknownLabel": "" + }, + "channel": { + "label": "", + "typeLabel": "" + }, + "library": { + "label": "", + "typeLabel": "" + }, + "playlist": { + "label": "", + "typeLabel": "" + }, + "track": { + "label": "", + "typeLabel": "" + } + }, + "useReportConfigs": { + "account": { + "label": "", + "summary": "" + }, + "album": { + "label": "", + "releaseDate": "", + "title": "" + }, + "artist": { + "label": "" + }, + "channel": { + "label": "" + }, + "creationDate": { + "label": "" + }, + "library": { + "description": "", + "label": "" + }, + "musicbrainzId": { + "label": "" + }, + "name": { + "label": "" + }, + "playlist": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "label": "", + "license": "", + "position": "", + "title": "" + }, + "visibility": { + "label": "" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "", + "errorReportTitle": "", + "leaveFeedback": "", + "unexpectedError": "" + }, + "useThemeList": { + "browserDefault": "", + "darkTheme": "", + "lightTheme": "" + } + }, + "init": { + "axios": { + "rateLimitDelay": "", + "rateLimitLater": "" + }, + "sentry": { + "allow": "", + "deny": "", + "funkwhaleInstance": "", + "message": "", + "title": "" + }, + "serviceWorker": { + "actions": { + "later": "", + "update": "" + }, + "newAppVersion": "" + } + }, + "views": { + "ChooseInstance": { + "button": { + "submit": "" + }, + "header": { + "chooseInstance": "", + "failure": "", + "suggestions": "" + }, + "help": { + "notFunkwhaleServer": "", + "selectPod": "", + "serverDown": "" + }, + "label": { + "url": "" + }, + "message": { + "currentConnection": "", + "newUrl": "" + } + }, + "Notifications": { + "button": { + "read": "", + "submit": "" + }, + "empty": { + "notifications": "" + }, + "header": { + "funkwhaleSupport": "", + "instanceSupport": "", + "messages": "", + "notifications": "" + }, + "label": { + "reminder": "", + "showRead": "" + }, + "link": { + "donate": "", + "help": "" + }, + "loading": { + "notifications": "" + }, + "message": { + "funkwhaleSupport": "" + }, + "option": { + "delay": { + "30": "", + "60": "", + "90": "", + "never": "" + } + }, + "title": "" + }, + "Search": { + "button": { + "submit": "" + }, + "header": { + "remote": "", + "rss": "", + "search": "" + }, + "label": { + "albums": "", + "artists": "", + "playlists": "", + "podcasts": "", + "radios": "", + "series": "", + "tags": "", + "tracks": "" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "", + "openRemote": "", + "refresh": "" + }, + "header": { + "activity": "", + "audioContent": "", + "channelData": "" + }, + "label": { + "local": "" + }, + "link": { + "django": "", + "localProfile": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "edits": "", + "favorited": "", + "firstSeen": "", + "linkedReports": "", + "listenings": "", + "playlists": "" + }, + "audioContent": { + "albums": "", + "cachedSize": "", + "totalSize": "", + "tracks": "", + "uploads": "" + }, + "channelData": { + "account": "", + "category": "", + "description": "", + "domain": "", + "name": "", + "rss": "", + "url": "" + } + }, + "warning": { + "stats": "" + } + }, + "CommonList": { + "title": { + "accounts": "", + "albums": "", + "artists": "", + "channels": "", + "invitations": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "", + "users": "" + } + }, + "Settings": { + "header": { + "channels": "", + "federation": "", + "instanceInfo": "", + "moderation": "", + "music": "", + "playlists": "", + "sections": "", + "security": "", + "settings": "", + "signups": "", + "stats": "", + "subsonic": "", + "ui": "" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "albumData": "", + "audioContent": "", + "local": "" + }, + "link": { + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "album": { + "description": "", + "title": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "ArtistDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "artistData": "", + "audioContent": "", + "local": "" + }, + "link": { + "albums": "", + "category": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "artist": { + "description": "", + "name": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "albums": "", + "artists": "", + "channels": "", + "edits": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "EditsList": { + "header": { + "edits": "" + }, + "title": "" + }, + "LibraryDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "libraryData": "", + "local": "" + }, + "link": { + "account": "", + "albums": "", + "artists": "", + "django": "", + "domain": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "", + "followers": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "library": { + "description": "", + "name": "" + } + }, + "warning": { + "stats": "" + } + }, + "TagDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "tagData": "" + }, + "link": { + "albums": "", + "artists": "", + "django": "", + "localProfile": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "" + }, + "tag": { + "name": "" + } + } + }, + "TrackDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "local": "", + "trackData": "" + }, + "link": { + "album": "", + "albumArtist": "", + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "track": { + "copyright": "", + "description": "", + "discNumber": "", + "license": "", + "position": "", + "title": "" + }, + "trackData": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "UploadDetail": { + "button": { + "delete": "", + "download": "" + }, + "header": { + "activity": "", + "audioContent": "", + "local": "", + "uploadData": "" + }, + "link": { + "account": "", + "django": "", + "domain": "", + "importStatus": "", + "library": "", + "remoteProfile": "", + "type": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "activity": { + "accessedDate": "", + "firstSeen": "" + }, + "audioContent": { + "bitrate": { + "label": "", + "value": "" + }, + "cachedSize": "", + "duration": "", + "size": "", + "track": "" + }, + "upload": { + "name": "" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "" + }, + "description": { + "policy": "" + }, + "header": { + "accountData": "", + "activePolicy": "", + "activity": "", + "audioContent": "", + "localAccount": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "domain": "", + "libraries": "", + "linkedReports": "", + "openProfile": "", + "remoteProfile": "", + "requests": "", + "tracks": "", + "uploads": "" + }, + "notApplicable": "", + "option": { + "permission": { + "library": "", + "moderation": "", + "settings": "" + } + }, + "table": { + "accountData": { + "displayName": "", + "email": "", + "lastActivity": "", + "lastChecked": "", + "loginStatus": { + "disabled": "", + "enabled": "", + "label": "" + }, + "permissions": "", + "signupDate": "", + "userType": "", + "username": "" + }, + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "megabyte": "", + "totalSize": "", + "uploadQuota": "" + } + }, + "tooltip": { + "uploadQuota": "" + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "accounts": "", + "domains": "", + "reports": "", + "userRequests": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "DomainsDetail": { + "button": { + "addPolicy": "", + "addToAllowList": "", + "refreshNodeInfo": "", + "removeFromAllowList": "" + }, + "description": { + "policy": "" + }, + "header": { + "activePolicy": "", + "activity": "", + "audioContent": "", + "instanceData": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "knownAccounts": "", + "libraries": "", + "tracks": "", + "uploads": "", + "website": "" + }, + "notApplicable": "", + "table": { + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "instanceData": { + "domainName": "", + "inAllowList": { + "false": "", + "label": "", + "true": "" + }, + "lastChecked": "", + "nodeInfoStatus": { + "label": "", + "value": "" + }, + "software": { + "label": "", + "value": "" + }, + "totalUsers": "" + } + }, + "warning": { + "stats": "" + } + }, + "DomainsList": { + "button": { + "add": "" + }, + "header": { + "domains": "", + "failure": "" + }, + "label": { + "addDomain": "", + "addToAllowList": "" + }, + "title": "" + }, + "ReportsList": { + "header": { + "reports": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "resolved": "", + "unresolved": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "RequestsList": { + "header": { + "userRequests": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "approved": "", + "pending": "", + "refused": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "users": { + "Base": { + "link": { + "invitations": "", + "users": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "" + } + }, + "EmailConfirm": { + "header": { + "failure": "", + "success": "" + }, + "label": { + "confirmationCode": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "success": "" + }, + "title": "" + }, + "Login": { + "header": { + "login": "" + }, + "title": "" + }, + "PasswordReset": { + "button": { + "requestReset": "" + }, + "header": { + "failure": "", + "reset": "" + }, + "help": { + "form": "" + }, + "label": { + "email": "" + }, + "link": { + "back": "" + }, + "placeholder": { + "email": "" + }, + "title": "" + }, + "PasswordResetConfirm": { + "button": { + "update": "" + }, + "header": { + "failure": "", + "success": "" + }, + "label": { + "newPassword": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "requestSent": "", + "success": "" + }, + "title": "" + }, + "Plugins": { + "title": "" + }, + "ProfileActivity": { + "header": { + "playlists": "", + "recentlyFavorited": "", + "recentlyListened": "" + } + }, + "ProfileBase": { + "label": { + "self": "" + }, + "link": { + "activity": "", + "domainView": "", + "moderation": "", + "overview": "" + }, + "title": "" + }, + "ProfileOverview": { + "button": { + "cancel": "", + "createChannel": "", + "next": "", + "previous": "" + }, + "header": { + "channels": "", + "libraries": "", + "sharedLibraries": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "createChannel": { + "artist": { + "header": "" + }, + "header": "", + "podcast": { + "header": "" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "" + }, + "title": "" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "play": "", + "updateChannel": "", + "upload": "" + }, + "header": { + "artistChannel": "", + "podcastChannel": "" + }, + "link": { + "channelEpisodes": "", + "channelOverview": "", + "channelTracks": "", + "domainView": "", + "mirrored": "", + "moderation": "" + }, + "meta": { + "episodes": "", + "listenings": "", + "subscribers": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "" + }, + "header": "" + }, + "funkwhale": { + "header": "" + }, + "header": "", + "rss": { + "content": { + "help": "" + }, + "header": "" + } + } + }, + "title": "" + }, + "DetailOverview": { + "header": { + "albums": "", + "latestEpisodes": "", + "latestTracks": "", + "series": "", + "uploadsFailure": "", + "uploadsProcessing": "", + "uploadsSuccess": "" + }, + "link": { + "addAlbum": "", + "erroredUploads": "", + "skippedUploads": "" + }, + "message": { + "processing": "" + }, + "meta": { + "progress": "" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "", + "subscribe": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "content": { + "Base": { + "link": { + "libraries": "", + "tracks": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "Home": { + "button": { + "start": "" + }, + "description": { + "channel": { + "1": "", + "2": "" + }, + "follow": "", + "upload": "" + }, + "header": { + "channel": "", + "follow": "", + "upload": "" + }, + "help": { + "uploadQuota": "" + }, + "title": "" + }, + "libraries": { + "Card": { + "button": { + "upload": "" + }, + "label": { + "size": "" + }, + "link": { + "details": "" + }, + "meta": { + "tracks": "" + } + }, + "FilesTable": { + "action": { + "delete": "", + "restartImport": "" + }, + "button": { + "showStatus": "" + }, + "empty": { + "noTracks": "" + }, + "label": { + "importStatus": "", + "search": "" + }, + "notApplicable": "", + "option": { + "status": { + "all": "", + "draft": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "file": { + "header": { + "album": "", + "artist": "", + "duration": "", + "importStatus": "", + "size": "", + "title": "", + "uploadDate": "" + } + } + } + }, + "Form": { + "button": { + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "description": { + "library": "", + "visibility": "" + }, + "header": { + "failure": "" + }, + "label": { + "description": "", + "name": "", + "visibility": "" + }, + "message": { + "libraryCreated": "", + "libraryDeleted": "", + "libraryUpdated": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "placeholder": { + "description": "", + "name": "" + } + }, + "Home": { + "empty": { + "noLibrary": "" + }, + "header": { + "libraries": "" + }, + "link": { + "createLibrary": "" + }, + "loading": { + "libraries": "" + } + }, + "Quota": { + "button": { + "purge": "" + }, + "header": { + "currentUsage": "" + }, + "label": { + "currentUsage": "", + "errored": "", + "pending": "", + "percentUsed": "", + "skipped": "" + }, + "link": { + "viewFiles": "" + }, + "loading": { + "currentUsage": "" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "" + }, + "header": "" + }, + "purgePending": { + "content": { + "description": "" + }, + "header": "" + }, + "purgeSkipped": { + "content": { + "description": "" + }, + "header": "" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "", + "follow": "", + "pending": "", + "unfollow": "" + }, + "error": { + "follow": "", + "unfollow": "" + }, + "label": { + "scanFailure": "", + "scanPartialSuccess": "", + "scanPending": "", + "scanProgress": "", + "scanSuccess": "", + "sharingLink": "" + }, + "link": { + "scan": "", + "scanDetails": "" + }, + "message": { + "scanLaunched": "", + "scanSkipped": "" + }, + "meta": { + "failedTracks": "", + "lastUpdate": "", + "tracks": "" + }, + "modal": { + "unfollow": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "private": "", + "public": "" + } + }, + "Home": { + "button": { + "refresh": "" + }, + "description": { + "remoteLibraries": "" + }, + "header": { + "knownLibraries": "", + "remoteLibraries": "" + }, + "loading": { + "remoteLibraries": "" + } + }, + "ScanForm": { + "button": { + "submit": "" + }, + "header": { + "failure": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "url": "" + } + } + } + }, + "library": { + "DetailAlbums": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailOverview": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailTracks": { + "empty": { + "follow": "", + "upload": "" + } + }, + "Edit": { + "button": { + "accept": "", + "reject": "" + }, + "empty": { + "noFollowers": "" + }, + "header": { + "followers": "", + "libraryContents": "" + }, + "loading": { + "followers": "" + }, + "table": { + "action": { + "header": { + "action": "", + "date": "", + "status": "", + "user": "" + }, + "status": { + "accepted": "", + "pending": "", + "rejected": "" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "", + "upload": "" + }, + "description": { + "sharingLink": "" + }, + "label": { + "instance": "", + "private": "", + "public": "", + "sharingLink": "" + }, + "link": { + "albums": "", + "artists": "", + "domain": "", + "moderation": "", + "owner": "", + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "title": "", + "tooltip": { + "instance": "", + "private": "", + "public": "" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "playAll": "", + "stopEdit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "title": "" + }, + "List": { + "button": { + "create": "", + "manage": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "playlists": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "", + "delete": "", + "edit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "radio": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "title": "" + } + } + } +} From e0e8a54d45d35c27273b8e6807b678d3809af822 Mon Sep 17 00:00:00 2001 From: Tron <cocipop402@xgh6.com> Date: Sat, 24 Feb 2024 09:02:15 +0000 Subject: [PATCH 353/371] Translated using Weblate (Bengali) Currently translated at 1.5% (33 of 2181 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/bn/ --- front/src/locales/bn.json | 66 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/front/src/locales/bn.json b/front/src/locales/bn.json index c7cc4c240..450dfc5a1 100644 --- a/front/src/locales/bn.json +++ b/front/src/locales/bn.json @@ -1,6 +1,6 @@ { "App": { - "loading": "" + "loading": "ą¦Ŗą§ą¦°ą¦•ą¦°ą¦æą¦Æą¦¼ą¦¾ą¦°ą¦¤ā€¦" }, "components": { "About": { @@ -36,43 +36,43 @@ "activeUsers": "", "hoursOfMusic": "" }, - "title": "" + "title": "ą¦øą¦®ą§ą¦Ŗą¦°ą§ą¦•ą§‡" }, "AboutPod": { "feature": { - "allowList": "", + "allowList": "ą¦…ą¦Øą§ą¦®ą§‹ą¦¦ą¦Ø-ą¦¤ą¦¾ą¦²ą¦æą¦•ą¦¾", "anonymousAccess": "", - "federation": "", + "federation": "ą¦«ą§‡ą¦”ą¦¾ą¦°ą§‡ą¦¶ą¦Ø", "quota": "", - "registrations": "", + "registrations": "ą¦Øą¦æą¦¬ą¦Øą§ą¦§ą¦Ø", "status": { - "closed": "", - "disabled": "", - "enabled": "", - "open": "" + "closed": "ą¦¬ą¦Øą§ą¦§", + "disabled": "ą¦Øą¦æą¦·ą§ą¦•ą§ą¦°ą¦æą¦Æą¦¼", + "enabled": "ą¦øą¦•ą§ą¦°ą¦æą¦Æą¦¼", + "open": "ą¦–ą§‹ą¦²ą¦¾" }, "version": "" }, "header": { "about": "", - "contact": "", - "features": "", - "rules": "", - "statistics": "", + "contact": "ą¦Æą§‹ą¦—ą¦¾ą¦Æą§‹ą¦—", + "features": "ą¦¬ą§ˆą¦¶ą¦æą¦·ą§ą¦Ÿą§ą¦Æą¦øą¦®ą§‚ą¦¹", + "rules": "ą¦Øą¦æą¦Æą¦¼ą¦®", + "statistics": "ą¦Ŗą¦°ą¦æą¦øą¦‚ą¦–ą§ą¦Æą¦¾ą¦Ø", "terms": "" }, "link": { "about": "", - "features": "", - "introduction": "", - "rules": "", - "statistics": "", + "features": "ą¦¬ą§ˆą¦¶ą¦æą¦·ą§ą¦Ÿą§ą¦Æą¦øą¦®ą§‚ą¦¹", + "introduction": "ą¦­ą§‚ą¦®ą¦æą¦•ą¦¾", + "rules": "ą¦Øą¦æą¦Æą¦¼ą¦®", + "statistics": "ą¦Ŗą¦°ą¦æą¦øą¦‚ą¦–ą§ą¦Æą¦¾ą¦Ø", "terms": "" }, "message": { "contact": "" }, - "notApplicable": "", + "notApplicable": "ą¦…ą¦Ŗą§ą¦°ą¦Æą§‹ą¦œą§ą¦Æ", "placeholder": { "noDescription": "", "noRules": "", @@ -86,7 +86,7 @@ "listeningsCount": "", "tracksCount": "" }, - "title": "" + "title": "ą¦øą¦®ą§ą¦Ŗą¦°ą§ą¦•ą§‡" }, "Home": { "description": { @@ -100,13 +100,13 @@ "header": { "about": "", "aboutFunkwhale": "", - "contact": "", + "contact": "ą¦Æą§‹ą¦—ą¦¾ą¦Æą§‹ą¦—", "links": "", "login": "", "newAlbums": "", "newChannels": "", "signup": "", - "statistics": "", + "statistics": "ą¦Ŗą¦°ą¦æą¦øą¦‚ą¦–ą§ą¦Æą¦¾ą¦Ø", "welcome": "" }, "help": { @@ -138,7 +138,7 @@ "activeUsers": "", "hoursOfMusic": "" }, - "title": "" + "title": "ą¦®ą§‚ą¦²ą¦Ŗą¦¾ą¦¤ą¦¾" }, "PageNotFound": { "header": { @@ -154,8 +154,8 @@ }, "Queue": { "button": { - "clear": "", - "close": "", + "clear": "ą¦Ŗą¦°ą¦æą¦·ą§ą¦•ą¦¾ą¦°", + "close": "ą¦¬ą¦Øą§ą¦§", "stopRadio": "" }, "header": { @@ -165,17 +165,17 @@ }, "label": { "addArtistContentFilter": "", - "duration": "", + "duration": "ą¦øą¦®ą¦Æą¦¼ą¦•ą¦¾ą¦²", "enterFullscreen": "", "exitFullscreen": "", "favorite": "", "next": "", - "pause": "", - "play": "", + "pause": "ą¦„ą¦¾ą¦®ą§‹", + "play": "ą¦šą¦¾ą¦²ą§", "populatingRadio": "", "previous": "", "queue": "", - "remove": "", + "remove": "ą¦øą¦°ą¦¾ą¦“", "restart": "", "selectTrack": "", "showCoverArt": "", @@ -187,9 +187,9 @@ "webglUnsupported": "" }, "meta": { - "end": "", + "end": "ą¦¶ą§‡ą¦·", "queuePosition": "", - "startTime": "", + "startTime": "ą§¦ą§¦:ą§¦ą§¦", "unknownAlbum": "", "unknownArtist": "" }, @@ -199,9 +199,9 @@ }, "RemoteSearchForm": { "button": { - "fediverse": "", - "rss": "", - "search": "" + "fediverse": "ą¦«ą§‡ą¦”ą¦æą¦­ą¦¾ą¦°ą§ą¦ø", + "rss": "ą¦†ą¦°ą¦ą¦øą¦ą¦ø", + "search": "ą¦…ą¦Øą§ą¦øą¦Øą§ą¦§ą¦¾ą¦Ø" }, "description": { "fediverse": "", From 765c8011421eb22bf44e3c9a03c71d8703ef1176 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 12:58:46 +0100 Subject: [PATCH 354/371] chore(api): Update dependency django to v4 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/poetry.lock | 229 ++++++++++++++++++++++++--------------------- api/pyproject.toml | 2 +- 2 files changed, 124 insertions(+), 107 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 000a96d15..7050f6d93 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -162,13 +162,13 @@ trio = ["trio (>=0.23)"] [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] [[package]] @@ -204,13 +204,13 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "astroid" -version = "3.0.2" +version = "3.0.3" description = "An abstract syntax tree for Python with inference support." optional = false python-versions = ">=3.8.0" files = [ - {file = "astroid-3.0.2-py3-none-any.whl", hash = "sha256:d6e62862355f60e716164082d6b4b041d38e2a8cf1c7cd953ded5108bac8ff5c"}, - {file = "astroid-3.0.2.tar.gz", hash = "sha256:4a61cf0a59097c7bb52689b0fd63717cd2a8a14dc9f1eee97b82d814881c8c91"}, + {file = "astroid-3.0.3-py3-none-any.whl", hash = "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17"}, + {file = "astroid-3.0.3.tar.gz", hash = "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93"}, ] [package.dependencies] @@ -545,13 +545,13 @@ zstd = ["zstandard (==0.22.0)"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -1084,19 +1084,20 @@ with-social = ["django-allauth (>=0.56.0,<0.58.0)"] [[package]] name = "django" -version = "3.2.23" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +version = "4.2.9" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, - {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, + {file = "Django-4.2.9-py3-none-any.whl", hash = "sha256:2cc2fc7d1708ada170ddd6c99f35cc25db664f165d3794bc7723f46b2f8c8984"}, + {file = "Django-4.2.9.tar.gz", hash = "sha256:12498cc3cb8bc8038539fef9e90e95f507502436c1f0c3a673411324fa675d14"}, ] [package.dependencies] -asgiref = ">=3.3.2,<4" -pytz = "*" -sqlparse = ">=0.2.2" +asgiref = ">=3.6.0,<4" +"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} +sqlparse = ">=0.3.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] argon2 = ["argon2-cffi (>=19.1.0)"] @@ -1615,13 +1616,13 @@ files = [ [[package]] name = "funcy" -version = "1.18" +version = "2.0" description = "A fancy and practical functional tools" optional = false python-versions = "*" files = [ - {file = "funcy-1.18-py2.py3-none-any.whl", hash = "sha256:00ce91afc850357a131dc54f0db2ad8a1110d5087f1fa4480d7ea3ba0249f89d"}, - {file = "funcy-1.18.tar.gz", hash = "sha256:15448d19a8ebcc7a585afe7a384a19186d0bd67cbf56fb42cd1fd0f76313f9b2"}, + {file = "funcy-2.0-py2.py3-none-any.whl", hash = "sha256:53df23c8bb1651b12f095df764bfb057935d49537a56de211b098f4c79614bb0"}, + {file = "funcy-2.0.tar.gz", hash = "sha256:3963315d59d41c6f30c04bc910e10ab50a3ac4a225868bfa96feed133df075cb"}, ] [[package]] @@ -2238,85 +2239,101 @@ files = [ [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" optional = false python-versions = ">=3.7" files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] [[package]] @@ -2539,18 +2556,18 @@ files = [ [[package]] name = "platformdirs" -version = "4.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" @@ -3171,13 +3188,13 @@ postgresql = ["psycopg2"] [[package]] name = "pytz" -version = "2023.4" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, - {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -4632,4 +4649,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "6d5a57e0bf0af2772e2345b91a1c59b68aa1776fa2dc5c34177c22f6800f2ff0" +content-hash = "897d2070435a5b91a23cda5c5a001c2d75452dc1eb056d14ec0bc4fe311073d4" diff --git a/api/pyproject.toml b/api/pyproject.toml index 772e2a3e4..91a05fd64 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -29,7 +29,7 @@ python = "^3.8,<3.13" # Django dj-rest-auth = "5.0.2" -django = "==3.2.23" +django = "4.2.9" django-allauth = "0.55.2" django-cache-memoize = "0.1.10" django-cacheops = "==7.0.2" From 46ee53c967a14f34883c5e77e6794fb03cc405c6 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 13:06:50 +0100 Subject: [PATCH 355/371] chore: Use django.utils.translations.gettext_lazy instead of deprecated ugettext_lazy Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/funkwhale_api/common/authentication.py | 2 +- api/funkwhale_api/common/serializers.py | 2 +- api/funkwhale_api/common/validators.py | 2 +- api/funkwhale_api/users/admin.py | 2 +- api/funkwhale_api/users/models.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/funkwhale_api/common/authentication.py b/api/funkwhale_api/common/authentication.py index 3e2e1b4ee..e40e09be0 100644 --- a/api/funkwhale_api/common/authentication.py +++ b/api/funkwhale_api/common/authentication.py @@ -1,6 +1,6 @@ from allauth.account.models import EmailAddress from django.core.cache import cache -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from oauth2_provider.contrib.rest_framework.authentication import ( OAuth2Authentication as BaseOAuth2Authentication, ) diff --git a/api/funkwhale_api/common/serializers.py b/api/funkwhale_api/common/serializers.py index 96f5beddd..3a6e52630 100644 --- a/api/funkwhale_api/common/serializers.py +++ b/api/funkwhale_api/common/serializers.py @@ -6,7 +6,7 @@ import PIL from django.core.exceptions import ObjectDoesNotExist from django.core.files.uploadedfile import SimpleUploadedFile from django.utils.encoding import smart_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema_field from rest_framework import serializers diff --git a/api/funkwhale_api/common/validators.py b/api/funkwhale_api/common/validators.py index ee69391e4..8a55d77b2 100644 --- a/api/funkwhale_api/common/validators.py +++ b/api/funkwhale_api/common/validators.py @@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError from django.core.files.images import get_image_dimensions from django.template.defaultfilters import filesizeformat from django.utils.deconstruct import deconstructible -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ @deconstructible diff --git a/api/funkwhale_api/users/admin.py b/api/funkwhale_api/users/admin.py index b5c3bde36..26c58f448 100644 --- a/api/funkwhale_api/users/admin.py +++ b/api/funkwhale_api/users/admin.py @@ -1,7 +1,7 @@ from django import forms from django.contrib.auth.admin import UserAdmin as AuthUserAdmin from django.contrib.auth.forms import UserChangeForm, UserCreationForm -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from funkwhale_api.common import admin diff --git a/api/funkwhale_api/users/models.py b/api/funkwhale_api/users/models.py index ad9523c45..14efbca19 100644 --- a/api/funkwhale_api/users/models.py +++ b/api/funkwhale_api/users/models.py @@ -12,7 +12,7 @@ from django.db.models import JSONField from django.dispatch import receiver from django.urls import reverse from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django_auth_ldap.backend import populate_user as ldap_populate_user from oauth2_provider import models as oauth2_models from oauth2_provider import validators as oauth2_validators From 4e825527a50e6688fc9b39687568a2408e704a52 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 13:17:54 +0100 Subject: [PATCH 356/371] chore: Replace deprecated django.contrib.postgres.forms.JSONField with django.forms.JSONField Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/funkwhale_api/common/preferences.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/funkwhale_api/common/preferences.py b/api/funkwhale_api/common/preferences.py index d69a45046..8483d4487 100644 --- a/api/funkwhale_api/common/preferences.py +++ b/api/funkwhale_api/common/preferences.py @@ -2,7 +2,7 @@ import json from django import forms from django.conf import settings -from django.contrib.postgres.forms import JSONField +from django.forms import JSONField from dynamic_preferences import serializers, types from dynamic_preferences.registries import global_preferences_registry From ac6d136105d5e7f2b5e9b9c853d569fc695ccfc1 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 13:29:59 +0100 Subject: [PATCH 357/371] chore: Remove deprecated argument for signal Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/funkwhale_api/common/signals.py | 8 ++++---- api/funkwhale_api/moderation/signals.py | 3 ++- api/funkwhale_api/music/signals.py | 5 ++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/api/funkwhale_api/common/signals.py b/api/funkwhale_api/common/signals.py index 1d8e953cc..500e47d84 100644 --- a/api/funkwhale_api/common/signals.py +++ b/api/funkwhale_api/common/signals.py @@ -1,6 +1,6 @@ import django.dispatch -mutation_created = django.dispatch.Signal(providing_args=["mutation"]) -mutation_updated = django.dispatch.Signal( - providing_args=["mutation", "old_is_approved", "new_is_approved"] -) +""" Required args: mutation """ +mutation_created = django.dispatch.Signal() +""" Required args: mutation, old_is_approved, new_is_approved """ +mutation_updated = django.dispatch.Signal() diff --git a/api/funkwhale_api/moderation/signals.py b/api/funkwhale_api/moderation/signals.py index 16be236e0..d879f4599 100644 --- a/api/funkwhale_api/moderation/signals.py +++ b/api/funkwhale_api/moderation/signals.py @@ -1,3 +1,4 @@ import django.dispatch -report_created = django.dispatch.Signal(providing_args=["report"]) +""" Required argument: report """ +report_created = django.dispatch.Signal() diff --git a/api/funkwhale_api/music/signals.py b/api/funkwhale_api/music/signals.py index 47ea37e98..d71784768 100644 --- a/api/funkwhale_api/music/signals.py +++ b/api/funkwhale_api/music/signals.py @@ -1,5 +1,4 @@ import django.dispatch -upload_import_status_updated = django.dispatch.Signal( - providing_args=["old_status", "new_status", "upload"] -) +""" Required args: old_status, new_status, upload """ +upload_import_status_updated = django.dispatch.Signal() From 0fd0192b37a018f5eecc13f5add222b19c03ce6a Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 13:53:44 +0100 Subject: [PATCH 358/371] chore: Replace deprecated smart_text with smart_str Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/funkwhale_api/common/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/common/serializers.py b/api/funkwhale_api/common/serializers.py index 3a6e52630..03817424e 100644 --- a/api/funkwhale_api/common/serializers.py +++ b/api/funkwhale_api/common/serializers.py @@ -5,7 +5,7 @@ import os import PIL from django.core.exceptions import ObjectDoesNotExist from django.core.files.uploadedfile import SimpleUploadedFile -from django.utils.encoding import smart_text +from django.utils.encoding import smart_str from django.utils.translation import gettext_lazy as _ from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema_field @@ -52,7 +52,7 @@ class RelatedField(serializers.RelatedField): self.fail( "does_not_exist", related_field_name=self.related_field_name, - value=smart_text(data), + value=smart_str(data), ) except (TypeError, ValueError): self.fail("invalid") From f1f6ef43ad7796911492baab1a62eda35ac59c04 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 14:15:01 +0100 Subject: [PATCH 359/371] chore: Replace reprecated alias django.conf.urls.urls() Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/config/routing.py | 9 ++++-- api/config/urls/__init__.py | 29 +++++++++---------- api/config/urls/api.py | 35 ++++++++++++----------- api/config/urls/api_v2.py | 9 +++--- api/config/urls/subsonic.py | 7 +++-- api/funkwhale_api/federation/urls.py | 9 ++++-- api/funkwhale_api/instance/urls.py | 8 +++--- api/funkwhale_api/instance/urls_v2.py | 4 +-- api/funkwhale_api/manage/urls.py | 13 +++++---- api/funkwhale_api/musicbrainz/urls.py | 10 +++---- api/funkwhale_api/providers/urls.py | 5 ++-- api/funkwhale_api/users/api_urls.py | 6 ++-- api/funkwhale_api/users/oauth/urls.py | 10 ++++--- api/funkwhale_api/users/rest_auth_urls.py | 18 ++++++------ 14 files changed, 95 insertions(+), 77 deletions(-) diff --git a/api/config/routing.py b/api/config/routing.py index ec5f90e6e..2b440518f 100644 --- a/api/config/routing.py +++ b/api/config/routing.py @@ -1,7 +1,7 @@ from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter -from django.conf.urls import url from django.core.asgi import get_asgi_application +from django.urls import re_path from funkwhale_api.instance import consumers @@ -10,7 +10,12 @@ application = ProtocolTypeRouter( # Empty for now (http->django views is added by default) "websocket": AuthMiddlewareStack( URLRouter( - [url("^api/v1/activity$", consumers.InstanceActivityConsumer.as_asgi())] + [ + re_path( + "^api/v1/activity$", + consumers.InstanceActivityConsumer.as_asgi(), + ) + ] ) ), "http": get_asgi_application(), diff --git a/api/config/urls/__init__.py b/api/config/urls/__init__.py index d8b4c891e..257249b1f 100644 --- a/api/config/urls/__init__.py +++ b/api/config/urls/__init__.py @@ -1,7 +1,6 @@ from django.conf import settings -from django.conf.urls import url from django.conf.urls.static import static -from django.urls import include, path +from django.urls import include, path, re_path from django.views import defaults as default_views from config import plugins @@ -10,34 +9,34 @@ from funkwhale_api.common import admin plugins_patterns = plugins.trigger_filter(plugins.URLS, [], enabled=True) api_patterns = [ - url("v1/", include("config.urls.api")), - url("v2/", include("config.urls.api_v2")), - url("subsonic/", include("config.urls.subsonic")), + re_path("v1/", include("config.urls.api")), + re_path("v2/", include("config.urls.api_v2")), + re_path("subsonic/", include("config.urls.subsonic")), ] urlpatterns = [ # Django Admin, use {% url 'admin:index' %} - url(settings.ADMIN_URL, admin.site.urls), - url(r"^api/", include((api_patterns, "api"), namespace="api")), - url( + re_path(settings.ADMIN_URL, admin.site.urls), + re_path(r"^api/", include((api_patterns, "api"), namespace="api")), + re_path( r"^", include( ("funkwhale_api.federation.urls", "federation"), namespace="federation" ), ), - url(r"^api/v1/auth/", include("funkwhale_api.users.rest_auth_urls")), - url(r"^accounts/", include("allauth.urls")), + re_path(r"^api/v1/auth/", include("funkwhale_api.users.rest_auth_urls")), + re_path(r"^accounts/", include("allauth.urls")), ] + plugins_patterns if settings.DEBUG: # This allows the error pages to be debugged during development, just visit # these url in browser to see how these error pages look like. urlpatterns += [ - url(r"^400/$", default_views.bad_request), - url(r"^403/$", default_views.permission_denied), - url(r"^404/$", default_views.page_not_found), - url(r"^500/$", default_views.server_error), + re_path(r"^400/$", default_views.bad_request), + re_path(r"^403/$", default_views.permission_denied), + re_path(r"^404/$", default_views.page_not_found), + re_path(r"^500/$", default_views.server_error), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if "debug_toolbar" in settings.INSTALLED_APPS: @@ -49,5 +48,5 @@ if settings.DEBUG: if "silk" in settings.INSTALLED_APPS: urlpatterns = [ - url(r"^api/silk/", include("silk.urls", namespace="silk")) + re_path(r"^api/silk/", include("silk.urls", namespace="silk")) ] + urlpatterns diff --git a/api/config/urls/api.py b/api/config/urls/api.py index 520224f9f..87df7ff99 100644 --- a/api/config/urls/api.py +++ b/api/config/urls/api.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from funkwhale_api.activity import views as activity_views from funkwhale_api.audio import views as audio_views @@ -28,61 +29,61 @@ router.register(r"attachments", common_views.AttachmentViewSet, "attachments") v1_patterns = router.urls v1_patterns += [ - url(r"^oembed/$", views.OembedView.as_view(), name="oembed"), - url( + re_path(r"^oembed/$", views.OembedView.as_view(), name="oembed"), + re_path( r"^instance/", include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), ), - url( + re_path( r"^manage/", include(("funkwhale_api.manage.urls", "manage"), namespace="manage"), ), - url( + re_path( r"^moderation/", include( ("funkwhale_api.moderation.urls", "moderation"), namespace="moderation" ), ), - url( + re_path( r"^federation/", include( ("funkwhale_api.federation.api_urls", "federation"), namespace="federation" ), ), - url( + re_path( r"^providers/", include(("funkwhale_api.providers.urls", "providers"), namespace="providers"), ), - url( + re_path( r"^favorites/", include(("funkwhale_api.favorites.urls", "favorites"), namespace="favorites"), ), - url(r"^search$", views.Search.as_view(), name="search"), - url( + re_path(r"^search$", views.Search.as_view(), name="search"), + re_path( r"^radios/", include(("funkwhale_api.radios.urls", "radios"), namespace="radios"), ), - url( + re_path( r"^history/", include(("funkwhale_api.history.urls", "history"), namespace="history"), ), - url( + re_path( r"^", include(("funkwhale_api.users.api_urls", "users"), namespace="users"), ), # XXX: remove if Funkwhale 1.1 - url( + re_path( r"^users/", include(("funkwhale_api.users.api_urls", "users"), namespace="users-nested"), ), - url( + re_path( r"^oauth/", include(("funkwhale_api.users.oauth.urls", "oauth"), namespace="oauth"), ), - url(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), - url( + re_path(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), + re_path( r"^text-preview/?$", common_views.TextPreviewView.as_view(), name="text-preview" ), ] -urlpatterns = [url("", include((v1_patterns, "v1"), namespace="v1"))] +urlpatterns = [re_path("", include((v1_patterns, "v1"), namespace="v1"))] diff --git a/api/config/urls/api_v2.py b/api/config/urls/api_v2.py index a5fda5c7c..a1d0befc8 100644 --- a/api/config/urls/api_v2.py +++ b/api/config/urls/api_v2.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from funkwhale_api.common import routers as common_routers @@ -6,14 +7,14 @@ router = common_routers.OptionalSlashRouter() v2_patterns = router.urls v2_patterns += [ - url( + re_path( r"^instance/", include(("funkwhale_api.instance.urls_v2", "instance"), namespace="instance"), ), - url( + re_path( r"^radios/", include(("funkwhale_api.radios.urls_v2", "radios"), namespace="radios"), ), ] -urlpatterns = [url("", include((v2_patterns, "v2"), namespace="v2"))] +urlpatterns = [re_path("", include((v2_patterns, "v2"), namespace="v2"))] diff --git a/api/config/urls/subsonic.py b/api/config/urls/subsonic.py index 08adebf93..ee049e90e 100644 --- a/api/config/urls/subsonic.py +++ b/api/config/urls/subsonic.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from rest_framework import routers from rest_framework.urlpatterns import format_suffix_patterns @@ -8,7 +9,9 @@ subsonic_router = routers.SimpleRouter(trailing_slash=False) subsonic_router.register(r"rest", SubsonicViewSet, basename="subsonic") subsonic_patterns = format_suffix_patterns(subsonic_router.urls, allowed=["view"]) -urlpatterns = [url("", include((subsonic_patterns, "subsonic"), namespace="subsonic"))] +urlpatterns = [ + re_path("", include((subsonic_patterns, "subsonic"), namespace="subsonic")) +] # urlpatterns = [ # url( diff --git a/api/funkwhale_api/federation/urls.py b/api/funkwhale_api/federation/urls.py index 7bb6fc8a6..3380f3a0d 100644 --- a/api/funkwhale_api/federation/urls.py +++ b/api/funkwhale_api/federation/urls.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from rest_framework import routers from . import views @@ -23,6 +24,8 @@ music_router.register(r"tracks", views.MusicTrackViewSet, "tracks") index_router.register(r"index", views.IndexViewSet, "index") urlpatterns = router.urls + [ - url("federation/music/", include((music_router.urls, "music"), namespace="music")), - url("federation/", include((index_router.urls, "index"), namespace="index")), + re_path( + "federation/music/", include((music_router.urls, "music"), namespace="music") + ), + re_path("federation/", include((index_router.urls, "index"), namespace="index")), ] diff --git a/api/funkwhale_api/instance/urls.py b/api/funkwhale_api/instance/urls.py index 62baa5021..9922495bc 100644 --- a/api/funkwhale_api/instance/urls.py +++ b/api/funkwhale_api/instance/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from funkwhale_api.common import routers @@ -8,7 +8,7 @@ admin_router = routers.OptionalSlashRouter() admin_router.register(r"admin/settings", views.AdminSettings, "admin-settings") urlpatterns = [ - url(r"^nodeinfo/2.0/?$", views.NodeInfo20.as_view(), name="nodeinfo-2.0"), - url(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), - url(r"^spa-manifest.json", views.SpaManifest.as_view(), name="spa-manifest"), + re_path(r"^nodeinfo/2.0/?$", views.NodeInfo20.as_view(), name="nodeinfo-2.0"), + re_path(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), + re_path(r"^spa-manifest.json", views.SpaManifest.as_view(), name="spa-manifest"), ] + admin_router.urls diff --git a/api/funkwhale_api/instance/urls_v2.py b/api/funkwhale_api/instance/urls_v2.py index 2b8ddcb3b..3d4ed8b4e 100644 --- a/api/funkwhale_api/instance/urls_v2.py +++ b/api/funkwhale_api/instance/urls_v2.py @@ -1,7 +1,7 @@ -from django.conf.urls import url +from django.urls import re_path from . import views urlpatterns = [ - url(r"^nodeinfo/2.1/?$", views.NodeInfo21.as_view(), name="nodeinfo-2.1"), + re_path(r"^nodeinfo/2.1/?$", views.NodeInfo21.as_view(), name="nodeinfo-2.1"), ] diff --git a/api/funkwhale_api/manage/urls.py b/api/funkwhale_api/manage/urls.py index 9cf6acced..422849d5c 100644 --- a/api/funkwhale_api/manage/urls.py +++ b/api/funkwhale_api/manage/urls.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from funkwhale_api.common import routers @@ -32,14 +33,16 @@ other_router.register(r"channels", views.ManageChannelViewSet, "channels") other_router.register(r"tags", views.ManageTagViewSet, "tags") urlpatterns = [ - url( + re_path( r"^federation/", include((federation_router.urls, "federation"), namespace="federation"), ), - url(r"^library/", include((library_router.urls, "instance"), namespace="library")), - url( + re_path( + r"^library/", include((library_router.urls, "instance"), namespace="library") + ), + re_path( r"^moderation/", include((moderation_router.urls, "moderation"), namespace="moderation"), ), - url(r"^users/", include((users_router.urls, "instance"), namespace="users")), + re_path(r"^users/", include((users_router.urls, "instance"), namespace="users")), ] + other_router.urls diff --git a/api/funkwhale_api/musicbrainz/urls.py b/api/funkwhale_api/musicbrainz/urls.py index b9e24994f..76209fc60 100644 --- a/api/funkwhale_api/musicbrainz/urls.py +++ b/api/funkwhale_api/musicbrainz/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from funkwhale_api.common import routers @@ -7,22 +7,22 @@ from . import views router = routers.OptionalSlashRouter() router.register(r"search", views.SearchViewSet, "search") urlpatterns = [ - url( + re_path( "releases/(?P<uuid>[0-9a-z-]+)/$", views.ReleaseDetail.as_view(), name="release-detail", ), - url( + re_path( "artists/(?P<uuid>[0-9a-z-]+)/$", views.ArtistDetail.as_view(), name="artist-detail", ), - url( + re_path( "release-groups/browse/(?P<artist_uuid>[0-9a-z-]+)/$", views.ReleaseGroupBrowse.as_view(), name="release-group-browse", ), - url( + re_path( "releases/browse/(?P<release_group_uuid>[0-9a-z-]+)/$", views.ReleaseBrowse.as_view(), name="release-browse", diff --git a/api/funkwhale_api/providers/urls.py b/api/funkwhale_api/providers/urls.py index dc8afeee7..d2df4d849 100644 --- a/api/funkwhale_api/providers/urls.py +++ b/api/funkwhale_api/providers/urls.py @@ -1,7 +1,8 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path urlpatterns = [ - url( + re_path( r"^musicbrainz/", include( ("funkwhale_api.musicbrainz.urls", "musicbrainz"), namespace="musicbrainz" diff --git a/api/funkwhale_api/users/api_urls.py b/api/funkwhale_api/users/api_urls.py index b0a057028..1ca8cdcd4 100644 --- a/api/funkwhale_api/users/api_urls.py +++ b/api/funkwhale_api/users/api_urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from funkwhale_api.common import routers @@ -8,6 +8,6 @@ router = routers.OptionalSlashRouter() router.register(r"users", views.UserViewSet, "users") urlpatterns = [ - url(r"^users/login/?$", views.login, name="login"), - url(r"^users/logout/?$", views.logout, name="logout"), + re_path(r"^users/login/?$", views.login, name="login"), + re_path(r"^users/logout/?$", views.logout, name="logout"), ] + router.urls diff --git a/api/funkwhale_api/users/oauth/urls.py b/api/funkwhale_api/users/oauth/urls.py index 4230668e4..411656a2a 100644 --- a/api/funkwhale_api/users/oauth/urls.py +++ b/api/funkwhale_api/users/oauth/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from django.views.decorators.csrf import csrf_exempt from funkwhale_api.common import routers @@ -10,7 +10,9 @@ router.register(r"apps", views.ApplicationViewSet, "apps") router.register(r"grants", views.GrantViewSet, "grants") urlpatterns = router.urls + [ - url("^authorize/$", csrf_exempt(views.AuthorizeView.as_view()), name="authorize"), - url("^token/$", views.TokenView.as_view(), name="token"), - url("^revoke/$", views.RevokeTokenView.as_view(), name="revoke"), + re_path( + "^authorize/$", csrf_exempt(views.AuthorizeView.as_view()), name="authorize" + ), + re_path("^token/$", views.TokenView.as_view(), name="token"), + re_path("^revoke/$", views.RevokeTokenView.as_view(), name="revoke"), ] diff --git a/api/funkwhale_api/users/rest_auth_urls.py b/api/funkwhale_api/users/rest_auth_urls.py index 21d91685c..bbd14eefe 100644 --- a/api/funkwhale_api/users/rest_auth_urls.py +++ b/api/funkwhale_api/users/rest_auth_urls.py @@ -1,38 +1,38 @@ from dj_rest_auth import views as rest_auth_views -from django.conf.urls import url +from django.urls import re_path from django.views.generic import TemplateView from . import views urlpatterns = [ # URLs that do not require a session or valid token - url( + re_path( r"^password/reset/$", views.PasswordResetView.as_view(), name="rest_password_reset", ), - url( + re_path( r"^password/reset/confirm/$", views.PasswordResetConfirmView.as_view(), name="rest_password_reset_confirm", ), # URLs that require a user to be logged in with a valid session / token. - url( + re_path( r"^user/$", rest_auth_views.UserDetailsView.as_view(), name="rest_user_details" ), - url( + re_path( r"^password/change/$", views.PasswordChangeView.as_view(), name="rest_password_change", ), # Registration URLs - url(r"^registration/$", views.RegisterView.as_view(), name="rest_register"), - url( + re_path(r"^registration/$", views.RegisterView.as_view(), name="rest_register"), + re_path( r"^registration/verify-email/?$", views.VerifyEmailView.as_view(), name="rest_verify_email", ), - url( + re_path( r"^registration/change-password/?$", views.PasswordChangeView.as_view(), name="change_password", @@ -47,7 +47,7 @@ urlpatterns = [ # If you don't want to use API on that step, then just use ConfirmEmailView # view from: # https://github.com/pennersr/django-allauth/blob/a62a370681/allauth/account/views.py#L291 - url( + re_path( r"^registration/account-confirm-email/(?P<key>\w+)/?$", TemplateView.as_view(), name="account_confirm_email", From 803b077f000ce917bbc80c804e949e8ea3fa781f Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 30 Jan 2024 14:44:23 +0100 Subject: [PATCH 360/371] chore: Update django api Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/funkwhale_api/common/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/common/models.py b/api/funkwhale_api/common/models.py index ebd705813..575ff864b 100644 --- a/api/funkwhale_api/common/models.py +++ b/api/funkwhale_api/common/models.py @@ -60,12 +60,12 @@ class NullsLastSQLCompiler(SQLCompiler): class NullsLastQuery(models.sql.query.Query): """Use a custom compiler to inject 'NULLS LAST' (for PostgreSQL).""" - def get_compiler(self, using=None, connection=None): + def get_compiler(self, using=None, connection=None, elide_empty=True): if using is None and connection is None: raise ValueError("Need either using or connection") if using: connection = connections[using] - return NullsLastSQLCompiler(self, connection, using) + return NullsLastSQLCompiler(self, connection, using, elide_empty) class NullsLastQuerySet(models.QuerySet): From b4920af0b82f7e3aec22fac75c07de2082dc5c6b Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 6 Feb 2024 10:59:39 +0100 Subject: [PATCH 361/371] fix(api): Replace deprecated is_ajax with manual check Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/funkwhale_api/users/oauth/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/funkwhale_api/users/oauth/views.py b/api/funkwhale_api/users/oauth/views.py index 9f0677cbf..44e81e187 100644 --- a/api/funkwhale_api/users/oauth/views.py +++ b/api/funkwhale_api/users/oauth/views.py @@ -200,7 +200,7 @@ class AuthorizeView(views.APIView, oauth_views.AuthorizationView): return self.json_payload({"non_field_errors": ["Invalid application"]}, 400) def redirect(self, redirect_to, application): - if self.request.is_ajax(): + if self.request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest": # Web client need this to be able to redirect the user query = urllib.parse.urlparse(redirect_to).query code = urllib.parse.parse_qs(query)["code"][0] From 5ca8691febf39d48e4ad5aaba13575cbf2015f15 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 6 Feb 2024 12:33:51 +0000 Subject: [PATCH 362/371] test(api): Fix order of s3 backend initializartion Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/tests/music/test_utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py index 7b4ab8e74..a71d91f07 100644 --- a/api/tests/music/test_utils.py +++ b/api/tests/music/test_utils.py @@ -135,9 +135,8 @@ def test_transcode_file(name, expected): def test_custom_s3_domain(factories, settings): """See #2220""" - settings.DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIS3Boto3Storage" settings.AWS_S3_CUSTOM_DOMAIN = "my.custom.domain.tld" + settings.DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIS3Boto3Storage" f = factories["music.Upload"].build(audio_file__filename="test.mp3") - print(f.audio_file.url) assert f.audio_file.url.startswith("https://") From cb7284ef952030a9ad223690ee82c0754941ac04 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Tue, 6 Feb 2024 12:42:49 +0000 Subject: [PATCH 363/371] chore: Add changelog snippet Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- changes/changelog.d/django4.2.enhancement | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/django4.2.enhancement diff --git a/changes/changelog.d/django4.2.enhancement b/changes/changelog.d/django4.2.enhancement new file mode 100644 index 000000000..7d261c53f --- /dev/null +++ b/changes/changelog.d/django4.2.enhancement @@ -0,0 +1 @@ +Update django to version 4.2 From 6fe153c8dac205f3d83383972dc17a74d1e978d9 Mon Sep 17 00:00:00 2001 From: Georg Krause <mail@georg-krause.net> Date: Thu, 8 Feb 2024 09:30:39 +0000 Subject: [PATCH 364/371] refactor(api): Make sure CSRF_TRUSTED_ORIGIN always has a protocol prefix Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2709> --- api/config/settings/common.py | 9 ++++++++- api/config/settings/local.py | 2 -- api/config/settings/production.py | 8 -------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index b87eed782..5865bf9a0 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -2,7 +2,7 @@ import logging.config import sys import warnings from collections import OrderedDict -from urllib.parse import urlsplit +from urllib.parse import urlparse, urlsplit import environ from celery.schedules import crontab @@ -224,6 +224,13 @@ ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=[]) + [FUNKWHALE_HOSTNA List of allowed hostnames for which the Funkwhale server will answer. """ +CSRF_TRUSTED_ORIGINS = [urlparse(o, FUNKWHALE_PROTOCOL).geturl() for o in ALLOWED_HOSTS] +""" +List of origins that are trusted for unsafe requests +We simply consider all allowed hosts to be trusted origins +See https://docs.djangoproject.com/en/4.2/ref/settings/#csrf-trusted-origins +""" + # APP CONFIGURATION # ------------------------------------------------------------------------------ DJANGO_APPS = ( diff --git a/api/config/settings/local.py b/api/config/settings/local.py index b1dc93f19..10cfbdbc3 100644 --- a/api/config/settings/local.py +++ b/api/config/settings/local.py @@ -96,8 +96,6 @@ CELERY_TASK_ALWAYS_EAGER = False # Your local stuff: Below this line define 3rd party library settings -CSRF_TRUSTED_ORIGINS = [o for o in ALLOWED_HOSTS] - REST_FRAMEWORK["DEFAULT_SCHEMA_CLASS"] = "funkwhale_api.schema.CustomAutoSchema" SPECTACULAR_SETTINGS = { "TITLE": "Funkwhale API", diff --git a/api/config/settings/production.py b/api/config/settings/production.py index 589286ab2..815828bd5 100644 --- a/api/config/settings/production.py +++ b/api/config/settings/production.py @@ -41,14 +41,6 @@ SECRET_KEY = env("DJANGO_SECRET_KEY") # SESSION_COOKIE_HTTPONLY = True # SECURE_SSL_REDIRECT = env.bool("DJANGO_SECURE_SSL_REDIRECT", default=True) -# SITE CONFIGURATION -# ------------------------------------------------------------------------------ -# Hosts/domain names that are valid for this site -# See https://docs.djangoproject.com/en/1.6/ref/settings/#allowed-hosts -CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS - -# END SITE CONFIGURATION - # Static Assets # ------------------------ STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage" From 8d22eb925eafce8175b2850f8fa71bd4ccc79e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciar=C3=A1n=20Ainsworth?= <cda@sporiff.dev> Date: Mon, 26 Feb 2024 10:37:51 +0100 Subject: [PATCH 365/371] Add API v2 overview Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2763> --- changes/changelog.d/v2-overview.doc | 1 + docs/developer/api/index.md | 1 + docs/developer/api/v2-overview.md | 607 ++++++++++++++++++++++++++++ 3 files changed, 609 insertions(+) create mode 100644 changes/changelog.d/v2-overview.doc create mode 100644 docs/developer/api/v2-overview.md diff --git a/changes/changelog.d/v2-overview.doc b/changes/changelog.d/v2-overview.doc new file mode 100644 index 000000000..f60538f14 --- /dev/null +++ b/changes/changelog.d/v2-overview.doc @@ -0,0 +1 @@ +Add API v2 overview. diff --git a/docs/developer/api/index.md b/docs/developer/api/index.md index 63bfef00b..42bfeb5cf 100644 --- a/docs/developer/api/index.md +++ b/docs/developer/api/index.md @@ -14,5 +14,6 @@ API explorer<https://docs.funkwhale.audio/swagger/> authentication rate-limit subsonic +v2-overview ``` diff --git a/docs/developer/api/v2-overview.md b/docs/developer/api/v2-overview.md new file mode 100644 index 000000000..1098d300f --- /dev/null +++ b/docs/developer/api/v2-overview.md @@ -0,0 +1,607 @@ +# API v2 overview + +To ensure that Funkwhale's v2 REST API is consistent and scalable, we need to ensure that certain rules are followed when implementing endpoints. The basic rules are covered in this document. + +## Appropriate naming conventions + +In keeping with best practice, Funkwhale's API follows these naming conventions: + +1. All endpoints should start with the **collection** that the endpoint represents. For example: `artist`, `release`, `recording`. +2. The specificity of an endpoint's target should be set by the path. For example: `artist/{guid}`. +3. Any endpoints that represent multi-word entities should be rendered in kebab case (`kebab-case`). For example: `/api/v2/release-group` +4. Endpoint names should only ever be _nouns_. Any verb representing the action should be described by the HTTP action. For example: `GET`, `POST`, `PATCH`, `DELETE` +5. Multi-word properties in entity representations should be rendered in camel case (`camelCase`) to maintain consistency with other endpoints such as nodeinfo +6. Multi-word parameters in API queries should be rendered in in snake case (`snake_case`) to avoid issues with URL formatting + +## Generic entity naming conventions + +To make Funkwhale more scalable, entities should be given more generic names. For example: instead of using music-specific naming conventions such as `Album`, a generic term like `Release` should be substituted. Since many audio properties can be referred to as a `Release` (such as albums, audiobooks, DJ sets, podcast series), this naming convention can scale where the old one could not. + +Where appropriate, Funkwhale should follow the same conventions [put forward by MusicBrainz](https://musicbrainz.org/doc/MusicBrainz_Entity). These entities are well-defined generic concepts with room for extension, and following them makes Funkwhale's interactions with MusicBrainz much simpler. + +## Deprecation of database IDs + +Several endpoints in API v1 use database IDs (integers) to refer to items such as artists and tracks. However, it's best practice to use GUIDs wherever a unique identifier is needed. API v2 should always use GUIDs to refer to items rather than relying on the database IDs. + +## Atomic transactions + +Per REST conventions, all requests must either **succeed** or **fail** as a whole. This means that if a `POST` request is made and any part of the process fails, the entire transaction must roll back and no changes can be committed. The requester must be informed of the issue with a meaningful error message. + +To facilitate this, `POST` and `PATCH` actions must target **one item at a time**. Instead of allowing users to create multiple items in a single `POST` request represented by an array, the Funkwhale API should instead accept only one object in any request. While this increases the number of calls that must be sent to the API, it also increases Funkwhale's ability to communicate any issues with the requester in a timely manner. + +## Serializer inheritance + +Serializers representing Funkwhale entities should always inherit from a _minimal_ (`Base`) serializer. This ensures that when new critical information is added to a serializer it is inherited. + +For example: a `BaseRelease` serializes only the most essential information about a release for displaying information about it. + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "playable": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:44:10.981Z", + "urls": { + "source": "string", + "original": "string" + } + } +} +``` + +The `Release` serializer inherits all information from the `BaseRelease` serializer and appends additional information pertaining to the release, including the creation date, release date, and associated release group. + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "playable": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:43:07.746Z", + "urls": { + "source": "string", + "original": "string" + } + }, + "creationDate": "2023-11-19T01:43:07.746Z", + "releaseDate": "2023-11-19", + "trackCount": 0, + "duration": 0, + "attributedTo": { + "fid": "string", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": true + }, + "local": true, + "releaseGroup": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "primaryType": "album", + "releaseVersions": 0 + }, + "tracks": [ + { + "recording": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "entryNumber": 0, + "position": 0 + } + ] +} +``` + +By maintaining this `Base` serializer, we can ensure any essential information is contained in both the `Base` representation and the full complex representation shown on dedicated endpoints. + +When displaying interface elements such as cards or search results, the `Base` version of the serializer should be used. For example: + +- When calling for a list of `Release` objects to render cards, the `BaseRelease` serializer is used (`/api/v2/releases`) +- When navigating to the overview page for a release, the full `Release` serializer is used (`/api/v2/releases/{guid}`) + +## Reduced duplication in serializers + +Funkwhale API v1 has a lot of duplicated data in certain responses due to how the serializers are configured. For example: + +- A `Listening` object contains the following information: + - The `User` who recorded the `Listening` + - The `Actor` of the `User` + - The `Track`. This contains: + - The `Artist` attributed to the `Track` + - The `Album` that contains the `Track`. This contains: + - The `Artist` attributed to the `Album` + +Since the `Listening` serializer inherits the full serializer for each of these entities, the resulting response is large and contains a lot of duplicated information. + +```json +{ + "id": 52808, + "user": { + "id": 1, + "username": "doctorworm", + "name": "", + "date_joined": "2018-12-12T21:03:28Z", + "avatar": { + "uuid": "d0af4fe3-d420-4e98-87d3-2d1cc3f7cdc5", + "size": 3834756, + "mimetype": "image/jpeg", + "creation_date": "2022-12-28T09:43:20.460502Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/attachments/87/b0/1d/adjust_portrait_0000_img00465_ciaran_a.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=8167aae2f71896192ec718ff7849e2828b3d1a04c75a7a1b02e8e5a36d08e582", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/87/b0/1d/adjust_portrait_0000_img00465_ciaran_a-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a035aead373e5537aa94af8fe29b7fc9ab5c0edcd4d5d1c15a15ced420ddfbae", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/87/b0/1d/adjust_portrait_0000_img00465_ciaran_a-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=49f25fb7cccd0a617579b74f59ab929dbac76838c3c57310d9058b205c5bd7ed" + } + } + }, + "track": { + "artist": { + "id": 14, + "fid": "https://tanukitunes.com/federation/music/artists/728f9e77-a553-41d6-9d83-e5d78fcd2563", + "mbid": "183d6ef6-e161-47ff-9085-063c8b897e97", + "name": "They Might Be Giants", + "creation_date": "2018-12-13T00:08:02.252126Z", + "modification_date": "2020-03-19T15:05:32.179932Z", + "is_local": true, + "content_category": "music", + "description": { + "text": "They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.", + "content_type": "text/markdown", + "html": "<p>They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.</p>" + }, + "attachment_cover": { + "uuid": "5e918c69-9a28-4dda-b2ba-bec9ed7ade97", + "size": 450338, + "mimetype": "image/jpeg", + "creation_date": "2020-01-17T17:13:28.131126Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/attachments/9f/47/fb/tmbg.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=d80640f390c9984a942a951c06a28456efafe6136d2dee53b001e551b8836ec4", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a0770c764e2242ee203a71f77be6a3de782050bf46b03683dc883be27c679e65", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=14d604c022fc2b923e8c124c988a5b855e99f35f8a0bf598e9fe7677096fe990" + } + }, + "channel": null + }, + "album": { + "id": 51, + "fid": "https://tanukitunes.com/federation/music/albums/d630422f-ce40-4f24-98d1-33dda13248dd", + "mbid": "459dd621-8f47-4af6-97f7-2f925e685853", + "title": "The Else", + "artist": { + "id": 14, + "fid": "https://tanukitunes.com/federation/music/artists/728f9e77-a553-41d6-9d83-e5d78fcd2563", + "mbid": "183d6ef6-e161-47ff-9085-063c8b897e97", + "name": "They Might Be Giants", + "creation_date": "2018-12-13T00:08:02.252126Z", + "modification_date": "2020-03-19T15:05:32.179932Z", + "is_local": true, + "content_category": "music", + "description": { + "text": "They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.", + "content_type": "text/markdown", + "html": "<p>They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.</p>" + }, + "attachment_cover": { + "uuid": "5e918c69-9a28-4dda-b2ba-bec9ed7ade97", + "size": 450338, + "mimetype": "image/jpeg", + "creation_date": "2020-01-17T17:13:28.131126Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/attachments/9f/47/fb/tmbg.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=d80640f390c9984a942a951c06a28456efafe6136d2dee53b001e551b8836ec4", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a0770c764e2242ee203a71f77be6a3de782050bf46b03683dc883be27c679e65", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=14d604c022fc2b923e8c124c988a5b855e99f35f8a0bf598e9fe7677096fe990" + } + }, + "channel": null + }, + "release_date": "2007-05-15", + "cover": { + "uuid": "8bcc8c7f-0059-4225-ae1e-6472aa918abc", + "size": null, + "mimetype": "image/jpeg", + "creation_date": "2019-11-27T17:08:48.103220Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/albums/covers/2018/12/13/b459dd621-8f47-4af6-97f7-2f925e685853.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a89794b6a107a1bb39e4e4bf161f895969c37f606ba07aac7cc7b41d2489e376", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/albums/covers/2018/12/13/b459dd621-8f47-4af6-97f7-2f925e685853-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=f14d528c7305054d702e62cd8f2c62aad7eb0afcf3e2088b0678d012cf8ac44c", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/albums/covers/2018/12/13/b459dd621-8f47-4af6-97f7-2f925e685853-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=e32aefab24ac6ac7c382d34291d10c9af515c33c85f01f8f059d5d58df8eca9f" + } + }, + "creation_date": "2018-12-13T00:17:38.395691Z", + "is_local": true, + "tracks_count": 13 + }, + "uploads": [ + { + "uuid": "d19b0cfe-427d-4f70-8a77-3906e8f7a7a3", + "listen_url": "/api/v1/listen/fd003ce3-83bd-4231-ab6b-13c59f2e85ab/?upload=d19b0cfe-427d-4f70-8a77-3906e8f7a7a3", + "size": 3502417, + "duration": 197, + "bitrate": 192000, + "mimetype": "audio/ogg", + "extension": "ogg", + "is_local": true + } + ], + "listen_url": "/api/v1/listen/fd003ce3-83bd-4231-ab6b-13c59f2e85ab/", + "tags": [], + "attributed_to": null, + "id": 781, + "fid": "https://tanukitunes.com/federation/music/tracks/fd003ce3-83bd-4231-ab6b-13c59f2e85ab", + "mbid": "5724b81c-f32c-4375-9bdc-fce4c87fc4ed", + "title": "With the Dark", + "creation_date": "2018-12-13T00:17:53.119857Z", + "is_local": true, + "position": 7, + "disc_number": null, + "downloads_count": 4, + "copyright": null, + "license": null, + "cover": null, + "is_playable": true + }, + "creation_date": "2023-11-17T15:43:46.062258Z", + "actor": { + "fid": "https://tanukitunes.com/federation/actors/doctorworm", + "url": "https://tanukitunes.com/@doctorworm", + "creation_date": "2018-12-12T22:12:18Z", + "summary": null, + "preferred_username": "doctorworm", + "name": "doctorworm", + "last_fetch_date": "2022-12-20T15:38:06.651418Z", + "domain": "tanukitunes.com", + "type": "Person", + "manually_approves_followers": false, + "full_username": "doctorworm@tanukitunes.com", + "is_local": true + } +} +``` + +To avoid this, serializers should follow this pattern: + +- Only full serializers should reference other entities +- Only the `Base` serializer for an entity should be referenced + +Using this format, the resulting `/api/v2/history/listenings` endpoint would contain the following: + +- `Listening` objects containing the following information: + - The `BaseUser` who recorded the `Listening` + - The `BaseActor` of the `User` + - The `BaseRecording` (the recording/track the user listened to) including the associated `ArtistCredit` + +In this format, no `Base` serializer ever references another entity. This reduces the complexity of the result while still providing all required information. + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "createdDate": "2023-11-18T13:58:25.187Z", + "recording": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "name": "string", + "playable": true, + "local": true, + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "cover": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-18T13:58:25.187Z", + "urls": { + "source": "string", + "original": "string" + } + } + }, + "user": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "username": "string", + "fullUsername": "string", + "preferredUsername": "string", + "avatar": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-18T13:58:25.187Z", + "urls": { + "source": "string", + "original": "string" + } + } + }, + "actor": { + "fid": "string", + "url": "string", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": true + } +} +``` + +## Appropriate use of subpaths + +Most endpoints in API v1 return large amounts of information and terminate at the collection level or one subpath deeper. API v2 should be designed to split the responsibilities of endpoints into more specific subpath operations. + +Entities related to an item such as a collection, artist, release, or recording should be delegated to subpath queries such as `/api/v2/collections/{guid}/artists` rather than relying on filtering large result sets. While this increases the number of calls made by the frontend, it has the following positive impacts: + +- The API follows REST conventions more closely +- Each call can be repeated by the frontend at a much lower cost. This can be useful for refreshing content or updating components +- It dramatically decreases the APIs complexity and makes the resulting code much more maintainable + +### Case study + +In Funkwhale API v1, calling the `/api/v1/artists` endpoint returns a list of `ArtistWithAlbums` objects. These objects contain a huge amount of information, some of which is duplicated. + +```json +{ + "count": 123, + "next": "http://api.example.org/accounts/?page=4", + "previous": "http://api.example.org/accounts/?page=2", + "results": [ + { + "albums": [ + { + "tracks_count": 0, + "cover": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "size": 0, + "mimetype": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "urls": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + } + }, + "is_playable": true, + "is_local": true, + "id": 0, + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "title": "string", + "artist": 0, + "release_date": "2023-11-19", + "creation_date": "2023-11-19T14:07:15.065Z" + } + ], + "tags": ["string"], + "attributed_to": { + "fid": "string", + "url": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "summary": "string", + "preferred_username": "string", + "name": "string", + "last_fetch_date": "2023-11-19T14:07:15.065Z", + "domain": "string", + "type": "Person", + "manually_approves_followers": true, + "full_username": "string", + "is_local": true + }, + "channel": { + "uuid": "string", + "actor": { + "full_username": "string", + "preferred_username": "string", + "domain": "string" + } + }, + "tracks_count": 0, + "id": 0, + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "content_category": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "is_local": true, + "cover": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "size": 0, + "mimetype": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "urls": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + } + } + } + ] +} +``` + +While this can be useful for minimizing the number of calls made to the API, it negatively impacts the performance of the endpoint. + +To address this, Funkwhale API v2 should split this up into the following endpoints: + +- `/api/v2/artists`: returns a list of `BaseArtist` objects + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "contentCategory": "music", + "local": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:22:37.246Z", + "urls": { + "source": "string", + "original": "string" + } + }, + "tags": ["string"] + } + ] +} +``` + +- `/api/v2/artists/{guid}`: returns a full `Artist` object + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "contentCategory": "music", + "local": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:21:28.768Z", + "urls": { + "source": "string", + "original": "string" + } + }, + "tags": ["string"], + "creationDate": "2023-11-19T01:21:28.768Z", + "recordingCount": 0 +} +``` + +- `/api/v2/artists/{guid}/releases`: returns a list of `BaseRelease` objects accredited to the artist + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "artistCredit": { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + }, + "playable": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:21:51.779Z", + "urls": { + "source": "string", + "original": "string" + } + } + } + ] +} +``` + +- `/api/v2/artists/{guid}/recordings`: returns a list of `BaseRecording` objects accredited to the artist + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "name": "string", + "playable": true, + "local": true, + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:22:37.278Z", + "urls": { + "source": "string", + "original": "string" + } + } + } + ] +} +``` + +- `/api/v2/artists/{guid}/collections`: returns a list of `BaseCollections` that contain the artist + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "local": true, + "owner": { + "fid": "string", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": true + } + } + ] +} +``` + +This pattern can be repeated for other content types. From a01079850d3350ee47cf9f6bdfc1f35763f41fb5 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 26 Feb 2024 12:06:16 +0000 Subject: [PATCH 366/371] chore(api): update dependency faker to v23 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2767> --- api/poetry.lock | 8 ++++---- api/pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 7050f6d93..55a0b5139 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1440,13 +1440,13 @@ doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] [[package]] name = "faker" -version = "22.6.0" +version = "23.2.1" description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.8" files = [ - {file = "Faker-22.6.0-py3-none-any.whl", hash = "sha256:2b57f0256da6b45b7851dca87836ef5e2ae2fbb64d63d8697f1e47830d7b505d"}, - {file = "Faker-22.6.0.tar.gz", hash = "sha256:fa6d969728ef3da6229da91267a1bd4e6b902044c4822012d4fc46c71bb92b26"}, + {file = "Faker-23.2.1-py3-none-any.whl", hash = "sha256:0520a6b97e07c658b2798d7140971c1d5bc4bcd5013e7937fe075fd054aa320c"}, + {file = "Faker-23.2.1.tar.gz", hash = "sha256:f07b64d27f67b62c7f0536a72f47813015b3b51cd4664918454011094321e464"}, ] [package.dependencies] @@ -4649,4 +4649,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "897d2070435a5b91a23cda5c5a001c2d75452dc1eb056d14ec0bc4fe311073d4" +content-hash = "498453648b2e145361898cc477e777b88075caef8618039c82aac77d59e6e678" diff --git a/api/pyproject.toml b/api/pyproject.toml index 91a05fd64..01f57fbc1 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -108,7 +108,7 @@ debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" django-debug-toolbar = "==4.2.0" factory-boy = "==3.2.1" -faker = "==22.6.0" +faker = "==23.2.1" flake8 = "==3.9.2" ipdb = "==0.13.13" pytest = "==8.0.0" From a947a16b0fd97e846fee411ad169b45a5ed3c6a4 Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Mon, 26 Feb 2024 14:03:48 +0000 Subject: [PATCH 367/371] chore(api): update dependency watchdog to v4 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2768> --- api/poetry.lock | 62 ++++++++++++++++++++++++---------------------- api/pyproject.toml | 2 +- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 55a0b5139..d4c7ae379 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -4166,38 +4166,40 @@ files = [ [[package]] name = "watchdog" -version = "3.0.0" +version = "4.0.0" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, - {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, - {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, - {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, - {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, - {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, - {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, - {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, - {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, - {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, - {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, - {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, - {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, - {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, ] [package.extras] @@ -4649,4 +4651,4 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" python-versions = "^3.8,<3.13" -content-hash = "498453648b2e145361898cc477e777b88075caef8618039c82aac77d59e6e678" +content-hash = "3580dea40f4606a2d1cb36c8b35404e570aa75717dd984fc37e8ced8b1d6e0c7" diff --git a/api/pyproject.toml b/api/pyproject.toml index 01f57fbc1..6d8b1bb23 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -84,7 +84,7 @@ python-magic = "==0.4.27" requests = "==2.31.0" requests-http-message-signatures = "==0.3.1" sentry-sdk = "==1.19.1" -watchdog = "==3.0.0" +watchdog = "==4.0.0" troi = "==2024.1.26.0" lb-matching-tools = "==2024.1.25.0rc1" unidecode = "==1.3.7" From 932de8c24219a2c411523abea4aea285111fc01a Mon Sep 17 00:00:00 2001 From: Renovate Bot <bot@dev.funkwhale.audio> Date: Tue, 27 Feb 2024 09:33:42 +0000 Subject: [PATCH 368/371] chore(front): update dependency @typescript-eslint/eslint-plugin to v7 Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2769> --- front/package.json | 2 +- front/yarn.lock | 114 ++++++++++++++++++++++----------------------- 2 files changed, 58 insertions(+), 58 deletions(-) diff --git a/front/package.json b/front/package.json index 0fe6183ba..66b79e735 100644 --- a/front/package.json +++ b/front/package.json @@ -73,7 +73,7 @@ "@types/semantic-ui": "2.2.9", "@types/showdown": "2.0.6", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", - "@typescript-eslint/eslint-plugin": "6.20.0", + "@typescript-eslint/eslint-plugin": "7.1.0", "@vitejs/plugin-vue": "5.0.3", "@vitest/coverage-v8": "1.3.1", "@vue-macros/volar": "0.13.3", diff --git a/front/yarn.lock b/front/yarn.lock index b4e2e3ef9..dfbf4e3c3 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -2133,16 +2133,16 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz#9cf31546d2d5e884602626d89b0e0d2168ac25ed" - integrity sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg== +"@typescript-eslint/eslint-plugin@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz#22bb999a8d59893c0ea07923e8a21f9d985ad740" + integrity sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/type-utils" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/type-utils" "7.1.0" + "@typescript-eslint/utils" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2178,14 +2178,6 @@ "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz#8a926e60f6c47feb5bab878246dc2ae465730151" - integrity sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA== - dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - "@typescript-eslint/scope-manager@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" @@ -2194,15 +2186,13 @@ "@typescript-eslint/types" "6.21.0" "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz#d395475cd0f3610dd80c7d8716fa0db767da3831" - integrity sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g== +"@typescript-eslint/scope-manager@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz#e4babaa39a3d612eff0e3559f3e99c720a2b4a54" + integrity sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A== dependencies: - "@typescript-eslint/typescript-estree" "6.20.0" - "@typescript-eslint/utils" "6.20.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" "@typescript-eslint/type-utils@6.21.0": version "6.21.0" @@ -2214,29 +2204,25 @@ debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.20.0.tgz#5ccd74c29011ae7714ae6973e4ec0c634708b448" - integrity sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ== +"@typescript-eslint/type-utils@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz#372dfa470df181bcee0072db464dc778b75ed722" + integrity sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew== + dependencies: + "@typescript-eslint/typescript-estree" "7.1.0" + "@typescript-eslint/utils" "7.1.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" "@typescript-eslint/types@6.21.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz#5b2d0975949e6bdd8d45ee1471461ef5fadc5542" - integrity sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g== - dependencies: - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/visitor-keys" "6.20.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" +"@typescript-eslint/types@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.0.tgz#52a86d6236fda646e7e5fe61154991dc0dc433ef" + integrity sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA== "@typescript-eslint/typescript-estree@6.21.0": version "6.21.0" @@ -2252,18 +2238,19 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.20.0.tgz#0e52afcfaa51af5656490ba4b7437cc3aa28633d" - integrity sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg== +"@typescript-eslint/typescript-estree@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" + integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.20.0" - "@typescript-eslint/types" "6.20.0" - "@typescript-eslint/typescript-estree" "6.20.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" + ts-api-utils "^1.0.1" "@typescript-eslint/utils@6.21.0": version "6.21.0" @@ -2278,13 +2265,18 @@ "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.20.0": - version "6.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz#f7ada27f2803de89df0edd9fd7be22c05ce6a498" - integrity sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw== +"@typescript-eslint/utils@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.0.tgz#710ecda62aff4a3c8140edabf3c5292d31111ddd" + integrity sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw== dependencies: - "@typescript-eslint/types" "6.20.0" - eslint-visitor-keys "^3.4.1" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/typescript-estree" "7.1.0" + semver "^7.5.4" "@typescript-eslint/visitor-keys@6.21.0": version "6.21.0" @@ -2294,6 +2286,14 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" +"@typescript-eslint/visitor-keys@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz#576c4ad462ca1378135a55e2857d7aced96ce0a0" + integrity sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA== + dependencies: + "@typescript-eslint/types" "7.1.0" + eslint-visitor-keys "^3.4.1" + "@vitejs/plugin-vue@5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" From 31f35a43f1a561343317763c76abca51f936b7be Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Thu, 29 Feb 2024 09:39:48 +0100 Subject: [PATCH 369/371] fix(eslint): update dependencies Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2769> --- front/package.json | 18 +-- front/tsconfig.json | 2 +- front/yarn.lock | 334 +++++++++++++++++++------------------------- 3 files changed, 155 insertions(+), 199 deletions(-) diff --git a/front/package.json b/front/package.json index 66b79e735..b06578a40 100644 --- a/front/package.json +++ b/front/package.json @@ -81,30 +81,30 @@ "@vue/eslint-config-standard": "8.0.1", "@vue/eslint-config-typescript": "12.0.0", "@vue/test-utils": "2.2.7", - "@vue/tsconfig": "0.1.3", + "@vue/tsconfig": "0.5.1", "cypress": "13.6.4", - "eslint": "8.30.0", - "eslint-config-standard": "17.0.0", - "eslint-plugin-html": "7.1.0", - "eslint-plugin-import": "2.26.0", + "eslint": "8.57.0", + "eslint-config-standard": "17.1.0", + "eslint-plugin-html": "8.0.0", + "eslint-plugin-import": "2.29.1", "eslint-plugin-n": "16.6.2", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", - "eslint-plugin-vue": "9.8.0", + "eslint-plugin-vue": "9.22.0", "jsdom": "24.0.0", - "jsonc-eslint-parser": "2.1.0", + "jsonc-eslint-parser": "2.4.0", "msw": "2.2.1", "msw-auto-mock": "0.18.0", "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", "sinon": "15.0.2", "standardized-audio-context-mock": "9.6.32", - "typescript": "4.9.5", + "typescript": "5.3.3", "unplugin-vue-macros": "2.4.6", "utility-types": "3.10.0", "vite": "5.1.3", "vitest": "1.3.1", - "vue-tsc": "1.6.5", + "vue-tsc": "1.8.27", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4", "workbox-routing": "6.5.4", diff --git a/front/tsconfig.json b/front/tsconfig.json index bd858b045..fd8f26b1b 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@vue/tsconfig/tsconfig.web.json", + "extends": "@vue/tsconfig/tsconfig.dom.json", "compilerOptions": { "baseUrl": ".", "sourceMap": true, diff --git a/front/yarn.lock b/front/yarn.lock index dfbf4e3c3..d7e81e00a 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1169,19 +1169,19 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0": +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0": +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": version "4.10.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^1.2.0", "@eslint/eslintrc@^1.4.0": +"@eslint/eslintrc@^1.2.0": version "1.4.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== @@ -1196,6 +1196,26 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + "@exodus/schemasafe@^1.0.0-rc.2": version "1.3.0" resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" @@ -1215,7 +1235,7 @@ showdown "^2.1.0" transliteration "^2.3.5" -"@humanwhocodes/config-array@^0.11.8": +"@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== @@ -2294,6 +2314,11 @@ "@typescript-eslint/types" "7.1.0" eslint-visitor-keys "^3.4.1" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@vitejs/plugin-vue@5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" @@ -2369,12 +2394,12 @@ dependencies: "@volar/source-map" "1.10.0" -"@volar/language-core@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" - integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== +"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f" + integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== dependencies: - "@volar/source-map" "1.4.1" + "@volar/source-map" "1.11.1" "@volar/language-core@~1.10.0": version "1.10.10" @@ -2397,42 +2422,20 @@ dependencies: muggle-string "^0.3.1" -"@volar/source-map@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" - integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== +"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f" + integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== dependencies: - muggle-string "^0.2.2" + muggle-string "^0.3.1" -"@volar/typescript@1.4.1-patch.2": - version "1.4.1-patch.2" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" - integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== +"@volar/typescript@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627" + integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== dependencies: - "@volar/language-core" "1.4.1" - -"@volar/vue-language-core@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" - integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== - dependencies: - "@volar/language-core" "1.4.1" - "@volar/source-map" "1.4.1" - "@vue/compiler-dom" "^3.3.0" - "@vue/compiler-sfc" "^3.3.0" - "@vue/reactivity" "^3.3.0" - "@vue/shared" "^3.3.0" - minimatch "^9.0.0" - muggle-string "^0.2.2" - vue-template-compiler "^2.7.14" - -"@volar/vue-typescript@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" - integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== - dependencies: - "@volar/typescript" "1.4.1-patch.2" - "@volar/vue-language-core" "1.6.5" + "@volar/language-core" "1.11.1" + path-browserify "^1.0.1" "@vue-macros/api@0.8.3": version "0.8.3" @@ -2734,7 +2737,7 @@ postcss "^8.4.32" source-map-js "^1.0.2" -"@vue/compiler-sfc@3.4.19", "@vue/compiler-sfc@^3.2.47", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": +"@vue/compiler-sfc@3.4.19", "@vue/compiler-sfc@^3.2.47", "@vue/compiler-sfc@^3.3.4": version "3.4.19" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129" integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg== @@ -2791,6 +2794,21 @@ "@typescript-eslint/parser" "^6.7.0" vue-eslint-parser "^9.3.1" +"@vue/language-core@1.8.27": + version "1.8.27" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.27.tgz#2ca6892cb524e024a44e554e4c55d7a23e72263f" + integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== + dependencies: + "@volar/language-core" "~1.11.1" + "@volar/source-map" "~1.11.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/shared" "^3.3.0" + computeds "^0.0.1" + minimatch "^9.0.3" + muggle-string "^0.3.1" + path-browserify "^1.0.1" + vue-template-compiler "^2.7.14" + "@vue/language-core@1.8.8": version "1.8.8" resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.8.tgz#5a8aa8363f4dfacdfcd7808a9926744d7c310ae6" @@ -2895,10 +2913,10 @@ resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702" integrity sha512-BMuoruUFTEqhLoOgsMcgNVMiByYbfHCKGr2C4CPdGtz/affUtDVX5zr1RnPuq0tYSiaqq+Enw5voUpG6JY8Q7g== -"@vue/tsconfig@0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz#4a61dbd29783d01ddab504276dcf0c2b6988654f" - integrity sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg== +"@vue/tsconfig@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz#3124ec16cc0c7e04165b88dc091e6b97782fffa9" + integrity sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ== "@vueuse/core@10.3.0": version "10.3.0" @@ -2982,7 +3000,7 @@ ajv-draft-04@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3076,7 +3094,7 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-includes@^3.1.4, array-includes@^3.1.7: +array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -3114,7 +3132,7 @@ array.prototype.findlastindex@^1.2.3: es-errors "^1.3.0" es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -3633,6 +3651,11 @@ common-tags@^1.8.0: resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -3792,13 +3815,6 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, d dependencies: ms "2.1.2" -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3923,7 +3939,7 @@ dompurify@3.0.8: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.9.tgz#b3f362f24b99f53498c75d43ecbd784b0b3ad65e" integrity sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ== -domutils@^3.0.1: +domutils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== @@ -4155,12 +4171,7 @@ eslint-compat-utils@^0.1.2: resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== -eslint-config-standard@17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" - integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== - -eslint-config-standard@^17.0.0: +eslint-config-standard@17.1.0, eslint-config-standard@^17.0.0: version "17.1.0" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== @@ -4182,7 +4193,7 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.7.3, eslint-module-utils@^2.8.0: +eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== @@ -4214,33 +4225,14 @@ eslint-plugin-es@^4.1.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-html@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz#aec2a3772b40ccf51a5be4f972f07600539d3b3e" - integrity sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg== +eslint-plugin-html@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-8.0.0.tgz#27f72f3c36718bcd54e3e0869ad7102ac368fd8b" + integrity sha512-NINLBAXM3mLa3k5Ezr/kNLHAJJwbot6lS7Ro+SUftDw4cA51KMmcDuCf98GP6Q6kTVPY1hIggzskxAdxfUPXSA== dependencies: - htmlparser2 "^8.0.1" + htmlparser2 "^9.1.0" -eslint-plugin-import@2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-import@^2.26.0: +eslint-plugin-import@2.29.1, eslint-plugin-import@^2.26.0: version "2.29.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -4311,20 +4303,20 @@ eslint-plugin-promise@6.1.1, eslint-plugin-promise@^6.0.0: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-vue@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.8.0.tgz#91de2aabbee8cdbef078ccd4f650a9ecfa445f4f" - integrity sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA== +eslint-plugin-vue@9.22.0: + version "9.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz#e8a625adb0b6ce3b65635dd74fec8345146f8e26" + integrity sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg== dependencies: - eslint-utils "^3.0.0" + "@eslint-community/eslint-utils" "^4.4.0" natural-compare "^1.4.0" - nth-check "^2.0.1" - postcss-selector-parser "^6.0.9" - semver "^7.3.5" - vue-eslint-parser "^9.0.1" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.15" + semver "^7.6.0" + vue-eslint-parser "^9.4.2" xml-name-validator "^4.0.0" -eslint-scope@^7.1.1: +eslint-scope@^7.1.1, eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== @@ -4356,57 +4348,56 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.30.0: - version "8.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.30.0.tgz#83a506125d089eef7c5b5910eeea824273a33f50" - integrity sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ== +eslint@8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: - "@eslint/eslintrc" "^1.4.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: +espree@^9.0.0, espree@^9.3.1, espree@^9.4.0, espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== @@ -4420,7 +4411,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +esquery@^1.4.0, esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -4893,11 +4884,6 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -4947,11 +4933,6 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - hasown@^2.0.0, hasown@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" @@ -4981,15 +4962,15 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== +htmlparser2@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== dependencies: domelementtype "^2.3.0" domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" + domutils "^3.1.0" + entities "^4.5.0" http-proxy-agent@^7.0.0: version "7.0.2" @@ -5063,7 +5044,7 @@ immutable@^4.0.0: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5162,7 +5143,7 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== @@ -5400,11 +5381,6 @@ jquery@^3.4.0: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5519,17 +5495,7 @@ json5@^2.1.3, json5@^2.2.0, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-eslint-parser@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2" - integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g== - dependencies: - acorn "^8.5.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" - semver "^7.3.5" - -jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.3.0: +jsonc-eslint-parser@2.4.0, jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== @@ -5798,7 +5764,7 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -minimatch@9.0.3, minimatch@^9.0.0: +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -5849,11 +5815,6 @@ mrmime@^2.0.0: resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -5899,11 +5860,6 @@ msw@2.2.1: type-fest "^4.9.0" yargs "^17.7.2" -muggle-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" - integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== - muggle-string@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" @@ -5980,7 +5936,7 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -nth-check@^2.0.1: +nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== @@ -6089,7 +6045,7 @@ object.groupby@^1.0.1: es-abstract "^1.22.3" es-errors "^1.0.0" -object.values@^1.1.5, object.values@^1.1.7: +object.values@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -6128,7 +6084,7 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.9.1: +optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== @@ -6214,6 +6170,11 @@ parse5@^7.0.0, parse5@^7.1.2: dependencies: entities "^4.4.0" +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -6308,7 +6269,7 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss-selector-parser@^6.0.9: +postcss-selector-parser@^6.0.15: version "6.0.15" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== @@ -6462,7 +6423,7 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -regexpp@^3.0.0, regexpp@^3.2.0: +regexpp@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -6523,7 +6484,7 @@ resolve.exports@^2.0.2: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -6687,7 +6648,7 @@ semver@^6.1.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -7103,7 +7064,7 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -7302,7 +7263,7 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== -tsconfig-paths@^3.14.1, tsconfig-paths@^3.15.0: +tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== @@ -7410,16 +7371,11 @@ typed-array-length@^1.0.4: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -"typescript@4 - 5", typescript@^5.2.2: +"typescript@4 - 5", typescript@5.3.3, typescript@^5.2.2: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== -typescript@4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - typical@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" @@ -7707,7 +7663,7 @@ vue-demi@^0.12.5: resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== -vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.3.1: +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.3.1, vue-eslint-parser@^9.4.2: version "9.4.2" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d" integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ== @@ -7759,14 +7715,14 @@ vue-template-compiler@^2.7.14: de-indent "^1.0.2" he "^1.2.0" -vue-tsc@1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" - integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== +vue-tsc@1.8.27: + version "1.8.27" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c" + integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== dependencies: - "@volar/vue-language-core" "1.6.5" - "@volar/vue-typescript" "1.6.5" - semver "^7.3.8" + "@volar/typescript" "~1.11.1" + "@vue/language-core" "1.8.27" + semver "^7.5.4" vue-upload-component@3.1.8: version "3.1.8" From 02400ceea3b5f91e87591d1ebc8f16dd4e3cb450 Mon Sep 17 00:00:00 2001 From: Kasper Seweryn <github@wvffle.net> Date: Thu, 29 Feb 2024 10:51:34 +0100 Subject: [PATCH 370/371] fix(types): resolve vuex and typescript >5 errors Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2769> --- front/package.json | 1 + front/src/components/common/HumanDate.vue | 3 +- front/src/shims-vue.d.ts | 8 ++ front/src/types.ts | 2 +- front/tsconfig.json | 10 +-- front/yarn.lock | 102 ++++++++++++++++++++-- 6 files changed, 111 insertions(+), 15 deletions(-) diff --git a/front/package.json b/front/package.json index b06578a40..5900b1357 100644 --- a/front/package.json +++ b/front/package.json @@ -95,6 +95,7 @@ "jsonc-eslint-parser": "2.4.0", "msw": "2.2.1", "msw-auto-mock": "0.18.0", + "patch-package": "8.0.0", "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", "sinon": "15.0.2", diff --git a/front/src/components/common/HumanDate.vue b/front/src/components/common/HumanDate.vue index 881762aba..e870ad4ae 100644 --- a/front/src/components/common/HumanDate.vue +++ b/front/src/components/common/HumanDate.vue @@ -13,13 +13,14 @@ const props = withDefaults(defineProps<Props>(), { }) const date = computed(() => new Date(props.date)) + // TODO (wvffle): Translate useTimeAgo const realDate = useTimeAgo(date) </script> <template> <time - :datetime="date" + :datetime="date.toString()" :title="momentFormat(date)" > <i diff --git a/front/src/shims-vue.d.ts b/front/src/shims-vue.d.ts index 8337a1d5f..77b3aa4fa 100644 --- a/front/src/shims-vue.d.ts +++ b/front/src/shims-vue.d.ts @@ -1,3 +1,11 @@ +// NOTE: This has to be in a file that is loaded before shims-vuex.d.ts as shims-vuex.d.ts imports from 'vuex' +declare module 'vuex' { + export * from 'vuex/types/index.d.ts' + export * from 'vuex/types/helpers.d.ts' + export * from 'vuex/types/logger.d.ts' + export * from 'vuex/types/vue.d.ts' +} + declare module '*.vue' { import type { DefineComponent } from 'vue' // eslint-disable-next-line @typescript-eslint/ban-types diff --git a/front/src/types.ts b/front/src/types.ts index 668536ccc..a919fbe45 100644 --- a/front/src/types.ts +++ b/front/src/types.ts @@ -6,7 +6,7 @@ import type { RootState } from '~/store' // eslint-disable-next-line import type { ComponentPublicInstance } from '@vue/runtime-core' -import type { QueueTrack } from './composables/audio/queue' +import type { QueueTrack } from '~/composables/audio/queue' export type FunctionRef = Element | ComponentPublicInstance | null diff --git a/front/tsconfig.json b/front/tsconfig.json index fd8f26b1b..a1c979687 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -5,7 +5,7 @@ "sourceMap": true, "noUnusedLocals": true, "experimentalDecorators": true, - "typeRoots": ["node_modules/@types"], + "typeRoots": ["node_modules", "node_modules/@types"], "types": [ "vitest/globals", "vite/client", @@ -19,13 +19,7 @@ "~/*": ["src/*"] } }, - "include": [ - "src/**/*.d.ts", - "src/**/*.ts", - "src/**/*.vue", - "vite.config.ts", - "test/**/*.ts" - ], + "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts", "test/**/*.ts"], "vueCompilerOptions": { "plugins": [ "@vue-macros/volar/define-options", diff --git a/front/yarn.lock b/front/yarn.lock index d7e81e00a..7d76dda91 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -2965,6 +2965,11 @@ dependencies: vue-demi ">=0.14.5" +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -3532,7 +3537,7 @@ check-more-types@^2.24.0: optionalDependencies: fsevents "~2.3.2" -ci-info@^3.2.0: +ci-info@^3.2.0, ci-info@^3.7.0: version "3.9.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== @@ -4608,6 +4613,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -4671,7 +4683,7 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -4879,7 +4891,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5304,7 +5316,7 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -5478,6 +5490,16 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stable-stringify@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -5519,6 +5541,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsonpointer@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" @@ -5546,6 +5573,13 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -5734,7 +5768,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -6075,6 +6109,14 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -6096,6 +6138,11 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" @@ -6170,6 +6217,27 @@ parse5@^7.0.0, parse5@^7.1.2: dependencies: entities "^4.4.0" +patch-package@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" + integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^9.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + rimraf "^2.6.3" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.0.33" + yaml "^2.2.2" + path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -6511,6 +6579,13 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -6810,6 +6885,11 @@ sirv@^2.0.3: mrmime "^2.0.0" totalist "^3.0.0" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -7198,6 +7278,13 @@ tinyspy@^2.2.0: resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + tmp@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" @@ -8178,6 +8265,11 @@ yaml@^2.0.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== +yaml@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.0.tgz#2376db1083d157f4b3a452995803dbcf43b08140" + integrity sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" From d673e77dff5f6b7b18497f4660a768c4530fc216 Mon Sep 17 00:00:00 2001 From: Bruno-Van-den-Bosch <brunovandenbosch1997@gmail.com> Date: Thu, 11 Apr 2024 13:24:16 +0000 Subject: [PATCH 371/371] Translated using Weblate (Dutch) Currently translated at 99.8% (2177 of 2181 strings) Translation: Funkwhale/Funkwhale Web Translate-URL: https://translate.funkwhale.audio/projects/funkwhale/front/nl/ --- front/src/locales/nl.json | 45 ++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/front/src/locales/nl.json b/front/src/locales/nl.json index a316507a8..7e80030a7 100644 --- a/front/src/locales/nl.json +++ b/front/src/locales/nl.json @@ -3203,6 +3203,7 @@ "allow": "Toelaten", "deny": "Afwijzen", "funkwhaleInstance": "OfficiĆ«le Glitchtip server van Funkwhale", + "message": "De stacksporen zullen gedeeld worden naar { 0 } om ons te helpen begrijpen waarom en hoe deze fout is gebeurd.", "title": "Om de kwaliteit van onze diensten te verbeteren, zouden we informatie willen verzamelen van de crashes die gebeuren tijdens jouw sessie." }, "serviceWorker": { @@ -3214,6 +3215,28 @@ } }, "views": { + "ChooseInstance": { + "button": { + "submit": "Indienen" + }, + "header": { + "chooseInstance": "Kies je server", + "failure": "Het is niet mogelijk om verbinding te maken met de opgegeven URL", + "suggestions": "Aanbevelingen" + }, + "help": { + "notFunkwhaleServer": "Het opgegeven adres is geen Funkwhale-server", + "selectPod": "Selecteer met welke Funkwhale-server je wil verbinden. Voer zelf de URL in, of kies een van de suggesties.", + "serverDown": "De server is mogelijk niet beschikbaar" + }, + "label": { + "url": "Server-URL" + }, + "message": { + "currentConnection": "U bent nu verbonden met { 0 }. Als je doorgaat wordt je verbinding verbroken met je huidige instance en je lokale data zal worden verwijderd.", + "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" + } + }, "Notifications": { "button": { "read": "Alles markeren als gelezen", @@ -4587,28 +4610,6 @@ }, "title": "Radio" } - }, - "ChooseInstance": { - "button": { - "submit": "Indienen" - }, - "header": { - "chooseInstance": "Kies je server", - "failure": "Het is niet mogelijk om verbinding te maken met de opgegeven URL", - "suggestions": "Aanbevelingen" - }, - "help": { - "notFunkwhaleServer": "Het opgegeven adres is geen Funkwhale-server", - "selectPod": "Selecteer met welke Funkwhale-server je wil verbinden. Voer zelf de URL in, of kies een van de suggesties.", - "serverDown": "De server is mogelijk niet beschikbaar" - }, - "label": { - "url": "Server-URL" - }, - "message": { - "currentConnection": "U bent nu verbonden met { 0 }. Als je doorgaat wordt je verbinding verbroken met je huidige instance en je lokale data zal worden verwijderd.", - "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" - } } } }